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语句没有对某种“异常”进行处理,栈就会展开,直到遇到有处理这种“异常”的try 语句 。
运行时异常与受检异常有何异同?
答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生 。受检异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发 。Java编译器要求方法必须声明抛出可能发生的受检异常,但是并不要求必须声明抛出未被捕获的运行时异常 。异常和继承一样,是面向对象程序设计中经常被滥用的东西,神作《Effective Java》中对异常的使用给出了以下指导原则:
不要将异常处理用于正常的控制流(设计良好的API不应该强迫它的调用者为了正常的控制流而使用异常)
对可以恢复的情况使用受检异常,对编程错误使用运行时异常
避免不必要的使用受检异常(可以通过一些状态检测手段来避免异常发生)
优先使用标准的异常
每个方法抛出的异常都要有文档
保持异常的原子性
不要在catch中忽略掉捕获到的异常
(异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误 。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常 。)
类ExampleA 继承Exception,类ExampleB 继承ExampleA
有如下代码片断:
try{throw new ExampleB("b")}catch(ExampleA e){System.out.println("ExampleA");}catch(Exception e){System.out.println("Exception");} }请问执行此段代码的输出是什么?
答:输出:ExampleA 。(根据里氏代换原则[能使用父类型的地方一定能使用子类型],抓取ExampleA类型异常的catch块能够抓住try块中抛出的ExampleB类型的异常)
补充: 比此题略复杂的一道面试题如下所示(此题的出处是《Java编程思想》),说出你的答案吧!
package com.bjsxt;class Annoyance extends Exception {}class Sneeze extends Annoyance {} class Human {public static void main(String[] args)throws Exception {try {try {throw new Sneeze();}catch ( Annoyance a ) {System.out.println("Caught Annoyance");throw a;}}catch ( Sneeze s ) {System.out.println("Caught Sneeze");return ;}finally {System.out.println("Hello World!");}}}输出为:
Caught Annoyance
Caught Sneeze
Hello World!
Error和Exception的区别

文章插图
Error类,表示仅靠程序本身无法恢复的严重错误,比如说内存溢出、动态链接异常、虚拟机错误 。应用程序不应该抛出这种类型的对象 。假如出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的 。所以在进行程序设计时,应该更关注Exception类 。
Exception类,由Java应用程序抛出和处理的非严重错误,比如所需文件没有找到、零作除数,数组下标越界等 。它的各种不同子类分别对应不同类型异常 。可分为两类:Checked异常和Runtime异常
推荐阅读
- 红茶含有黄酮吗,英九红茶功效与作用
- 包含JS、CSS、React、浏览器等 前端经典面试题
- 羊肉汤要煮多久最好?
- 红茶含水分,青梅茶的功效及作用
- 红茶含有激素吗,青梅茶的功效与作用
- 红茶的vc含量,清基茶的功效和作用
- 一文读懂所有HTTP状态码含义
- 红茶含有物质及其功效,调味茶的作用和功效
- 红茶中VC含量,柿茶的功效与作用
- 白色污染的含义:白色污染的治理方法
