1.请简述java的异常体系。
Thorwable类(表示可抛出)是所有异常和错误的超类(父类)。
Error错误:程序无法处理的错误,它是由JVM产生和抛出的,比如OutOfMemoryError、ThreadDeath等。
Exception异常:程序本身可以处理的异常,分为运行时异常(非受检异常)和非运行时异常(受检异常)。
运行时异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
非运行时异常从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。
2.请简述接口和抽象类的异同。
抽象类是对类的一种抽象,接口是对行为的抽象。
接口的方法默认是public,所有方法都是抽象方法,在接口中不能有方法的实现,抽象类可以有非抽象的方法。
一个类可以实现多个接口,但最多只能继承一个抽象类。
一个类实现接口的话要实现接口的所有方法,而抽象类不一定。
3.访问修饰符public、private、protected、以及不写(default默认)时的区别有哪些?
public任何类都可以访问,跨包也可以访问,访问权限最宽松
private只能在当前类内部访问,子类、同包类、其他类都无法直接访问,访问权限最严格
protected同包中的类可以访问,不同包的子类可以访问,不同包的非子类不能访问
default不写任何修饰符时的默认权限,只有同包的类可以访问,不同包的类(即使是子类)也不能访问
4.重写equals方法为什么一定要重写hashcode()方法?
规定如果两个对象通过equals比较相等,则它们的hashCode必须返回相同的值;反之,hashCode相同的对象equals不一定相等(哈希冲突允许存在)。
若仅重写equals而不重写hashCode,可能导致两个equals相等的对象具有不同的哈希值。当它们存储在哈希表中时,会被视为不同对象,出现逻辑错误。
5.请简述java的128陷阱。
Integer定义的数据会进行自动装箱,自动装箱调用valueOf()方法,该方法会判断我们的入参是否在-128-127之间,如果在这个区间之间,则会返回一个已经存在的对象的地址(该对象在catch数组当中,catch数组是一个从-128-127的数组),不会重新创建对象,否则会重新创建对象,并返回新对象的地址。
6.如何忽略安全访问修饰符的安全检查?
对反射获取的private修饰的Field、Method或Constructor对象调用setAccessible(true)。
7.获取通过反射Class对象的三种方式?
1.Class.forName("全类名"):将字节码文件加载进内存,返回class对象
2.类名.class:通过类名的class获取
3.对象.getClass(): getClass()方法在object类当中定义着
4万+

被折叠的 条评论
为什么被折叠?



