02 Java 高级00(异常、反射、注解)

02 Java 高级00(异常、反射、注解)

1. throw 和 throws 的区别?

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

2.Error 和 Exception 的区别?

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

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

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

4.final、finally、finalize 的区别?

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

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

​ 会执行

​ finally块的语句在try或catch中的return语句执行之后返回之前执行,若finally里也有return语句则覆盖try或catch中的return语句直接返回;若finally中没有return则返回try或者catch中的已确定的return值。

在阿里巴巴的开发手册中有这么一句话,不要在finally中使用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 对象来获取注解中的元数据信息

​ Annotation是对程序中类、方法、属性、参数等元素的一些关联信息、这些关联信息可以通过反射拿到

11、深拷贝和浅拷贝的区别

深拷贝:对象重新创建、对象里面的所有引用对象也全部重新创建

浅拷贝:仅仅只是重新创建一个对象、但对象里面的引用属性不会重新创建

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值