【JavaSE学习笔记】异常处理以及自定义异常

1.异常处理

异常:就是程序出现了不正常的情况
异常体系:
Throwable包含Error和Exception,Exception包含RuntionException和非RuntimeException。

  • Error:严重问题,不需要处理。
  • Exception:称为异常类,它表示程序本身可以处理的问题。
  • RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码。
  • 非RuntimeException:编译期就必须处理的,否则程序不能通过编译,就更不能正常运行了。

异常处理有两种方式,try…catch…throw
第一种:try…catch…
格式:

try {
	// 可能出现异常的代码;
} catch(异常类名  变量名) {
	// 异常的处理代码;
}

有时在程序运行结束后,需要释放资源的代码,需要加上finally块,以保证资源释放。例如有文件操作或者输入输出流时,最终需要释放资源。此时格式为:

try {
	// 可能出现异常的代码;
} catch(异常类名  变量名) {
	// 异常的处理代码;
} finally {
	// 释放资源代码;
}

第二种:throws
格式:throws 异常类名; //注意:这个格式是跟在方法的括号后面的
举个例子:

public void method() throws 异常类名{
	// 方法体;
}

程序的异常处理有两点需要值得注意:

  • 编译时异常必须要进行处理,两种处理方案:try…catch…或者throws。
    如果采用throws这种方案,将来谁调用谁处理。throws只是把异常抛出,自身并没有处理异常。
  • 运行时异常可以不处理,出问题后,需要我们回来修改代码。

2.自定义异常

自定义异常需要自定义一个异常类,并继承某一个异常类。这里用编译时异常Exception举例。
格式:

public class 自定义异常类名 extends Exception {
	// 无参构造方法
	// 带参构造方法
}

范例:
定义一个判断分数是否超出范围的异常类,该类继承自Exception类。

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

再定义一个教师类,这个类中有一个检查分数范围的方法,假设正常的分数落在区间[0, 100]。当分数超出范围时,该方法会抛出异常,

public class Teacher {
	public void checkScore(int score) throws ScoreException {
		if(score < 0 || score > 100){
			throw new ScoreException("分数有误");//这里使用的是带参构造方法
										        //使用throw关键字手动抛出异常
		}
		else {
			System out println("分数正常");
		}
	}
}

此时创建一个Teacher对象,调用checkScore()方法发现程序报错,但是代码逻辑并没有什么问题。这是因为checkScore()方法抛出了ScoreException这个自定义异常,而ScoreException 继承自Exception 。属于编译时异常,在程序编译前就需要处理。这时同样可以在调用该方法的方法后面继续抛出异常,也可以使用**try…catch…处理。使用try…catch…**处理异常举例。
在这里插入图片描述

public class TestMain {
    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        // try...catch...处理异常
        try {
            teacher.checkScore(20);
        } catch (ScoreException e) {
            throw new RuntimeException(e);
        }
    }
}

3.throws和throw的区别

throws:

  • 用在方法声明后面,跟的是异常类名。
  • 表示抛出异常,由该方法的调用者来处理。
  • 表示出现异常的一种可能性,并不一定会发生这些异常。

throw:

  • 用在方法体内,跟的是异常对象名。
  • 表示抛出异常,由方法体内的语句处理。
  • 执行throw一定抛出了某种异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值