219 自定义异常

219 自定义异常

> 为什么要学习自定义异常?——因为实际工作中,有些情况不是Java定义的异常,但开发者需要把它们定义为异常。比如学习成绩不应该是负数

【代码操作思路】

在idea里按ctrl n,搜‘NullPointException’

public class NullPointerException extends RuntimeException

接着搜‘ParseException’

public class ParseException extends Exception

总结,继承RuntimeException类或Exception类的,可以自定义异常

【自定义异常 的 格式】

public class 异常类名 extends Exception{

无参构造

带参构造

}

例如

pubilc class ScoreException extends Exception{

public ScoreException(){}

public ScoreException(String message){}

super(message);

}

【代码书写思路】

又,ctrl f查找出现detailMessage的地方,一共6处,第一处是声明这个成员变量,其他是传值给它的

private String detailMessage;

【throws和throw的区别】

throws

throw

用在方法声明后面,跟异常类名

表示抛出异常,由方法的调用者做实际处理

可能有异常,可能没异常

用在方法体内,后面跟异常对象名

表示抛出异常,在当前的方法体内进行处理

必定有异常

--------------------------------------------------------------

(module)myException

(package)it05e219

class)ScoreException,Teacher,TeacherTest

--------------------------------------------------------------

package e219;

public class ScoreException extends Exception{

    public ScoreException() {

    }

    public ScoreException(String message, Throwable cause) {

        super(message);

    }

    //然后把message传给父类Exception,

    // 经过Java源代码的层层传递,message最终传给detailMessage

    //这样做,后面就可以使用getMessage方法获取message???

}

--------------------------------------------------------------

package e219;

import java.util.Scanner;

public class Teacher {

    public void checkScore(int score) throws ScoreException{

        if(score<0 || score>100){

            //手动抛出异常

            throw new ScoreException();

        }else{

            System.out.println("219/the score is ok.");

        }

    }

}

--------------------------------------------------------------

package e219;

import java.util.Scanner;

public class TeacherTest {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        System.out.println("219/what's the score?");

        int score = sc.nextInt();//ATTENTION:nextInt() instead of nextLine()

        Teacher t = new Teacher();//创建Teacher对象以调用Teacher的方法checkScore

        try{

            t.checkScore(score);

        }catch(ScoreException se){

            se.printStackTrace();

            System.out.println("wrong format of score");

        }

    }

}

Guess you like

Origin blog.csdn.net/m0_63673788/article/details/121508193