异常、反射、注解面试题

1. throw 和 throws 的区别?

参考答案

位置不同
    1. throws 用在函数上,后面跟的是异常类,可以跟多个;而 throw 用在函数内,后面跟的是异常对象。
功能不同:
    1. throws 用来声明异常,让调用者只知道该功能可能出现的问题,可以给出预先的处理方式;throw 抛出具体的问题对象,执行到 throw,功能就已经结束了,跳转到调用者,并将具体的问题对象抛给调用者。也就是说 throw 语句独立存在时,下面不要也不能定义其他语句,因为执行不到且语法会报错。
    2. throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw 则是抛出了异常,执行 throw 则一定抛出了某种异常对象。
    3. 两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

2. Error 和 Exception 的区别?

参考答案

    Error 类和 Exception 类的父类都是 Throwable 类,他们的区别如下:
    Error 类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
    Exception 类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止运行。
    Exception 类又分为运行时异常(Runtime Exception)和受检查的异常 (Checked Exception ),运行时异常;编译能通过,但是一运行就终止了,程序不会处理运行时异常,出现这类异常,程序会终止。而受检查的异常,要么用 try。catch 捕获,要么用 throws 字句声明抛出,交给它的调用类处理,否则编译不会通过。

3. 请说出你最常见的 5 个 RuntimeException

参考答案

    ClassCastException(类转换异常)
    IndexOutOfBoundsException(数组越界)
    NullPointerException(空指针)
    ArrayIndexOutOfBoundsException (用非法索引访问数组时抛出的异常)
    ArithmeticException (当出现异常的运算条件时,抛出此异常)
    IllegaArguementException(抛出的异常表明向方法传递了一个不合法或不正确的参数。)

4. final、finally、finalize 的区别?

参考答案

    final:用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,被其修饰的类不可继承。
    finally:异常处理语句结构的一部分,表示总是执行。
    finalize:是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM 不保证此方法总被调用。

5. try{}里有一个 return 语句,那么后面的 finally{}里代码会不会执行,什么时候被执行,在 return 前还是后?

参考答案

    会执行,在 return 之后。

6. 异常的处理机制有几种?

参考答案

    异常捕捉:try…catch…finally,
    异常抛出:throw throws

7. 除了使用 new 创建对象之外,还可以用什么方法创建对象?

参考答案

    使用 Java 反射可以创建对象。

8. Java 反射创建对象效率高还是通过 new 创建对象的效率高?

参考答案

    通过 new 创建对象的效率比较高。通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低。

9. 哪里会用到反射机制?

参考答案

    jdbc 就是典型的反射,Class.forName('com.mysql.jdbc.Driver');//加载 MySQL 的驱动类。
    还有就是,如 MyBatis、Spring 等框架使用反射实现的。

10. 注解是什么?

参考答案

    Annotation(注解)是 Java 提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法。
    Annatation(注解)是一个接口,程序可以通过反射来获取指定程序中元素的 Annotation 对象,然后通过该 Annotation 对象来获取注解中的元数据信息

你可能感兴趣的:(java,开发语言,面试,职场和发展)