1.string stringbuilder strinbuffer
String是字符串常量,本身是一个对象,指向常量池内容,当对String进行增加时,需要开辟一块新的常量空间,浪费时间和空间,不利于修改。
stringbuilder和string buffer适用于可变字符串,内部是字符数组,builder效率高线程不安全,适用于单线程。buffer效率低线程安全,适用于多线程,原理是使用了synchronized修饰。
2.访问权限
private<default<protect<public
自己可用、同包可用、同包及包外子类可用、包外可用。
3.抽象类和接口的区别,什么时候用哪个?
抽象类是一种IS-A关系,子类可以说IS-A父类,双方应该有共同点。
接口是一种Like-A关系,实现了某个接口,就像是一种契约,实现了接口就必须实现其中的方法,而二者可以毫无相似的地方。接口中的方法都是public的。
- 需要让不相关的类都实现一个方法,例如不相关的类都可以实现 Compareable 接口中的 compareTo() 方法;
- 需要使用多重继承。
如果是多重继承必须用接口,如果对访问修饰有要求要用抽象类。
- 需要在几个相关的类中共享代码。
- 需要能控制继承来的成员的访问权限,而不是都为 public。
- 需要继承非静态和非常量字段。
4.重写,重载
重写是继承体系中,子类的同名方法覆盖掉父类。
重载是方法参数不同,根据传来的参数选择不同的重载方法,是编译期多态。
5.获得类对象的三种方式
对象.getClass()
类名.class
类名.forName(全限定类名)
6.linkedlist的底层实现
是双向链表,可用于栈 队列 双端队列
7.异常的类型
throwable是公共父类
error是由于系统或者编译期错误,如虚拟机运行错误,这种异常是处理不了的
exception
IOexception (受检查异常)
强制处理,由于运行环境或者其他造成的,线程调用时中断异常。】(io异常,sql异常,socket异常)
运行时异常
不强制处理,由于程序员代码编写错误造成的,如空指针异常,索引越界,向方法传递非法参数,等。