- abstract的理解
1)抽象类的抽象方法是不能实例的,抽象类也是不能被实例的,可以有非抽象方法
2)抽象类的子类如果是非抽象类,则必须实例化父类的抽象方法,因为有抽象方法的类必须是抽象类
3)可以有抽象类、抽象方法,但是不能有抽象变量
- Interface的理解
1)接口类是特殊的抽象类
2)接口类中只可以定义final static 修饰的变量,抽象类可以定义其他的变量
3)接口类中所有方法都是抽象的,抽象类可以有非抽象方法
- final和static关键字的使用?
- 堆和栈的区别?(heap和stack)
java中包括堆和栈两种内存存储空间。当程序进入一个方法时,系统会为该方法分配一个私有的栈空间,
栈是存放方法内的局部变量的内存,方法结束时,该空间也随之释放。
堆空间是一般不放在栈中的变量,例如存储new的对象或者final变量的一个存储空间
- java序列化Serializable
java序列化是指java对象转换成字节流或者字节流转换成java对象的过程。implements Serializable只是为了标注该对象是可被序列化的
- hashtable和hashmap的区别?
1)历史原因:hashtable是基于陈旧的Dictionary 而hashmap是java1.2以后Map的一个接口实现类
2)线程安全:hashtable是线程安全的,可以同步的,而hashmap不是线程安全的不是同步的
3)hashmap可以把空值作为key或者value的值
- JAVA代码中使用可序列化
当我们在网络中传递对象时,网络层只能解析二进制文件,所以当网络传输对象时,就需要降对象序列化之后才能进行传递,放入到httpSession中
的对象一定会被在网络层传输的
- java中equal()的作用和hashcode()的作用
1)java中规定两个对象的equals方法相等的hashcode()方法一定相等,hashcode()相等的equals方法不一定相等
2)重写了equal方法必须重写hashcode()方法?
因为原始的object的hashcode方法时返回基于对象的id,但是当set集合map集合中重写equals方法时,判断的是两个对象的值是否相等而不是对象,如果不重写hashCode方法则会返回两个对象的hashcode不等,这样就违背了两个对象的equals方法相等的hashcode()方法一定相等原则所以重写了equal方法必须重写hashcode()方法。
3)set、map集合中得值是不可重复的,内部就是通过重写hashcode和equals方法来提高匹配效率的。比如set集合含有1000个元素,现插入一个元素,传统是需要进行1000次equals比较,但是set集合内部重写equals和hashcode方法之后,则只需要先判断该元素hashcode的hash值,没有则直接进行插入,有则判断equals方法判断内部值是否相等,这样就只需要进行最多一次的判断,大大提高了匹配效率
- sleep和wait()的区别?
1、这两个方法来自不同的类分别是Thread和Object
2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
任何地方使用(使用范围)
synchronized(x){
x.notify()
//或者wait()
}
4、sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
- collection与collections的区别?
collection是一个接口如set、list,collectionss是一个类提供列表排序等方法的类