每日五题-Java面试题220808


1、try{} 里有一个 return语句,那么紧跟在这个try 后的 finally{}里的代码会不会执行,什么时候执行,在 return 前还是后?

会执行,在方法返回调用者前执行。

注意:

在 finally 中改变返回值的做法是不好的,因为如果存在 finally 代码块,try 中的return 语句不会立马返回调用者,而是记录下返回值待 finally 代码块执行完毕之后再向调用者返回其值,然后如果在 finally 中修改了 返回值,就会返回修改后的值。显然,在 finally 中返回或者修改返回值会对程序造成很大的困扰,C# 中直接用编译错误的方式来阻止程序员干这种龌龊的事情, Java 中 也可以通过[提升编译器的语法检查级别]((3条消息) 新版IDEA 右下角没有小人头,增修改语法检查级别_半路出家的小王的博客-CSDN博客_idea右下角的小人有什么用)来产生警告或错误。


2、 Java 语言如何进行异常处理,关键字: throws、throw、try、catch、finally 分别如何使用?

Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。 在 Java中,每个异常都是一个对象,它是 Throwable 类或其子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并可以对其进行处理。 Java 的异常处理是通过 5 个关键词来实现的: try 、 catch、throw、throws 和 finally。一般情况下是用 try 来执行一段程序,如果系统会抛出(throw)一个异常对象,可以通过它的类型来捕获(catch)它,或通过总是执行代码块(finally)来处理; try 用来指定一块预防所有异常的程序;catch 子句紧跟在 try 块后面,用来指定你想要捕获的异常的类型; throw 语句用来明确地抛出一个异常;throws 用来声明一个方法可能抛出的各种异常(当然声明异常时允许无病呻吟);finally 为确保一段代码不管发生什么异常状况都要被执行;try 语句可以嵌套,每当遇到一个try 语句,异常的结构就会被放入异常栈中,直到所有的 try 语句都完成。如果下一级的 try 语句没有对某种异常进行处理,异常栈就会执行出栈操作,直到遇到有处理这种异常 的 try语句或者最终将异常抛给 JVM。


3、运行时异常与受检异常有何不同?

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生。

受检异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发。Java 编译器要求方法必须声明抛出可能发生的受检异常,但是并不要求必须声明抛出未被捕获的运行时异常。异常和继承一样,是面向对象程序设计中经常被滥用的东西,在 Effective Java 中对异常的使用给出了以下指导原则:

  1. 不要将异常处理用于正常的控制流(设计良好的 API 不应该强迫它的调用者为了正常的控制流而使用异常)
  2. 对可以恢复的情况使用受检异常,对编程错误使用运行时异常
  3. 避免不必要的使用受检异常(可以通过一些状态检测手段来避免异常的发生)
  4. 优先使用标准的异常
  5. 每个方法抛出的异常都要有文档
  6. 保持异常的原子性
  7. 不要在 catch 中忽略掉捕获到的异常

4、列出一些你常见的运行时异常?

  1. ArithmeticException(算术异常)
  2. ClassCastException(类转换异常)
  3. illegalArgumentException(非法参数异常)
  4. IndexOutOfBoundsExc(下标越界异常)
  5. NullPointException(空指针异常)
  6. SecurityException(安全异常)

5、阐述 final、finally、finalize 的区别。

  1. final:修饰符(关键字)有三种用法:如果一个类被声明为 final,意味着它不能再派生出新的子类,即不能被继承,因此它和 abstract 是反义词。 将变量声明为 final,可以保证它们在使用中不被改变,被声明为 final 的变量必须在声明时给它定初值,而以后的引用中只能读取不可修改。被声明为 final 的方法也同样只能使用,不能在子类中被重写。
  2. finally:通常放在 try…catch… 的后面构造总是执行代码块,这就意味着程序无论正常执行还是发生异常,这里的代码只要 JVM 不关闭都能执行,可以将释放外部资源的代码写在 finally 块中。
  3. finalize: Object 类中定义的方法, Java 中允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的,通过重写 finalize() 方法可以整理系统资源或者执行其他清理工作。

源链接-掘金

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值