首页 > 编程语言 >秦疆的Java课程笔记:78 异常 捕获和抛出异常

秦疆的Java课程笔记:78 异常 捕获和抛出异常

时间:2023-12-19 17:56:50浏览次数:45  
标签:Java System finally 秦疆 println 异常 public out

  • 异常处理五个关键词:trycatchfinallythrowthrows

  • 写一个会出错的代码:

public class Test1 {  
    public static void main(String[] args) {  
        int a = 1;  
        int b = 0;  
        System.out.println(a/b);  
    }  
}
====运行报错====
Exception in thread "main" java.lang.ArithmeticException: / by zero
  • 加上异常处理机制:
public class Test1 {  
    public static void main(String[] args) {  
        int a = 1;  
        int b = 0;  
        try {   //`try`监控区域
            System.out.println(a/b);  
        } catch(ArithmeticException e) {   //`catch`捕获异常
            System.out.println("异常:除数不得为0!");  
        } finally {   //`finally`处理善后工作
            System.out.println("finally");  
        }  
    }  
}
====运行结果====
异常:除数不得为0!
finally
  • finally语句不是必须的,之后学习I0流、资源等相关内容,需要一些关闭操作,可以写在fianlly语句中。
  • 将上面的演示修改一下,用一个循环调用,代替除以0错误。
public class Test2 {  
    public static void main(String[] args) {  
        try {  
            new Test().a();  
        } catch(ArithmeticException e) {  //捕获异常的类型是错误的
            System.out.println("出错了!");  
        } finally {  
            System.out.println("finally");  
        }  
    }  
    public void a() {b();}  
    public void b() {a();}  
}
====运行结果====
finally   //未能捕获异常,但是finally依旧被执行了
Exception in thread "main" java.lang.StackOverflowError   //报Error
  • 将上述代码中catch()语句改为catch(Throwable e),之前说过Throwable是所有异常和错误的基部类,可以捕获所有异常。
public class Test2 {  
    public static void main(String[] args) {  
        try {  
            new Test().a();  
        } catch(Throwable e) {  
            System.out.println("出错了!");  
        } finally {  
            System.out.println("finally");  
        }  
    }  
    public void a() {b();}  
    public void b() {a();}  
}
====运行结果====
出错了!   //成功捕获
finally
  • try…catch语句是可以像if…else语句的格式一样,捕获多个可能的异常,试试从子类到父类的异常捕获:
public class Test3 {  
    public static void main(String[] args) {  
        int a = 1;  
        int b = 0;  
        try {  
            System.out.println(a/b);  
        } catch(ArithmeticException e) {  
            System.out.println("ArithmeticException");  
        } catch(Exception e) {  
            System.out.println("Exception");  
        } catch(Throwable e) {  
            System.out.println("Throwable");  
        } finally {  
            System.out.println("finally");  
        }  
    }  
}
====运行结果====
ArithmeticException
finally
  • 若需要捕获多个异常,则需要从小到大去捕获。

  • 如果将父类异常写在子类异常的前面,那么IDEA里子类异常的语句就会报错:已捕捉到异常。

  • IDEA中,选中需要捕捉异常的代码块(比如上述例子中的System.out.println(a/b);),使用快捷键Ctrl+Alt+T,在弹出的“包围方式”菜单中,(通常情况)选择try/catch/finally,则会自动生成异常捕获语句。(这里生成的语句,JDK21和JDK8不太一样。)

  • 主动抛出异常:throwthrows,一般用在方法中。

public class Test4 {  
    public static void main(String[] args) {  
        new Test4().test(1,0);  
    }  
    public void test(int a,int b) {  
        if (b==0) {  
            throw new ArithmeticException();  
        }  
        System.out.println(a/b);  
    }  
}
  • 假设在方法中处理不了这个异常,就在方法上抛出异常。
public class Test5 {  
    public static void main(String[] args) {  
        try {  
            new Test5().test(1,0);  
        } catch (ArithmeticException e) {  
            throw new RuntimeException(e);  
        }  
    }  
    public void test(int a,int b) throws ArithmeticException {  
        if (b==0) {  
            throw new ArithmeticException();  
        }  
        System.out.println(a/b);  
    }  
}
  • 按照秦疆老师的说法,这样的处理方法在抛出异常的同时不妨碍程序继续执行,但是没有做具体演示,上述代码可能并不是一个理想案例,我暂时也不知道该怎么演示throws的功能。

