异常详析

异常

含义:异常是指程序在运行时出现的错误​​​​​​

 

1.    异常分类:对于一些经常出现的异常,分为两类,JVM自动捕获的异常称之为“运行时异常(Runtime Expection)”或者“不受检异常(Unchecked Exception )” ,由程序员进行处理或者声明的异常称之为“受检查异常(Check Exception)

 

2.   异常处理:通常来说是受检查异常中的处理:一般来说分为两种方式​​​​​​​​​​​​​​

  • 当前方法进行捕获,处理异常
  • 异常向上抛出,由方法调用者进行处理
  • 异常捕捉:try catch 语句

try{

}catch{}

catch{}

.....(可以有若干个catch)

finally{}

发现异常跳到catch块进行捕捉输出

catch块中 出现异常之后代码语句将不会执行

异常类输出语句: printStackTrace();

finally中语句无论异常与否都将输出

案例:


public class Text1 {
public static void main(String[] args) {
		System.out.println("开始执行!");
		try
		{System.out.println("执行计算,结果为:"+10/0);
		}catch (Exception e) {
			e.printStackTrace();
		}
		finally {
		System.out.println("异常检测完毕!");
		}
		System.out.println("执行完毕!");	
}
}

 

3.异常捕获:throw,throws关键字的使用

throws在方法的声明处使用,表示此方法不处理异常,所有异常都交给调用处进行处理

throw 主要用于方法体中,表示认为抛出一个异常类的实例化对象

案例:


public class Throws {
	public static int check(String string) throws Exception{
		
		int age=Integer.parseInt(string);
		if(age<0)
		{
			throw new Exception("输出异常!年龄无法为负数!");
		}
		return age;
	}

	public static void main(String[] args) {
		try {
			int test =check("-101");
			System.out.println(test);
		}catch(Exception e){
			System.out.println("不符合常理!");
			System.out.println("异常原因为:"+e.getMessage());
			
		}
		finally {
			System.out.println("异常检查完毕!");	
		}	
	}
}

 

 

4.Error和excetion区别

Error:表示的是JVM系统出错,此时程序还没有执行,用户不能处理(一般建议终止程序)

Exception:表示的是所有程序运行过程中出现的异常,用户可以进行处理

 

5.异常类构造图以及异常捕捉顺序

如图:上层为父类,下层为子类

检查流程先子类异常匹配之后父类异常匹配,所以不同catch块中也需要把子类catch块异常放在父类前面,否则会编译错误

注意:

1.try语句块中声明的变量为局部变量,只在try语句块中有效,其后的try,catch,finally语句块或其他位置都不能访问该变量;

try语句块外声明的变量,其后的try,catch,finally语句块能访问该变量。

 

2.throw抛出一个异常对象时,该语句后面代码都不会执行

案例:出现无法编译


public class Throws {
	public static int check(String string) throws Exception{
		
		int age=Integer.parseInt(string);
		if(age<0)
		{
			throw new Exception("输出异常!年龄无法为负数!");
		}
		return age;
	}

	public static void main(String[] args) {
		try {
			int test =check("-101");
			System.out.println(test);
		}catch(Exception e){
			throw e;
			System.out.println("不符合常理!");//永远到达不了的代码
			System.out.println("异常原因为:"+e.getMessage());
			
		}
		finally {
			System.out.println("异常检查完毕!");	
		}	
	}
}

 

6.异常处理流程图(综合理解)

 

 

7.自定义异常这里不做详解,只提一个关键:自定义异常类一定要说明好继承(extends)的父类异常类型

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值