当前位置:首页 > Java技术 > Java 异常类及异常处理简单概念

Java 异常类及异常处理简单概念

2022年11月07日 17:48:00Java技术16

异常也称为例外,是在程序运行过程中发生的、会打断程序正常执行的事件,下面是几种常见的异常:
1. 算术异常( ArithmeticException)。
2. 没有给对象开辟内存空间时会出现空指针异常( NullPointerException)。
3. 找不到文件异常( FileNotFoundException)。
当异常发生时,通常可以用两种方法来处理,一种是交由 Java 默认的异常处理机
制做处理。但这种处理方式, Java 通常只能输出异常信息,接着便终止程序的运行。Java 的异常处理机制也秉承着面向对象的基本思想。在 Java 中,所有的异常都是以类的类型存在,除了内置的异常类之外, Java 也可以自定义的异常类。此外, Java的异常处理机制也允许自定义抛出异常。
异常处理是由 try、 catch 与 finally 三个关键字所组成的程序块,其语法如下:
Java 异常类及异常处理简单概念 _ JavaClub全栈架构师技术笔记
语法是依据下列的顺序来处理异常:
1、 try 程序块若是有异常发生时,程序的运行便中断,并抛出“异常类所产生的对象”。
2、 抛出的对象如果属于 catch()括号内欲捕获的异常类,则 catch 会捕捉此异常,然后进到 catch 的块里继续运行。
3、 无论 try 程序块是否有捕捉到异常,或者捕捉到的异常是否与 catch()括号里的异常相同,最后一定会运行 finally 块里的程序代码。finally 的程序代码块运行结束后,程序再回到 try-catch-finally 块之后继续执行。
try语句块不能单独使用,后面必须跟一个catch块或者finally块
Java 异常类及异常处理简单概念 _ JavaClub全栈架构师技术笔记

异常类的继承架构

Java 异常类及异常处理简单概念 _ JavaClub全栈架构师技术笔记
习惯上将 Error 与 Exception 类统称为异常类,但这两者本质上还是有不同的。Error
类专门用来处理严重影响程序运行的错误,可是通常程序设计者不会设计程序代码去
捕捉这种错误,其原因在于即使捕捉到它,也无法给予适当的处理,如 JAVA 虚拟机
出错就属于一种 Error。
不同于 Error 类, Exception 类包含了一般性的异常,这些异常通常在捕捉到之后
便可做妥善的处理,以确保程序继续运行。
从异常类的继承架构图中可以看出: Exception 类扩展出数个子类,其中
IOException、 RunntimeException 是较常用的两种。 RunntimeException 即使不编写异
常处理的程序代码,依然可以编译成功,而这种异常必须是在程序运行时才有可能发生,例如:数组的索引值超出了范围。
与 RunntimeException 不同的是,IOException一定要编写异常处理的程序代码才行,它通常用来处理与输入/输出相关的操作,如文件的访问、网络的连接等。当异常发生时,发生异常的语句代码会抛出一个异常类的实例化对象,之后此对象与 catch 语句中的类的类型进行匹配,然后在相应的 catch 中进行处理。

抛出异常

抛出( throw)异常,以及如何由 try-catch 来接收所抛出的异常。抛出异常有下列两种方式:
1、 程序中抛出异常
2、 指定方法抛出异常

程序中抛出异常

在程序中抛出异常时,一定要用到 throw 这个关键字,其语法如下:
throw 异常类实例对象 ;

public class TestException7_4 {
    public static void main(String args[]) {
        int a = 4, b = 0;
        try

        {
            if (b == 0)
                throw new ArithmeticException("一个算术异常"); // 抛出异常
            else
                System.out.println(a + "/" + b + "=" + a / b);// 若抛出异常,则执行此行
        } catch (ArithmeticException e) {
            System.out.println("抛出异常为: " + e);
        }
    }
}

指定方法抛出异常

如果方法内的程序代码可能会发生异常,且方法内又没有使用任何的代码块来捕捉这些异常时,则必须在声明方法时一并指明所有可能发生的异常,以便让调用此方法的程序得以做好准备来捕捉异常。也就是说,如果方法会抛出异常,则可将处理此异常的 try-catch-finally 块写在调用此方法的程序代码内。
如果要由方法抛出异常,则方法必须以下面的语法来声明:
方法名称(参数…) throws 异常类 1,异常类 2, …

package dd20161115;



