异常之(自定义异常)

自定义异常:
  需继承Exception类

 步骤:
    1.创建自定义异常类
    2.在方法中通过throw关键字抛出异常对象
    3.如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常继续进行下一步操作。
    4.在出现异常方法的调用者中捕获并处理异常
复制代码
import java.util.Scanner;
//测试异常类
public class Main {
    public static void main(String[] args) {
        try {
            new Main().test(20);
        } catch(Exception e) {
      //这里可以增加一些处理的代码块,比判断等这些代码去处理异常不要只是简单的输出 System.
out.println("MyException"+e);//打印异常信息,e:相当于调用了toString方法 } finally { } } //可能会存在异常的方法 static void test(int a)throws MyException{//当有异常我们方法内不处理时,向上抛出,那这时,谁调用这个方法,那谁就要用try-catch方式去处理这个异常 System.out.println("输入的值为="+a); if (a>10){ throw new MyException(a);//抛出 } System.out.println("ok"); } } //自定义异常类 class MyException extends Exception{ //传递数字>10抛出异常 private int detail; public MyException(){} public MyException(int detail){ this.detail=detail; } //打印方法:异常的打印信息 public String toString(){ return "MyException{"+"detail="+detail+"}"; } }
复制代码
实际应用中总结:
    处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
    在多重catch块后面,可以加一个catch(Exception)处理可能会被遗漏的异常
    对于不确定的代码也可以加上try-catch,处理潜在的异常
    尽量去处理异常,切忌不是只是简单地调用printStackTrace()去打印输出
    具体如何处理异常,要根据不同的业务需要和异常类型去决定
    尽量添加finally语句块去释放占用的资源

复制代码
见名知意

package 异常;
/*如何定义异常类
 * 1、继承于现有的异常结构:RuntimeException 、Excption
 * 2、提供全局常量serialVersionUID
 * 3、提供重载的构造器
 */
public class MyException extends RuntimeException{//要处理什么异常就把类名命名为什么
    //序列号:唯一标识符
    static final long serialVersionUID = -7034897190745766939L;
    public MyException() {
        
    }
    public MyException(String msg) {
        super(msg);
    }

}
class Studeb1{    
    int id;
    public void iymm(int id) {//这里可以不写throws Exception
        if (id>0) {
            this.id=id;
            
        }else {
//            System.out.println("你的数据非法");
            //手动抛出异常对象
//            throw new RuntimeException("你的数据非法");
            throw new MyException("你的数据非法");
            //错误的,只有异常体系的才能throw
//            throw new String("不能输入负数");
        }
        
    }
    @Override
    public String toString() {
        return "Studeb [id=" + id + "]";
    }
}
class Test{
    public static void main(String[] args) {
        try {
        Studeb1 a=new Studeb1();
    
            a.iymm(1000);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
复制代码

 

posted @   hollg  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示