最近整理网盘,发现了之前收藏的一些经典Java面试题,学习资料分享给大家,也很感谢分享这些资料的朋友。
1、简述你所知道的JAVA修饰符及各自的使用机制?(public、abstract、final、synchronized、super…)
public :允许所有客户访问
protected:只能在本包内被该类的子类所使用
private:只允许在本类内使用
abstract:没有提供实现,需要子类提供
static:与整个类相关,与单个对象无关
final:你只能定义一个实体一次,以后不能改变它或继承它。一个final修饰的类不能被子类化,一个final修饰的方法不能被重写,一个final修饰的变量不能改变其初始值
synchronized:方法获得对对象监控的访问权;如果该方法是static类型的,获得是对类本身的访问权。
super:构造器和方法,都用关键字super指向超类,但是用的方法不一样。方法用这个关键字去执行被重载的超类中的方法。
2. String、StringBuffer与StringBuilder之间区别?别简述各自的执行效率?
区别:String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的,
执行速度:三者在执行速度方面的比较:StringBuilder > StringBuffer > String
使用场景:1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
3、静态变量和实例变量的区别?能在静态方法中调用非静态变量吗?
静态变量属于类,该类不生产对象,通过类名就可以调用静态变量。实例变量属于该类的对象,必须产生该类对象,才能调用实例变量
静态方法及变量属于整个类,数据将会被存储在公共区域,非静态方法及变量属于对象
静态方法中无法调用实例变量,而实例方法却可以调用静态变量
4、继承和接口是什么?以及他们的区别?
1 接口定义一个类需要实现的方法 属性 索引 事件和可能的参数 返回值类型,具体的实现交由相应的类或结构,从而实现多态;而继承用于在一个现有父类基础上的功能扩展,把几个类中相同的成员提取出来 放在一个父类中,在子类中添加独特的方法 即继承 扩展
2 接口能够实现多接口继承,而继承只能实现单继承
3 继承能够获得父类方法的实现,而接口只能获得方法的定义,所以必须获得所有的方法
4 在继承中 为父类添加方法不影响子类的继承,但在接口中 为父类添加一个方法定义 必须在子类中添加此方法的实现
4、HashMap和Hashtable的区别?
1,Hashtable是基于陈旧的Dictionary类的&#