day26

异常
    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中的信息输出
}
}

上一篇:Java调用.Net WebService参数为空解决办法 (远程)调试webservice方法


下一篇:Day26:二叉搜索树与双向链表