您的位置:首页 > 编程语言 > Java开发

写给自己的JAVA工程师之路-异常

2017-10-14 16:42 309 查看

认识异常

异常指的是导致程序执行中断的一种指令流,一旦异常产生而且没有正常处理的话,那么程序将会中断执行。

所有的异常类都是Throwable类的子类,而Throwable类又是Object的子类,从JDK1.0开始提供。

但是在开发中是几乎不会使用Throwable类处理异常,而是使用Throwable类下面的Exception

Error两个子类。

于是有一道面试题:请解释 Throwable类下的 Exception类和Error类:

Error:在程序还未执行时出现的错误,一般指的都是JVM出错,用户无法处理。

Exception:指的是在程序运行中出现的异常,异常处理都是针对此类型完成的。

异常处理流程



1 当程序中产生异常之后,会由JVM自动的根据异常类型实例化一个指定的异常对象。

2  程序需要判断当前的代码之中是否存在有异常处理逻辑,如果没有,则交由JVM处理,而后中断程序执行。

3  如果程序中存在异常处理,则try语句会捕获该异常类的实例化对象(想象为引用传递)。

4  捕获到的异常类实例化对象要与catch中的异常类型进行匹配。

5  如果catch匹配了该异常类型则使用相应的代码进行处理,随后要执行finally代码,如果没有任何一个异常类型与catch匹配,则直接跳转final语句。

6  执行完finally代码之后要判断该异常是否已经处理过了,如果已经处理过了则继续执行后续代码,如果没有处理,则程序继续交由JVM处理。

注意:按照对象向上转型的原则,所有的子类对象都可以向父类转换,即所有异常都可以使用Exception进行处理。(按照开发团队要求是否明确异常类型处理)

异常处理

关键字

try...catch:捕获异常并处理异常。

throws:明确的告诉用户执行某一个方法中有可能会产生哪些异常,主要用于方法的声明处。

throws并不处理异常,而是交给上一级进行处理,也就是说,调用有throws的方法就需要用try...catch处理异常,如果在main方法使用throws那么将交由JVM处理。

throw:异常对象一般是由JVM实例化,但是有了throw,用户就可以自己去实例化异常对象,如果要抛出这个对象,就必须使用throw关键字。

finall:一定会执行的代码块。

面试题:请解释throw与throws的区别

throw:在方法体中使用,表示手工抛出一个异常类的实例化对象。

throws:在方法的声明中使用,表示此方法调用时必须明确进行异常处理。

实际应用:

1  try...catch (不叙述)

2  try...catch,throws,throw,finally

class MyMath{
public static int div(int x,int y)throws Exception{
int result=0;//保存计算结果
System.out.println("**** 除法计算开始 ****");
try{
result=x/y;
}catch (Exception e) {
throw e;//继续向上抛
}finally{
System.out.println("**** 除法计算结束 ****");
}
return result;
}
}

public class ExcDemo {
public static void main(String[] args) {
try {
System.out.println(MyMath.div(10, 0));
} catch (Exception e) {
e.printStackTrace();
}
}
}


RuntimeException

面试题:请解释Exception和RuntimeException的区别

RunTimeException是Exception的子类;

Exception定义的异常都需要进行强制性的处理,而RuntimeException下的子类在编写代码时不需要进行强制的异常处理,

有用户自己选择,如果不进行处理并产生异常将交由JVM处理。

自定义异常类

class ScoreException extends Exception{
public ScoreException(String msg){
super(msg);
}
}

public class ExcDemo {
public static void main(String[] args) throws Exception{
double score=101.0;
if(score>100.0){
throw new ScoreException("成绩不能大于100");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: