11、"=="和equals方法究竟有什么区别?
(1)==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。
(2)对于String a = “a”; Integer b = 1;这种类型的特有对象创建方式,==的时候值是相同的。
(3)基本类型没有equals方法,equals只比较值(对象中的内容)是否相同(相同返回true)。
(4)一个类如果没有定义equals方法,它将默认继承Object中的equals方法,返回值与==方法相同
12、静态变量和实例变量的区别?
(1)别名不同:成员变量也称为实例变量,静态变量也称为类变量(用static修饰)。
(2)生存周期不同:成员变量随着对象创建而存在,随着对象被回收而消失;静态变量随着类的加载而存在,随着类的消失而消失。
(3)调用方式不同:成员变量只能被对象所调用;静态变量可以被对象调用,也可以被类名调用。
(4)数据储存位置不同:成员变量数据存储在堆内存的对象中,所以也叫做对象的特有数据;静态变量数据存储在方法区(共享数据区)的静态区中,所以也叫对象的共享数据。
13、是否可以从一个static方法内部发出对非static方法的调用?
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。
14、Integer与int的区别
(1) Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。int是java的原始数据类型,Integer是java为int提供的封装类。
(2)int的默认值为0,而Integer的默认值为null
int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果为0,所以,int不适合作为web层的表单数据的类型。
在Hibernate中,如果将OID定义为Integer类型,那么Hibernate就可以根据其值是否为null而判断一个对象是否是临时的,如果将OID定义为了int类型,还需要在hbm映射文件中设置其unsaved-value属性为0。
另外,Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量。
15、Math.round(11.5)等于多少? Math.round(-11.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。
16、下面的代码有什么不妥之处?
1. if(username.equals(“zxx”){}
username可能为NULL,会报空指针错误;改为"zxx".equals(username)
2. int x = 1;
return x==1?true:false; 这个改成return x==1;就可以!
17、请说出作用域public,private,protected,以及不写时的区别
作用域
当前类
同一包(package)
子孙类
其他包(package)
public
√
√
√
√
protected
√
√
√
×
default
√
√
×
×
private
√
×
×
×
public:不同包、同一包、类内都可用
protected: 不同包的子类、同一包、类内都可用
不写时(default):同一包内、类内
private:类内
18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
两同一不同:同一类中,方法名相同,参数列表不同(参数类型,参数个数,参数的顺序)
(一同两小一大):方法名、参数列表、返回值类型相同
当参数列表完全一样,Overloaded的方法不能改变返回值的类型
当参数列表不一样,Overloaded的方法可以改变返回值的类型
注:方法覆写时应遵循的原则(一同两小一大):
(一同):方法签名必须相同;
(两小):子类方法的返回值类型比父类方法的返回值类型更小或相等
子类方法声明抛出的异常应比父类方法申明抛出的异常更小或相等;
(一大):子类方法的访问权限应比父类方法更大或相等;
19、构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。
首先搞清楚继承和重载两个概念:
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。
继承的对象是类,重载的对象是方法。所以,java是可以重载构造器方法的。
20、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?抽象类中是否可以有静态的main方法?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类可以继承具体类。抽象类中可以有静态的main方法。
备注:只要明白了接口和抽象类的本质和作用,这些问题都很好回答,你想想,如果你是java语言的设计者,你是否会提供这样的支持,如果不提供的话,有什么理由吗?如果你没有道理不提供,那答案就是肯定的了。
只有记住抽象类与普通类的唯一区别:就是不能创建实例对象和允许有abstract方法。