Java面试(二)

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构造函数。

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

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

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

原文地址:https://www.cnblogs.com/liufei1983/p/7150049.html