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

认识异常

异常指的是导致程序执行中断的一种指令流,一旦异常产生而且没有正常处理的话,那么程序将会中断执行。
所有的异常类都是 Throwable类的子类,而 Throwable类又是Object的子类,从JDK1.0开始提供。
但是在开发中是几乎不会使用 Throwable类处理异常,而是使用 Throwable类下面的 Exception
于是有一道面试题:请解释  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");
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值