首页 > 编程知识 正文

小白学java看什么书,java异常处理的机制有哪些

时间:2023-05-06 18:02:41 阅读:164815 作者:3950

作者|繁荣的溪流贤若如

编辑责任|爱笑的河马

展出|csdn(id:csdnnews ) )。

在33558www.Sina.com/Java中,Java在编译、执行或执行过程中遇到的错误是个例外。

程序错误有三种:编译错误、运行时错误和逻辑错误

编译错误的原因是程序没有遵循语法规则。 编译器可以自己发现,并提示错误的原因和位置。 这也是初学者刚接触编程语言时经常遇到的问题。

运行时错误是因为程序在运行时发现了运行环境无法执行的操作。

逻辑错误是因为程序没有按照预期的逻辑顺序执行。 异常是指在程序执行过程中发生错误,异常处理是指处理和控制这些错误。

让我们看看代码。

packagecom.yichang; public class test { publicstaticvoidmain (string [ ] args ) system.out.println )1/0); //0不能是除数}}执行后的结果如下。

我注意到程序错误,但是图中的错误信息显示了两个信息。

发生了什么错误

错误位置

异常的简介

以上面的代码为例,如果程序在运行时运行main方法,然后运行到1/0,则程序会报告错误。 程序首先创建错误对象,以消除此错误对象。 我们知道我们的程序在Java虚拟机(JVM )上运行,程序丢失的错误对象将被JVM捕获。 当然,JVM在捕获到错误对象后,不知道该怎么办。 那个你不能做错误的调整。 JVM会打印错误信息。

总结:

上面的例子中出现的异常是运行时异常(异常是错误的)。

程序创建错误对象,然后抛出错误对象。 (投例外。 )

默认情况下,JVM捕获并打印错误消息(捕获异常) )。

异常产生的过程

首先,请看下面的代码。

packagecom.yichang; public class test { publicstaticvoidmain (string [ ] args ) system.out.println )1/0); //0除数System.out.println ('你好' ); }运行结果如下。

从上面的代码和运行结果可以看出,控制台上没有打印你好。 这是因为在JVM捕获异常后,程序将终止。 这意味着,在JVM处理错误时,程序此时将终止,因此无法执行异常和后续代码。 我们可以根据生活的实例来思考。 什么时候百度会因为找不到东西而停止服务,一定做不到。 因此,我们以后在JVM异常到达之前如何停止异常,自己单独处理,请不要给JVM添麻烦。

为什么不能直接让JVM获取异常

虽然上面的示例描述了程序创建错误对象,但是说到对象,我们知道对象是由类创建的。 该异常对象一定是由异常类创建的。 下图是Java提供的异常类。

从图中可以看到,Throwable是所有异常的根,所有异常类都是从Throwable继承的,就像面向对象的所有类都是从Object继承的一样。

我们来谈谈异常的分类:

运行时间扩展:时发生异常。 通常不手动处理,而是在出现问题后再处理。

其他Exception:必须手动处理。

Error:一般指系统级错误。

用生活例子说明这三个异常。 初学者容易理解。

假设我们现在开车上山。

开车时发现山上有很多小石头,但我们没能处理好所有的小石头。 这个时候,我们还在正常驾驶。 什么时候小石头弄坏了轮胎? 我们再下车换备用轮胎。 这就是运行时的异常

开车的时候我注意到前面有一块大石头挡住了路。 这个时候,你必须下车先移动这块石头才能继续爬山。 这也就是其他的表达式。

开车上山的过程中山塌了,你又处理不了。 在山好起来之前你必须继续出发。 也就是说是错误。 这样的错误是我们一般程序员无法处理的。

异常的分类

>

异常的处理方法
try···catch处理

语法:

try{    //尝试执行的代码        }catch(Exception e){    //处理异常的代码        }finally{    //最终的}

下面我将文中案例进行改造:

package com.yichang;public class Test {    public static void main(String[] args) {        try {            System.out.println(1/0);//0不能做除数        }catch (Exception e){            e.printStackTrace();//打印错误信息,给程序员看的            System.out.println("系统出现错误,请联系管理员");//给客户看的        }finally {            //一般做收尾工作            System.out.println("你好");        }    }}

运行结果为:

try-- 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。

catch-- 用于捕获异常。catch用来捕获try语句块中发生的异常。

finally-- finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。

throws和throw处理

throws表示方法准备要扔出来一个异常

throw表示向外抛出异常

举例说明:

package com.yichang;public class Test1 {    public static void chu(int a,int b) throws Exception{        if (b==0){            throw new Exception("除数不能为0");        }else {            System.out.println(a/b);        }    }    public static void main(String[] args) throws Exception{        chu(1,0);    }}

运行结果:

以上这两种方法都是处理异常的,如果这个异常你可以处理,就用try···catch方法捕获并处理异常,如果这个异常你不能处理,就用throws方法抛出异常,但作为程序员的我们要始终记住一句话:产生的错误尽可能的自己处理,少向外抛出异常。

自定义异常

到这可能有的朋友要问了,为什么要自定义异常,Java给的那么多还不够用吗?我可以告诉你,当然不够用,比如在生活中,我们都知道外面的澡堂子里边是分男女澡堂的,如果有男顾客走进了女澡堂或有女顾客走进了男澡堂,就坏事了,这算是一个大异常吧,那大家想,jdk会给我们提供跟性别还有澡堂子有关的异常吗?肯定是不可能的,那此时就需要我们自定义异常。我以澡堂子为例,写一个程序,供大家参考。

自定义异常:直接继承Exception或者RuntimeException来是实现自定义异常

Person类

package com.yichang;public class Person {    String name;//姓名    String gender;//性别    public Person(String name, String gender) {        this.name = name;        this.gender = gender;    }}

ZaoTangZi类

package com.yichang;public class ZaoTangZi {    public void man(Person p) throws GenderException{        if (p.gender=="男"){            System.out.println("欢迎光临");        }else {            //需要抛出一个异常            throw new GenderException("性别错误,这里是男澡堂子");        }    }}

GenderException类

package com.yichang;public class GenderException extends Exception{    //自己定义的异常必须要继承Exception或RuntimeException    public GenderException(String msg){        super(msg);//调用父类的构造方法,Exception(msg)    }}

Test类

package com.yichang;public class Test {    public static void main(String[] args) throws GenderException{        Person p1 = new Person("drdgz","男");        Person p2 = new Person("单薄的萝莉","女");        ZaoTangZi z = new ZaoTangZi();        z.man(p2);    }}

运行结果:

写到这,这篇异常处理的文章就写完了,看完后我们应该明白以下几个问题:

什么是异常

出现异常如何处理

如何自定义异常

可能写的有点啰嗦了,但对新手是友好的,还请大家多多包涵,希望能对大家有所帮助。

【END】

更多精彩推荐

☞同期两篇 Nature:运行温度高于 1K 的量子计算平台问世!

☞Libra 的 Move 语言初探,10 行代码实现你第一个智能合约

☞程序员:“我放弃了年薪 20 万的 Offer”

☞20万个法人、百万条银行账户信息,正在暗网兜售

☞以太坊2.0中的Custody Game及MPC实现

☞很用心的为你写了 9 道 MySQL 面试题,建议收藏!

你点的每个“在看”,我都认真当成了喜欢

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。