1. && 与 & 的区别
&:按位与,不管左边是true或false,右边都进行运算,不会短路;
&&:逻辑与,如果左边为true,右边参与运算,如果左边为false,那么右边不参与运算,具有短路的功能 。
2. 重载和重写的区别
重载:同一个类中的方法名相同而参数列表不同,与方法的修饰符‘、返回值类型没有关系。
重写:需要遵循“两同两小一大”的原则。
两同:子类重写的方法必须和父类被重写的方法 方法名相同、参数列表相同。
两小:子类的返回值类型小于等于父类的返回值类型,子类抛出的异常小于等于父类抛出的异常。
一大:子类重写的方法使用的访问权限大于父类被重写的方法的访问权限。
注:子类不能重写父类是private的方法
3. == 与 .equals的区别
== :比较基本数据类型时比较的是大小;为引用类型的比较的是内存。
equals : 比较类中的相应属性的值是否都相等。
4.final,finally,financial的区别
-
final :用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,被其修饰的类不可继承。
-
finally :异常处理语句结构的一部分,表示总是执行。
-
financial :Object 类的一个方法,在垃圾回收器执行的时候会调用被回收对象的此方法,可以覆盖此方法。
5.接口和抽象类
相同点:
- 接口和抽象类都不能被实例化,它们都位于继承数的顶端,用于被其他类实现和继承
- 可以将抽象类和接口类型作为引用类型
- 接口和抽象类都包含抽象方法
- 一个类如果继承了某个抽象类或实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类
不同点:
- 一个类可以实现多个接口,一个类只能实现一个抽象类
- 接口中不能定义构造器,抽象类中可以定义构造器;抽象类的构造器不是用来创建对象,而是让其子类调用完成抽象类的初始化操作;
- 接口中的方法全部都是抽象方法,抽象类中可以有抽象方法和具体方法;
- 接口的成员全都是public的,抽象类中的成员可以是private、默认、protected、public;
- 接口中定义的成员变量实际上都是常量,抽象类中可以定义成员变量;
- 接口中不能有静态方法,抽象类中可以包含静态方法;(注意: JDK1.8之后接口中可以有静态方法)
6. throw 与 throws的区别
throw:
- throw主要用于方法体内,表示抛出异常,由方法体内的语句处理。
- throw 是具体向外抛出异常的动作,所以它抛出的是一个异常实例,执行throw 一定是抛出了某种异常。
throws:
- throws 语句是用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理。
- throws 主要是声明这个方法会抛出某种类型的异常,让它的使用者要知道需要捕获的异常的类型。
- throws 表示出现异常的一种可能性,并不一定会发生这种异常。
7.String, StringBuilder,StringBuffer
- String : 由final修饰,是不可变字符序列
- StringBuilder:可变字符序列,其效率低,但是线程安全
- StringBuffer:可变字符序列,其效率高,但是线程不安全
8. equals 和 hashCode的区别
- 如果两个对象equals相等,Java运行时环境会认为他们的hashcode一定相等。
- 如果两个对象equals不相等,他们的hashcode有可能相等。
- 如果两个对象hashcode相等,他们的equals不一定相等。
- 如果两个对象hashcode不相等,他们的equals不一定相等