1、如何在父类中为子类自动完成所有的hashcode和equals实现?这么做有何优劣。
在覆盖equals方法的时候,你必须要遵守它的通用约定。下面是约定的内容,来自Object的规范[JavaSE6]
自反性。对于任何非null的引用值x,x.equals(x)必须返回true。
对称性。对于任何非null的引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)必须返回true
传递性。对于任何非null的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也必须返回true。
一致性。对于任何非null的引用值x和y,只要equals的比较操作在对象中所用的信息没有被修改,多次调用该x.equals(y)就会一直地返回true,或者一致地返回false。
2、访问修饰符public、private、protected、default在应用设 计中的作用
类的只有两种public,default(不同包不可以访问)
public–都可访问(公有)
private–类内可访问(私有)
protected–包内和子类可访问(保护)
不写(default)–包内可访问 (默认)
public>protected>default>private
Java 方法默认访问级别 : 包访问
3、深拷贝和浅拷贝区别
浅拷贝是指:只复制一个对象,对象内部存在的指向其他对象数组或者引用则不复制。
深拷贝是指:不仅复制当前的对象,如果对象中还存在引用,则将引用的对象一起复制。
4、Error和Exception区别
Exception是java程序运行中可预料的异常情况,咱们可以获取到这种异常,并且对这种异常进行业务外的处理。
Error是java程序运行中不可预料的异常情况,这种异常发生以后,会直接导致JVM不可处理或者不可恢复的情况。所以这种异常不可能抓取到,比如OutOfMemoryError、NoClassDefFoundError、VirtualMachineError、LinkageError等
CheckedException,RuntimeException的区别:
CheckedException:(编译时异常) 需要用try——catch显示的捕获,对于可恢复的异常使用CheckedException,如IOException、SQLException。
UnCheckedException(RuntimeException):(运行时异常)不需要捕获,对于程序错误(不可恢复)的异常使用RuntimeException,如:ArrayIndexOutOfBoundsException、ArithmeticException、MissingResourceException、ClassNotFoundException、illegalArgumentException。
5、为什么需要hashCode?
1、 在map等集合中,通过hashCode可以很快的找到元素的位置
2、比较两个对象是否相等时,先通过hashCode比较,这样速度比较快,如果不相等直接返回false
6、为什么要重载equal方法?
Object对象默认比较的是两个对象的内存地址是否一样,正常大家应该比较的是对象里面的值是否一样。
7、为什么重载hashCode方法?
如果我们只重写equals,而不重写hashCode方法,就会出现两个对象一样,但是hashCode不相等情况,在map等集合中应用时,就会出现问题,因为hashCode不一样,两个一样的对象会放到集合中。
8、a.hashcode() 有什么用,与a.equals(b)有什么关系
hashcode只能说是标识对象,在hash算法中可以将对象相对离散开,这样就可以在查找数据的时候根据这个key快速缩小数据的范围,但hashcode不一定是唯一的,所以hash算法中定位到具体的链表后,需要循环链表,然后通过equals方法来对比Key是否是一样的
equals与hashcode的关系
equals相等两个对象,则hashcode一定要相等。但是hashcode相等的两个对象不一定equals相等。
9、在jdk1.5中,引入了泛型,泛型的存在是用来解决什么问题
泛型主要针对向下转型时所带来的安全隐患,其核心组成是在声明类或接口时,不设置参数或属性的类型。
10、有没有可能2个不相等的对象有相同的hashcode。
有可能
11、JAVA中的几种基本数据类型,是什么,各自占用多少字节?