11、两个对象的hashCode()相同,则 equals()是否也一定为 true?
equals与hashcode的关系:
1. 如果两个对象调用equals比较返回true,那么它们的hashCode值一定要相同;
2. 如果两个对象的hashCode相同,它们并不一定相同。
hashcode方法主要是用来提升对象比较的效率,先进行hashcode()的比较,如果不相同,那就不必在进行equals的比较,这样就大大减少了equals比较的次数,当比较对象的数量很大的时候能提升效率。之所以重写 equals() 要重写 hashcode() ,是为了保证 equals() 方法返回true的情况下hashcode值也要一致,如果重写了 equals() 没有重写 hashcode() ,就会出现两个对象相等但 hashcode() 不相等的情况。这样,当用其中的一个对象作为键保存到hashMap、hashTable或hashSet中,再以另一个对象作为键值去查找他们的时候,则会查找不到。
12、Java创建对象有几种方式?
Java创建对象有以下几种方式:
1、用new语句创建对象。
2、使用反射,使用Class.newInstance()创建对象。
3、调用对象的clone()方法。
4、运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。
13、方法重载和重写的区别?
同个类中的多个方法可以有相同的方法名称,但是有不同的参数列表,这就称为方法重载。参数列表又叫参数签名,包括参数的类型、参数的个数、参数的顺序,只要有一个不同就叫做参数列表不同。
重载是面向对象的一个基本特性。
publicclassOverrideTest { voidsetPerson() { } voidsetPerson(Stringname) { //set name } voidsetPerson(Stringname, intage) { //set name and age } }
方法的重写描述的是父类和子类之间的。当父类的功能无法满足子类的需求,可以在子类对方法进行重写。方法重写时, 方法名与形参列表必须一致。
publicclassPerson { privateStringname; publicvoiddailyTask() { System.out.println("work eat sleep"); } } publicclassStudentextendsPerson { publicvoiddailyTask() { System.out.println("study eat sleep"); } }
14. 接口与抽象类区别?
1、语法层面上的区别
抽象类可以有方法实现,而接口的方法中只能是抽象方法;
抽象类中的成员变量可以是各种类型的,接口中的成员变量只能是public static final类型;
接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
一个类只能继承一个抽象类,而一个类却可以实现多个接口。
2、设计层面上的区别
抽象层次不同。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口只是对类行为进行抽象。继承抽象类是一种"是不是"的关系,而接口实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是具备不具备的关系,比如鸟是否能飞。继承抽象类的是具有相似特点的类,而实现接口的却可以不同的类。
15. 常见的Exception有哪些?
常见的RuntimeException:
1. ClassCastException //类型转换异常
2. IndexOutOfBoundsException //数组越界异常
3. NullPointerException //空指针
4. ArrayStoreException //数组存储异常
5. NumberFormatException //数字格式化异常
6. ArithmeticException //数学运算异常
unchecked Exception:
1. NoSuchFieldException //反射异常,没有对应的字段
2. ClassNotFoundException //类没有找到异常
3. IllegalAccessException //安全权限异常,可能是反射时调用了private方法