public class ExceptionDome {
    public static void main(String[] args)  {
    int a=4,b=0;
    //在调用抛出异常的方法中捕获异常
    try {
        add(a,b);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        System.out.println(e);
        //处理异常,添加默认值
        try {
            add(1,1);
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }
    }

    public static void add(int a,int b) throws Exception{
        int c=a/b;
        System.out.println("c="+c);
    }
}

输出结果:
java.lang.ArithmeticException: / by zero
c=1

也就是说在调用用 throws 抛出异常的方法时,可以将此异常在方法中再向上传递,而 main()方法是整个程序的起点,所以如果在 main()方法处如果再用 throws 抛出异常,则此异常就将交由JVM 进行处理了。

编写自己的异常类

为了各种异常, Java 可通过继承的方式编写自己的异常类。因为所有可处理的异常类均继承自 Exception 类,所以自定义异常类也必须继承这个类。自己编写异常类的语法如下:
class 异常名称 extends Exception
{
… …
}

在 JDK 中提供的大量 API 方法之中含有大量的异常类,但这些类在实际开发中往往并不能完全的满足设计者对程序异常处理的需要,在这个时候就需要用户自己去定义所需的异常类了,用一个类清楚的写出所需要处理的异常。

总结

1、 程序中没有处理异常代码时, Java 的默认异常处理机制会做下面的操作:
( 1)、 抛出异常。
( 2)、 停止程序运行。
2、 异常处理是由 try、 catch 与 finally 三个关键字所组成的程序块。
3、 try 程序块中若有异常发生时,程序的运行便会中断,抛出“由系统类所产生的对象”,并依下列的步骤来运行:
( 1)、 抛出的对象如果属于 catch()括号内所要捕捉的异常类, catch 会捕捉此异
常,然后进到 catch 程序块里继续执行。
( 2)、 无论 try 程序块是否捕捉到异常,也不管捕捉到的异常是否与 catch()括
号里的异常相同,最后都会运行 finally 块里的程序代码。
( 3)、 finally 中的代码是异常的统一出口,无论是否发生异常都会执行此段代
码。
4、 当异常发生时,有两种处理方式:
( 1)、 交由 Java 默认的异常处理机制去处理。
( 2)、 自行编写 try-catch-finally 块来捕捉异常。
5、 异常可分为两大类: java.lang.Exception 与 java.lang.Error 类。
6、 RunntimeException 可以不编写异常处理的程序代码,依然可以编译成功,它是在
程序运行时才有可能发生的;而其它的 Exception 一定要编写异常处理的程序代
码才能使程序通过编译。
7、 catch()括号内,只接收由 Throwable 类的子类所产生的对象,其它的类均不接收。
8、 抛出异常有下列两种方式:
( 1)、 在程序中抛出异常。
( 2)、 指定方法抛出异常。
9、 程序中抛出异常时,要用到 throw 这个关键字。
10、如果方法会抛出异常(使用 throws),则可将处理此异常的 try-catch-finally 块写在调用此方法的程序代码中。

作者:彼天
来源链接:https://blog.csdn.net/android_hl/article/details/53229399

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/68323.html

分享给朋友:

“Java 异常类及异常处理简单概念” 的相关文章

两年前写的Java基础总结书

两年前写的Java基础总结书

想法衍生 两年前的我,突发奇想,把自己学的Java基础进行规范化的整理,因为自己的文档编辑能力有限,所以写的排版不是很好,参照图书排版的形式,将书籍进行整理,可以供学习Java基础的朋友参考,由于时间有限,可能也会有问题,请指出。下载地址在最后 截图如下:...

深入理解 Java 并发锁

深入理解 Java 并发锁

📦 本文以及示例源码已归档在 javacore 一、并发锁简介 确保线程安全最常见的做法是利用锁机制(Lock、sychronized)来对共享数据做互斥同步,这样在同一个时刻,只有一个线程可以执行某个方法或者某个代码块,那么操作必然是原子性的,线程安全的...

二分法(折半查找)的运用之java实现猜数字游戏

让计算机输入一个数 然后用户进行猜数游戏 一般而言,七次会猜对,如果猜不对,那么就是你的方法不对 在这儿涉及到的一个算法就是二分法 ***二分法查找,***也称为折半法,是一种在有序数组中查找特定元素的搜索算法。二分法查找的思路如下: (1)首先,从数组...

java比较语句常犯错误和三个数比较大小

1.忘了大括号 解决: 任何if else语句后面加大括号,哪怕只有一句 2.忘了分号 if后面不能有分号 3.代码分格 Scanner in=new Scanner(System.in); int x; int y; int z;...

JAVA UUID 生成唯一标识

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want 需求     项目在设计表的时候,要处理并发多...

图解 Java IO : 二、FilenameFilter源码

图解 Java IO : 二、FilenameFilter源码

Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆  &...

java提高篇(二五)

java提高篇(二五)

      在java中与有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相对应的value值。一个...

java IO流学习总结

java IO流学习总结

java IO流学习总结 近期学习了Java的IO流,尝试着总结一下。 java.io 包下的IO流很多: 其中,以Stream结尾的为字节流,以Writer或者Reader结尾的为字符流。所有的输入流都是抽象类IuputStream(字节输入流)或者抽象类R...

java synchronized详解

记下来,很重要。 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。      一、当两个并发线程访问同一个对象object中的这个synchronized(this)同...

狂神Java基础总结

狂神Java基础总结

Java基础 Java学习的正确打开方式 学习是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。 链接:https://blog.csdn.net/qq_44543508/article/details/102651841...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。