葵花宝典第二天

来源:互联网 发布:sql查询多表相同列名 编辑:程序博客网 时间:2024/06/05 21:10

7、char型变量中能不能存贮一个中文汉字?为什么?
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。
备注:后面一部分回答虽然不是在正面回答题目,但是,为了展现自己的学识和表现自己对问题理解的透彻深入,可以回答一些相关的知识,做到知无不言,言无不尽。
char型变量是用来存储Unicode编码的字符的,Unicode编码字符集中包含了汉字,所以char型变量中当然可以存储汉字。不过如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存贮这个特殊的汉字 。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

8、用最有效率的方法算出2乘以8等於几?
2 << 3,
因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。

9、”==”和equals方法究竟有什么区别?
对于非字符串变量来说,“==”和“equals”方法的作用是相同的,都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。
对于基本类型的包装类型比如Boolean.Character.Byte.Shot.Integer.Long.Float.Double
“==”比较两个变量本身的值,即两个对象在内存中的首地址。
“equals”比较字符串所包含的内容是否相同。
StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自与Object类,而Object类中的equals方法是用来比较地址的,因此等于false。
==几乎是用来比较两个对象的首地址,equals如果有定义,就是比较对象内容是否一致,没有定义;Object里面的equals也是用来比较地址的,和==一样。
1.用于基本数据类型的比较
2.判断引用是否指向堆内存的同一块地址。

equals所在的位置
在Object类当中,而Object是所有类的父类,包含在jdk里面,但是并不适合绝大多数场景,通常需要重写。
public boolean equals(Object obj){
return (this==obj);
}
public boolean queals(Object obj){
return (this==obj);
}

String 类型比较不同对象内容是否相同,应该用equals,因为==用于比较引用类型和比较基本数据类型时具有不同的功能。

String 作为一个对象来使用

例子一:对象不同,内容相同,“==”返回false,equals返回true

例子二:同一对象,“==”和equals结果相同。

如果值不相同,对象就不相同,所以“==”和结果一样
这里写图片描述

12、静态变量和实例变量的区别?

在语法的定义上面:静态变量前要加static关键字,而实例变量前不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。
静态变量不属于某个实例对象,而属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会分配空间,静态变量就可以使用了。总之,实例变量必须创建后才可以通过这个对象来使用,静态变量则可以直接使用类名来使用。

13.是否可以从一个static方法内部发出对非static方法的调用?
不可以,因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时,不需要创建对象,可以直接调用,也就是说,当一个static方法被调用时,可能还没有创建任何实例对象。

14、Integer与int的区别
int是java提供的8种原始数据类型之一。java为每个原始类型提供了封装类,Integer是java为int提供的封装类,int 的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别。int则无法表达出未赋值的情况。
在Hibernate中,如果将OID定义为Integer类型,那么Hibernate就可以根据其值是否为null而判断一个对象是否是临时的,如果将OID定义为了int类型,还需要在hbm映射文件中设置其unsaved-value属性为0。

15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math类中提供饿了三个与取整有关的方法:ceil、floor、round,这些方法的作用与他们的英文名称含义相对应,例如,ceil的英文意思是天花板,该方法就表示向上取整,floor的英文意思是地板,该方法就表示向下取整,最难掌握的是round方法,它代表的是四舍五入,算法为Math.floor(x+0.5),即元素的数字加上0.5后再向下取整,如果是负数那么就和原来的取法相反。
Math类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们的英文名称的含义相对应,例如,ceil的英文意义是天花板,该方法就表示向上取整,所以,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;floor的英文意义是地板,该方法就表示向下取整,所以,Math.floor(11.6)的结果为11,Math.floor(-11.6)的结果是-12;最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。

请说出作用域public,private,protected,以及不写时的区别
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×

2、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
Overload是重载的意思,Override是覆盖的意思,也就是重写。
重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。
重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。
至于Overloaded的方法是否可以改变返回值的类型这个问题,要看你倒底想问什么呢?这个题目很模糊。如果几个Overloaded的方法的参数列表不一样,它们的返回者类型当然也可以不一样。但我估计你想问的问题是:如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载Overload。这是不行的,我们可以用反证法来说明这个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,例如,我们调用map.remove(key)方法时,虽然remove方法有返回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。

override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。在覆盖要注意以下的几点:
1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。在使用重载要注意以下的几点:
1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

原创粉丝点击