JavaDay14:异常

概述

程序的执行跟我们预期的不一样,需要对这种意外进行捕获。用到的关键字有try,catch,finally

异常分类

Error:不可修复的大问题。它是所有的错误类的父类。它是Throwable的子类。

Exception:可以捕获和处理,改变流程。但是不要为了专门改变流程而使用它。它是所有异常类的父类。它是Throwable的子类。有编译异常和运行时异常两种。

  • 运行时异常:代码在运行期间出现的异常。
  • 编译异常:编译期间就强制进行异常的捕获和处理。

语法

语法:try{

	需要监控代码;

}catch(Exception e){
   处理代码;
}

 	try{
//	对次段代码进行监控
	System.out.println("吃饭");
	System.out.println("睡觉");
	System.out.println("开车");
	System.out.println(5/0); // 发生了异常信息,跳转到异常处理流程,下面的代码不执行。
	System.out.println("回家过年");
	System.out.println("吃饭");
	System.out.println("睡觉");
					
	}catch(Exception e){
		e.printStackTrace();// 打印此异常信息
		System.out.println("出现了疫情,封城。");
	}

运行时异常

RuntimeException:所有运行时异常都需要继承此类,没有继承此类的是编译异常。

我们可以通过多个catch块来进行多种异常处理,多种异常处理需要按照一定的顺序,父类在最后,子类在前面,可以有多个子类。
针对不同的异常有不同的处理方式:

}catch(ArithmeticException e){// 捕获异常
	e.printStackTrace();// 打印此异常信息
	System.out.println("出现了疫情,封城。");
}catch (NullPointerException e) {
	e.printStackTrace();// 打印此异常信息
	System.out.println("出现了恐怖分子,突突他。");
}catch(Exception e){//- 越父类越后面,越之类越前面。
	e.printStackTrace();// 打印此异常信息
	System.out.println("出现了其它异常情况,请小心。");

finally

  • 写在catch块的后面,写在最后,只能有一个。
  • 一般回收资源的代码写在里面。
  • 即使try块中直接return,break,finally块里面的代码也会执行。可以使用System.exit(1)强制关闭虚拟机,则会跳出。
}finally{
//	无论什么情况都必须执行的代码逻辑。
	System.out.println("无论是否异常我们也要吃饭。");
	System.out.println("无论是否异常我们也要学习。");
//	return 2 ;// 当try跟finally都有返回值的时候用的finally
}	
	return 2; // 出现异常返回2,不出异常返回上面的1 

什么时候进行异常处理

  • 有发生异常也必须处理的请求,比如释放资源,跟IO相关。
  • 编译异常必须处理。
  • 当如果出现异常的时候需要进行特殊处理,比如记录日志。

throws

  • throws写在方法后面,表示这个方法可能出现的异常都抛给调用者处理,谁调用谁处理。
  • throws是可以抛出多个异常,没有先后顺序。
//	throws 写在方法后面,表示这个方法的异常都抛给调用者处理,谁调用谁处理。
	public static void  method2()  throws Exception  {
		System.out.println("method2");
//		这里出现了异常,我们可以直接捕获处理。也可以不处理,让调用者来处理。
		System.out.println(5/0);
	}
	
//	throws 是可以抛出多个异常的,没有顺序
	public static void  method3() throws Exception,NullPointerException,ClassCastException {
		System.out.println("method3");
	}
	
	public static void  method4() throws ClassNotFoundException {
		System.out.println("method4");
		Class.forName("");  
	}

throw

写在方法里面的,用来主动造一个异常。

创建一个异常类,在测试类中抛出。

public static void main(String[] args) {
		setAge(18);
		setAge(-18);
}
	
public static void setAge(int age) throws AgeOutOfBoundException{
	if(age>0){
		System.out.println("年龄为"+age);
	}else{
		throw new AgeOutOfBoundException("年龄不能为负数。");
		}
	}

自定义运行时异常

继承RuntimeException 类:

//自定义运行时异常
public class AgeOutOfBoundException extends RuntimeException {

	public AgeOutOfBoundException(){
		
	}
	
	public AgeOutOfBoundException(String s){
		super(s);
	}
	
}

自定义编译异常

继承Exception类:

//自定义编译异常
public class AgeOutOfBoundException extends Exception {

	public AgeOutOfBoundException(){
		
	}
	
	public AgeOutOfBoundException(String s){
		super(s);
	}
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值