上次给大家整理了互联网技术面试常问问题汇总及回答技巧总结,相信大家看完之后收获都特别大。
所以今天就整理了这套Java易错面试题,分享出来与朋友们共勉。
一、易错面试题
1、final、finally、finalize的区别
① final:用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,被其修饰的类不可继承。
② finally:异常处理语句结构的一部分,表示总是执行。
③finalize:Object类的一个方法,在垃圾回收器执行的时候会调用被回收此对象的方法,可以覆盖这个方法。
2、接口和抽象类的区别
(1)相同点:
①接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其它类实现或继承。
② 可以将抽象类和接口作为引用类型
③ 借口和抽象类都包含抽象方法
④一个类如果继承了某个抽象类或者实现了某个接口,都需要对其中的抽象方法进行全部实现,否则该类仍然需要被声明为抽象类
(2)不同点
① 一个类可以实现多个接口,但只能继承一个抽象类
② 接口中不能定义构造器,抽象类中可以定义构造器;抽象类的构造器不是用来创建对象的,而是让其子类调用完成抽象类的初始化操作。
③ 接口中的方法全部都是抽象方法,抽象类中可以有抽象方法和具体方法。
④ 接口中的成员全部都是public,抽象类中的成员可以是private、默认,protected、public
⑤接口中定义的成员变量实际上都是常亮,抽象类中可以定义成员变量;
⑥接口中不能有静态方法,抽象类中可以包含静态方法;(jdk1.8之后接口中可以有静态方法)
3、&和&&的区别
① &:按位与,不管左边是true还是false,右边都会进行运算,不会短路
②&&:逻辑与,只看左边结果,如果左边为true,右边参与运算,如果左边为false,右边不参与运算,有短路功能
4、重载(Overloading)和重写(overriding)的区别
(1)重载(overloading):
①看是否是重载,一是看方法名相同,二是看参数是否相同。方法名相同,参数不同就是重载,否则不是。
②方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数类型。重载是一个类中多态的一种表现。
③ Java的方法重载,就是在类中可以创建多个方法,他们具体相同的名字,但具有不同的参数和不同的定义。调用方法是通过传递给他们不同的参数个数和类型来决定具体使用哪个方法,这就是多态。
④重载时,方法名一样,但是参数类型和个数不一样,返回值类型可以相同也可以不同。无法以返回类型作为重载函数的区分标准。
(2)重写(overriding):
①父类与子类之间的多态性,对父类的函数进行重新定义。如果子类中定义的某个方法与其父类有相同的名称和参数,我们说该方法被重写。在Java中,子类可以继承父类中的方法。而不需要重新编写相同的方法。但有时子类并不想原封不动的继承父类的方法,而是想做一定的修改,这就是采用方法的重写。方法重写也称之为方法覆盖。
②若子类中的方法与父类中的某一个方法具有相同的方法名,返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可以使用super关键字,该关键字引用了当前的父类。
③子类函数的访问修改权限不能少于父类。
④重写需要遵循 ”两同两小一大“ 的原则:
- 两同:子类重写的方法必须和父类被重写的方法名相同,参数列表相同
- 两小:子类的返回值类型小于等于父类的返回值类型,子类抛出的异常小于等于父类抛出的异常
- 一大:子类重写的方法使用的访问权限必须大于父类被重写的方法的访问权限
注意:子类不能重写父类中声明为private权限的方法
总结:
重写就是写在一边,重载就是再多一个
重写:父类里面有,子类就照猫画虎写一个
重写:自己类里面有,觉得不够就再写一个
5、==和equals的区别
① = =既可以比较基本类型也可以比较引用类型。对于基本类型比较的是值,对于引用类型比较的是内存地址。
② equals 是属于java Object的一个方法,如果该方法没有被重写默认也是”= =“ ;通常情况下 重写equals方***比较类中的相应属性是否相等。
6、error和exception的区别
(1)相同点
- Error类和Exception的父类都是Throwable类
(2)不同点
- Error类一般是指Java虚拟机无法为解决的严重错误,如系统崩溃,虚拟机错误,内存不足,方法调用栈溢出等。
- Exception类表示其他因编程错误或偶然存在的外在因素导致的问题,程序可以处理,可以捕获且能修复。
7、throw和throws的区别
(1)throw:
- throw语句用在方法体内,表示抛出异常,由方法体内的语句处理
- throw是具体向外抛出异常的动作,它抛出的是一个异常实例,执行throw一定是抛出了某中异常。
(2)throws:
- throws语句是在方法声明后面,表示如果抛出一床,由该方法的调用者来进行异常处理。
- throws主要是声明这个方***抛出某种类型的异常,让它的使用者要知道需要捕获的异常的类型。
- throws表示出现异常的一种可能性,并不一定会发生这种异常。
8、String、StringBuilder、StringBuffer的区别
(1)String 有final修饰,是不可变字符序列,一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可被改变的,直至这个对象被销毁。
即:
String a="张三";
a="123";
//打印为123
System.out.println(a);