异常处理

本文深入讲解Java中的异常处理机制,包括异常的分类、处理方式(如try-catch-finally、throw-throws)、自定义异常等核心概念,并通过具体示例说明如何在实际编程中运用这些机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 java异常的分类

                    

2 java处理异常的两种方式

2.1 try…catch…finally

语法:

使用try结构扩展可能出错的代码块, 紧接try部分必须跟随catch部分或finally部分

try{

   可能出错的代码块…..

}catch(jdk定义错误类型或自定义错误类型  变量名){

    处理语句

}finally{

 

}

 

finally块必须与try块连用,finally块作用无论try中代码是否出错,finally总会执行

 

两种变形:

第一种:try..catch...finally允许嵌套;

第二种:多重catch块,catch中的错误类型,必须错误范围从小到大;

 

练习:

接收用户输入的两个整数,要求即使用户输入除数是0,我们进程也不终止;

总结:

int test1(){

  int res=0;

  try{

      return res;

}finally{

   res=3;

}

}

//调用test1()方法后返回0,原因return语句直接返回当前res为0式的值;

 

int test2(){

int res=0;

try{

   res=3;

   return res;

}finally{

   res=6;

  return res;

}

}

//调用test2()方法返回6,原因finally最终执行模板,所有finally中return语句最后执行;

2.2 java异常处理的第二种方式

throw, throws

throw表示强制抛出异常,用于违反业务规定,手工抛出异常;

throws用于在方法上声明异常,当调用该方法时,必须处理异常;

语法:

throw new 异常类(“错误描述”);

 

throws语法

在方法声明最后使用throws语句声明该方法包含某个异常;

注意:

throws 中的异常类型分为非检查异常以RuntimeException或其子类为主,这种异常方法被调用,可以不处理方法中声明的异常;

除了RuntimException异常类型外其他,throws后面声明的异常为检查异常,这些异常方法被调用必须处理方法中声明的异常;

例如:

import  java.io.IOException;

public class Demo4 {

    int age;

    //throws用于在方法上声明异常,当调用该方法时,必须处理异常;

    public void setAge(int age)throws  IOException {

        if(age<1){

            //throw表示强制抛出异常,用于违反业务规定,手工抛出异常;

           throw new IOException("年龄输入错误");

        }

        this.age = age;

    }

 

    public static void main(String[] args) {

        Demo4 m4=new Demo4();

        try {

//            //执行方法

            m4.setAge(-8);

        } catch (IOException e) {

            e.printStackTrace();

        }

 

        System.out.println("over...");

    }

  /* 可以在调用时,使用throws再次抛出异常

 public static void main(String[] args)throws Exception{

        Demo4 m4=new Demo4();

        //执行方法

        m4.setAge(-8);

        System.out.println("over...");

    }*/

}

 

3 自定义异常

作用,用于企业中将错误信息进行相应的格式转换;

步骤:

① 自定义一个继承异常的自定义类;

② 在构造方法中输出自定义格式的错误信息;

③ 在对应的方法中使用throw和throws语句使用自定义异常类;

例如:

//① 自定义一个继承异常的自定义类;

class MyExp extends Exception{

    //② 在构造方法中输出自定义格式的错误信息;

    public MyExp(String msg){

        //通过父类处理自定义异常信息

        super(msg);

    }

}

//③ 在对应的方法中使用throw和throws语句使用自定义异常类;

public class Demo5 {

    public static void say(int x)throws MyExp{

        if(x<10)

            throw new MyExp("你咋不带吗?");

    }

    public static void main(String[] args) {

        try {

            say(5);

        } catch (MyExp myExp) {

            myExp.printStackTrace();

        }

    }

}

评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一条coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值