什么是异常:
什么是异常:各种可能或者不可能预料到的错误,比如被零除,想要打开的文件不存在等;
注意,这个异常通常是程序员故意设置,比如,写一个计算器,我们知道0
不能做除数,但是万一客户使用时,故意或者非故意输入0为除数了怎么办,
当然,我们可以用if判断解决,但是,真实的程序要复杂的多,程序员不可能
预料到具体每一种实现方式,所以用异常处理机制,假如程序出现某种错误,
程序要怎么执行下去。
简单来说,异常就是程序运行时出现的一种事件,这个事件中断了指令流的进行;
异常分类:
异常的分类:Java中所有的异常都是Throwable以及其子类;
一: Error,错误,多是硬件层次问题,如内存溢出,文件损坏,Java对此无能为力。
二:Exception,异常,分为受检异常和非受检异常,表示java可以处理的异常
1,受检异常,不能通过编译,必须处理完才能编译,比如日期的parse异常
2,非受检异常,需要修改代码,可处理可不处理,注意,此处的修改代码
和处理不是一个概念,处理不是广义上的意义,是java一种手段,一种
过程,包括try catch处理和throws处理。
自定义异常类:
自定义异常类,分数0-100为例子
1,新建一个异常类ScoreException extends Exception,只有2个构造方法
2,新建一个类ScoreChecked,其中有一个方法规定了不在1-100范围内就抛出异常,
(注意,是throw关键字,是抛出这个动作,而不是throws),注意这个方法也要用
throws放在后面。
3,定义测试类,写一个输入分数并且输出的方法,throws该异常,并在调用的时候try catch
下面是具体实现代码:
1,新建一个异常类ScoreException extends Exception,只有2个构造方法:
public class ScoreException extends Exception{
//只有两个构造方法,自动生成
public ScoreException() {
}
public ScoreException(String message) {
super(message);
}
}
2,新建一个类ScoreChecked,其中有一个方法规定了不在1-100范围内就抛出异常:
public class ScoreChecked {
//该方法规定什么时候抛出异常,并且在小括号和大括号之间throws
void check(int score) throws ScoreException {
if (score<0||score>100){
throw new ScoreException("分数输入不对");//message能打印到控制台
}
}
}
3,定义测试类,写一个输入分数并且输出的方法,throws该异常,并在调用的时候try catch:
public class Demo {
public static void main(String[] args) {
//定义一个输入输出分数的方法
System.out.println("请输入分数");
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
//调用check方法,就要创建ScoreChecked对象
ScoreChecked sco = new ScoreChecked();
//try catch捕获异常
try {
sco.check(score);
System.out.println(score);
} catch (ScoreException e) {
e.printStackTrace();//打印message
}
}
}