首页 > 技术文章 > Java面试(二)

liufei1983 2017-07-11 13:19 原文

1  java中Exception 和 Error 区别

  都是Throwable的子类。RuntimeException继承自Exception。

     Error和RuntimeException及其子类是未检查异常;其他异常是受检查异常。

  Exception:需要捕获或者需要处理的异常。用于用户程序可以捕获的异常。

  Error:定义了不期望被用户程序捕获的异常(系统崩溃,虚拟机错,内存不足,方法调用栈溢出,比如StackOverFlowError, OutOfMemoryError)。系统级的错误和    程序不必处理的异常,是java运行环境中的内部错误或者硬件问题,比如:内存资源不足,对于这种错误,程序基本无能为力。

  运行时异常:除数为0;错误类型转换;数组越界,空指针。(如果出现这种错,一定是程序猿的错误)

  受检查异常:要有try catch或 throws声明。

2  finally代码块和  finalize() 方法区别?

  注意:当try和catch中有return,finally仍然会执行

   Finally是在return后面的表达式运算后执行的,所以函数返回值是在finally执行前确定的无论finally中代码如何,return的值都确定,是之前保存的值

  Finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值,而是finally中return的值。

  Finalize是object类的一个方法,在对象被垃圾回收之前由java 虚拟机来调用。

3  throw 和 thrwos

  throw : 代码中抛出异常。 Throws: 表明方法不能处理,而抛出的异常,多个异常用逗号分。

4 finally

  无论是否抛出异常,finally中的都要执行。主要是做一些释放资源之类的事情。比如:I/O缓冲区,数据库链接。

5 异常处理完后,Exception对象会发生什么变化?

  下一个垃圾回收过程中被回收掉。

6  Java中两种异常类型是什么?他们有什么区别?

  受检查异常(checked): 用try-catch捕获处理;或者用throws在方法上声明。

  不受检查异常(unchecked):不需要在方法或构造函数上声明,异常可以传播到方法外面。

7 static块:在类加载的时候执行一次,一般用来出回话静态变量和调用静态方法。

  A继承B,A a = new A();

   B静态代码块-》A的静态代码块-》B非静态代码块-》B构造函数-》A的非静态代码块-》A构造函数。

  总结:静态代码块总是最先执行

  非静态代码块跟非静态方法一样,跟对象有关,但是非静态代码块在构造函数之前执行。

  父类非静态代码块,构造函数执行完后(父类构造完),才开始执行子类的非静态代码块和构造函数。

推荐阅读