标签:Java,System,finally,秦疆,println,异常,public,out
From: https://www.cnblogs.com/Acolyte/p/17914352.html

相关文章

  • JavaWeb - Day10 - 案例 - 部门管理、员工管理
    01.案例-准备工作需求&环境搭建1、部门管理部门管理功能开发包括:查询部门列表删除部门新增部门修改部门2、员工管理员工管理功能开发包括:查询员工列表(分页、条件)删除员工新增员工修改员工环境搭建步骤:准备数据库表(dept、emp)创建......
  • 一些有趣和实用的Java开发技巧和编码技巧
    当涉及到Java开发技巧和编码技巧时,有一些有趣和实用的技巧可以帮你提高效率和代码质量。以下是一些示例:1.使用Lambda表达式List<Integer>numbers=Arrays.asList(1,2,3,4,5);//使用Lambda表达式计算偶数的总和intsum=numbers.stream().(n->n%20......
  • Java Properties配置文件使用方法入门详解​
    JavaProperties配置文件使用方法详解使用配置文件的优点:好处1:可以把软件的设置永久化存储好处2:如果我们要修改参数,不需要改动代码,直接修改配置文件就可以了Properties配置文件文件后缀名为.properties,其内容是按键值对存储的。前面为键,后面为值。properties是一个双列集合,拥有Ma......
  • java,类、实例化、构造方法、this关键字、方法重载
    编写类的步骤:1、定义类名2、编写类的属性3、编写类的方法public 访问修饰符,表示在整个项目中都可以调用,也可以用其他词使用class关键字来定义类,如下,定义一个Cat类给了属性和方法,动态方法是没有static的publicclassCat{//属性Stringni_chen;Stringco......
  • jQuery与JavaScript与ajax三者的区别与联系
    简单总结:1、JS是一门前端语言。2、Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新。3、jQuery是一个框架,它对JS进行了封装,使其更方便使用。jQuery使得JS与Ajax的使用更方便 关系比喻:若把js比作木头,那么jquery就是......
  • 秦疆的Java课程笔记:77 异常 Error和Exception
    实际工作中,遇到的情况不可能非常完美。比如:写好的某个模块,用户输入不一定符合要求;程序要打开某个文件,但这个文件可能不存在或者格式不对;你要读取数据库的数据,数据可能是空的;程序在跑着,内存或者硬盘满了……等等情况。软件程序在运行过程中,这类例外情况,通称“异常”,英文:Exception......
  • 无涯教程-Java - Comparator 比较器函数
    TreeSet和TreeMap都按排序顺序存储元素。但是,比较器(Comparator)精确地定义了排序顺序的含义。比较器(Comparator)接口定义了两个方法:compare()和equals()。Compare方法intcompare(Objectobj1,Objectobj2)obj1和obj2是要比较的对象。如果对象相等,则此方法返回零。如果obj......
  • IBM MQ 异常:com.ibm.mq.MQException
    出现两种现象:1、ibmmq通道不活动2、用程序读取ibmmq时,出现:com.ibm.mq.MQException查阅队列管理器的log(C:\ProgramData\IBM\MQ\qmgrs\IBMMQMANAGER\errors),发现:3、解决办法如下:查考链接:https://blog.csdn.net/weixin_39970855/article/details/114608063......
  • TP-LINK设备在视频监控LiteCVR平台上语音对讲异常,是什么原因?
    随着科技的发展,语音对讲技术已经成为了视频监控领域中不可或缺的一部分。它不仅提高了监控的效率和准确性,还为安全监控带来了更多的可能性。在传统的视频监控中,人们只能通过观察屏幕上的图像来了解现场情况。然而,这种方式往往存在着许多局限性,例如视角、清晰度以及实时性等方面的......
  • 启动微服务报错:java.lang.IllegalStateException: Service id not legal hostname (se
    Order微服务通过opneFeign调用storage和account时报错原因分析:服务名称不能有下划线,可以使用中划线,Springcloud无法识别下划线,将下划线改为中划线即可注意:这个改了之后,你在进行远程调用的时候,接口对应的方法接口也需要相应改变【分布式开发,一个微服务模块修改了,很可能......