java面试前一定再看一遍

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异常)

    运行时异常  

      不强制处理,由于程序员代码编写错误造成的,如空指针异常,索引越界,向方法传递非法参数,等。

猜你喜欢

转载自www.cnblogs.com/gmzqjn/p/11704405.html