1. 开发的时候往往会出现很多问题(java内部系统框架中没有提供这些异常)
比如说:考试成绩必须在0~100之间。
很明显java没有对应的异常,需要我们自己来做一个异常。
(1)继承自Exception(编译期)
(2)继承自RuntimeException(运行期)
2. 自定义异常的案例:
(1)自定义异常MyException继承自Exception,那么MyException属于编译期异常,如下:
1 package com.himi.myexception; 2 3 /** 4 * java不可能对所有的情况都考虑到,所以,在实际开发中,我们可能需要自己定义异常 5 * 而我们随便写的一个类,是不能作为异常类来看的,要想你的类是一个异常类,就必须继承自Exception或者RuntimeException 6 * 7 * 两种方式: 8 * A:继承Exception 9 * B:继承RuntimeException 10 */ 11 12 public class MyException extends Exception{ 13 14 public MyException() { 15 // TODO 自动生成的构造函数存根 16 } 17 public MyException(String message) { 18 super(message); 19 } 20 21 }
这里MyException构造方法不会写,查看源码,看看其他继承自Exception的异常构造是怎么写的,如下:TimeoutException
1 public class TimeoutException extends Exception { 2 private static final long serialVersionUID = 1900926677490660714L; 3 4 /** 5 * Constructs a {@code TimeoutException} with no specified detail 6 * message. 7 */ 8 public TimeoutException() {} 9 10 /** 11 * Constructs a {@code TimeoutException} with the specified detail 12 * message. 13 * 14 * @param message the detail message 15 */ 16 public TimeoutException(String message) { 17 super(message); 18 } 19 }
以后遇到自定义一些属性或者其他不会写,我们要类比Android开源的代码中已经写好的类,查看源码,看看人家是怎么写的,依葫芦画瓢。
(2)Teacher.java如下:
1 package com.himi.myexception; 2 3 public class Teacher { 4 public void check (int score) throws MyException { 5 if(score>100 || score<0) { 6 throw new MyException("你输入分数不能大于100 或者小于0 ");//这里的MyException是继承自Exception是编译时期异常,必须处理,这里上抛 7 }else { 8 System.out.println("你输入的分数是没有问题的"); 9 } 10 } 11 12 }
(3)在编译一个测试类,测试逻辑运行情况,如下:
1 package com.himi.myexception; 2 3 import java.util.Scanner; 4 5 public class StudentDemo { 6 7 public static void main(String[] args) { 8 Scanner input = new Scanner(System.in); 9 System.out.println("请输入学生成绩:"); 10 int score = input.nextInt(); 11 Teacher t = new Teacher(); 12 try { 13 t.check(score); 14 } catch (MyException e) { 15 // TODO 自动生成的 catch 块 16 e.printStackTrace(); 17 } 18 19 } 20 21 }
运行效果如下:
时间: 2024-10-27 00:50:31