异常
Throwable
|
------------------------
| |
Error Exception
|
---------------------------------
| |
RuntimeException 非RuntimeException
Error:严重问题,不需要处理
Exception:异常类,它表示程序本身可以处理的问题
RuntimeException:在编译期不检查,出现问题后,需要我们回来修改代码
非RuntimeException:编译期就必须处理,否则程序不能通过编译,就不能运行
程序出现异常,若没做任何处理,JVM会做默认处理:
1.把异常的名称,原因及异常出现的位置等信息输出在控制台
2.程序停止执行
异常处理
try{
可能出现异常的代码;
}catch(异常类名 变量名){
异常的处理代码;
}
程序从try里面的代码开始执行,出现异常后会自动生成一个异常类对象,该异常对象将提交给java运行时系统
当java运行时系统接受到异常对象时,会到catch中去找匹配的异常类,找到后进行异常的处理,完成后程序继续执行
Throwable
public String getMessage()//返回异常原因
public String toString()//返回此可抛出的简短描述
public void printStackTrace()//把异常的错误信息输出在控制台(错误信息最全)
1.编译时异常:RuntimeException类及其子类,必须显示处理,否则无法编译
2.运行时异常:除编译时异常外,无需显示处理
shrows 异常类名;
编译时异常必须要处理:try...catch或throws,如果用throws将来谁调用谁处理
运行时异常可以不处理,出现问题后需要改代码
自定义异常
public class 异常类名 extends Exception{
public 异常类名(){}
public 异常类名(String message){
super(message);
}
}
例子
public class ScoreException extends Exception{
public ScoreException(){}
public ScoreException(String message){
super(message);
}
}
public class Teacher
{
public void checkScore(int score) throws ScoreException
{
if(score<0||score>100)
{
shrow new ScoreException("你给的分数有误");
}else
{
System.out.println("分数正常");
}
}
}
import java.util.Scanner;
public class TeacherDemo
{
public static void main(String[] args)
{
Scanner sc= new Scanner(System.in);
System.out.println("请输入分数");
int score = sc.nextInt();
Teacher t = new Teacher();
try{
t.checkScore(score);
}catch(ScoreException e){
e.printStackTrace();
}//若分数不在0-100间则按照Teacher中的信息输出
}
}