Java的异常机制

一.什么是异常:非正常的,不同寻常的,不是语法错误。

生活中,医生说你身体某个部位异常,该部位和正常相比,有点不同功能可能受损。

张三开车去上班,正常情况下,顺利到达公司

非正常情况下,车子坏了,走路去公司

异常指的 不是语法错误 ,语法错误编译通不过,不会产生字节码文件,根本不能运行

程序中:代码出现错误,程序就会停止运行。

异常处理是衡量一门语言是否成熟的标准之一。主流的java c++ c# 都有异常处理机制。

异常处理可以让程序有更好的容错性,使代码更健壮。

传统的c语言是没有异常处理的,此时只能程序员通过使用方法的特定返回值来表示异常情况,并且使用if语句来判断正常和非正常的情况

没有异常机制存在的缺点:

1.使用方法的返回值表示异常的情况有限,无法穷举所有的异常情况

2.异常处理代码和业务代码混合在一起,增大的程序的复杂性

3.随着系统规模不断增大,程序的可维护性极低

二.异常体系

针对上述的情况,我们提出解决办法:

1.把不同类型的异常情况描述成不同的类(称之为异常类)

2.分离异常流程代码和正确流程代码

3.灵活处理异常,如果当前方法解决不了,我把异常交给别人来解决

-------

非正常情况出现后,程序会中断

Error:表示错误,一般指jvm相关的不可修复的错误,如系统崩溃,内存溢出,JVM错误等,由JVM抛出,我们不用处理。

Exception:表示异常,指程序中出现不正常情况,该问题可以修复(处理异常)

常见的exception:

NullPointerExeception空指针异常

 

ArrayIndexOutOfBoundsExeception 数组越界异常

数字格式化出问题

 

 

二.使用try catch捕获单个异常:

异常出现后,程序会中断,所以必须处理异常:

1.该方法不处理,而是声明抛出,由该方法的调用者来处理(throws)

2.在方法中使用try catch语句块来处理异常

 

 

使用try catch捕获单个异常,语法:

try{

编写可能出现异常的代码

}catch(异常类型  e){

处理异常的代码

打印异常信息

继续抛出异常

}

注意:try 和catch都不能单独使用

案例

 

三.获取和查看异常信息,Throwable类的方法

1.String getMessage()  获取异常的描述信息,原因(提示给用户的时候,就提示异常信息))

2.String toString() 获取异常的类型和异常描述信息

3.Void printStackTrace() 打印异常的跟踪栈信息并输出到控制台,不需要使用syso输出,它包含了异常的类型,异常的原因,还包括异常出现的位置,在开发和调试阶段,经常使用这个方法。

注意:现在在catch语句块中,都写e.printStackTrace()

四.使用try-catch捕获多个异常

一个catch语句,只能捕获一种异常,如果需要捕获多个异常,就得使用多个catch语句

try{

编写可能出现异常的代码

}catch(异常类型A  e){

处理异常的代码//打印异常信息//继续抛出异常

}catch(异常类型B e){

处理异常的代码//打印异常信息//继续抛出异常

}

注意:

1.一个catch语句只能捕获一种类型的异常,如果需要捕获多种异常,就得使用多个catch语句

2.代码在一瞬间只能出现一种类型的异常,只需要一个catch捕获,不可能出现多个异常

案例:

五.Finally代码块:表示最终都会执行的代码,无论有没有异常

什么时候的代码必须最终执行:

当我们在try语句中打开了一些物理资源(磁盘文件/网络连接/数据库连接),我们都得在使用完之后,最红关闭打开的资源。

finally 的两种语法:

1.try...finally :此时没有catch来捕获异常,因为此时根据根据应用场景,我们会抛出异常,自己不处理

2.try...catch..finally :自身需要处理异常,最终还得关闭资源

注意:finally不能单独使用

当只有存在try或者catch中调用退出jvm的相关方法,此时finally才不会执行,否则finally永远会执行

System.exit(0);//退出jvm

 

注意:如果finally有return语句,永远返回finally中的结果,避免该情况

 

六.异常的分类:根据在编译时期还是运行时期取检查异常?

     1.编译时期异常:checked异常,在编译时期,就会检查,如果没有处理异常,则编译失败

2.运行时异常:runtime异常,在运行时期,检查异常,在编译时期,运行异常不会被编译器检测(不报错)

注意:运行异常,在编译时期,可处理,可不处理

七.抛出异常:

throw:运用于方法内部,用于给调用者返回一个异常对象,和return一样会结束当前方法

throws:运用于方法声明上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常)

throw语句:

     运用在方法内部,抛出一个具体的异常对象

throw new 异常类型(“异常信息”):终止方法

throw

一般的,当一个方法出现不正常的情况的时候,我们不知道方法该返回什么,此时就返回一个错误,在catch语句块中继续向上抛出异常

Return是返回一个值,throw是返回一错误,返回给该方法

public static int dowork(int num1,int num2){
        System.out.println("beging.......");
        if (num2 == 0){
            System.out.println("有问题");
            throw new ArithmeticException("被除数不能为0");
        }
        System.out.println("-------------------------");
        try{
            int a =num1/num2;
            System.out.println(a+"aaaa");
            return a;
        }catch(ArithmeticException e){
            e.printStackTrace();
            System.out.println("出异常了");
        }
        System.out.println("end.........");
        return 0;
    }

    public static void main(String[] args) {
        try{
        int ret=dowork(10,0);
        System.out.println(ret);
        }catch(ArithmeticException e){
            System.out.println(e.getMessage());
        }
    }

Throws语句

     如果每一个方法都放弃处理异常直接通过throws声明抛出,最后异常会抛到main方法,main方法不出,继续抛出个jvm,底层的处理机制就是打印信息跟踪栈。

public static int dowork(int num1,int num2) throws Exception{
        System.out.println("begin.........");
        if(num2==0){
            System.out.println("有问题");
            throw new Exception("被除数不能为0");
        }
        System.out.println("----------------");
        try{
            int a=num1/num2;
            System.out.println(a+"aaaaa");
            return a;
        }catch(ArithmeticException e){
            e.printStackTrace();
            System.out.println("出异常了");
        }
        System.out.println("end.........");
        return 0;
    }

    public static void main(String[] args) throws Exception {
        dowork(10,0);
    }

    

时间: 2024-12-25 20:32:09

Java的异常机制的相关文章

关于java中异常机制

什么是异常:异常就是程序在运行时出现的不正常情况.对于严重的情况Java通过Error类进行描述,一般不用编写代码处理:对于不严重的情况Java通过Exception描述,一般编写针对性代码对其进行处理. 异常由来:问题也是生活中一个具体的事物,也可以通过Java类的形式进行描述(比如进行运算时被除数不可以为0否则出现ArithmeticException异常,数组越界会出现ArrayIndexOutOfBoundsException等等),并封装成对象.即Java对不正常情况进行描述后的对象体

八、java中异常机制

一.为什么要有异常处理机制? java中的异常处理机制简单的讲就是try..catch..finally的使用. 程序难免会出现错误, 如果没有异常处理机制, 那么程序员在编写代码的时候就必须检查特定的结果, 并在程序的很多地方去处理它. 有了异常处理机制后,就不必在每个方法调用处都检查, 只需要用try包裹住可能发生异常的代码段, 这样做的好处是: 1.降低了代码的复杂度,正如上面所说的,不需要每个方法调用处都去检查: 2.将“描述正常情况下应该做什么事情”和“如果出了错怎么办” 的逻辑分开:

Java基础——异常机制

[捕获异常] 硬件的错误.输入错误.物理限制等问题,都可能导致程序运行时的异常出现. 1.异常的分类层次 在java中,异常对象都是由Throwable类继承而来的,主要分为两大类: Error和Exception类. 在Exception中又分为: RuntimeException异常和非RuntimeException异常. 异常的分类有以下几种: 1.Error类层次的结构主要描述了java运行时系统的内部错误和资源耗尽等错误,如硬件错误.输入错误数据.系统崩溃等.出现这些系统内部的问题,

java——异常机制

java的异常是一种处理程序中错误的机制,是程序运行过程中发生的一些异常事件. 异常类分类 例如:在公路上开车,汽车爆胎了这是可以处理的的这就是Exception:公路上有好多小石子,但是没有必须下车扫干净了再走这就是RunTimeException:如果汽车突然爆炸了就是Error. 五个关键字throws.throw.try.catch.finally 定义一个类,写一个存在异常的方法,并抛出 public class TestEX { void m(int i) throws Arithm

JAVA基础篇三(Java,C++中的异常机制)

由于C++和JAVA有很多相似之处,又有很多细微的差别,所以在学习JAVA的过程中对两种语言进行对比学习. 1.C++的异常机制 C++中处理异常的过程是这样的:在执行程序发生异常,可以不在本函数中处理,而是抛出一个错误信息,把它传递给上一级的函数来解决,上一级解决不了,再传给其上一级,由其上一级处理.如此逐级上传,直到最高一级还无法处理的话,运行系统会自动调用系统函数terminate,由它调用abort终止程序.这样的异常处理方法使得异常引发和处理机制分离,而不在同一个函数中处理.这使得底层

6.1-全栈Java笔记:异常处理机制的概念

异常问题 实际工作中,遇到的情况不可能是非常完美的.比如:你写的某个模块,用户输入不一定符合你的要求.你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是空的等.我们的程序再跑着,内存或硬盘可能满了等等. 软件程序在运行过程中,非常可能遇到刚刚提到的这些异常问题,我们叫异常,英文是:Exception,意思是例外.这些,例外情况,或者叫异常,怎么让我们写的程序做出合理的处理,安全的退出,而不至于程序崩溃. 如果我们要拷贝一个文件,在没有异常机制的情况下,我

java 异常机制

浅谈java异常机制 下班闲来无事,看看java基础知识,做一下总结 异常机制:是java提供的一个解决突发事件或者误操作的一种控制流程的一种解决方案 Throwable 所有错误或者异常的超类,包含两个子类Error和Exection 其中Error错误是程序无法处理的,如内存溢出.机器断电等 Exception异常包括运行时异常和编译时异常 运行时异常类均继承RuntimeException,常见的如NullPointerException,ArithmeticException,Index

JAVA基础教程之JAVA异常机制

今天我们主要来说一说JAVA异常机制方面的内容.自设JAVA学习群457036818,大家可以交流一下 一. 异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误.本文主要传授的是一些滚与Java语言的异常处理.Java语言的异常处理框架,是Java语言健壮性的一个重要体现. Java把异常当作对象来处理,而且定义一个基类java.lang.Throwable作为所有异常的超类.在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception.J

Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制

Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制 1. 语法错误(ERROR)和运行期错误(Exception) 1 2. 错误类型判断 二种方法: 1 3. 我们常接触到的异常包括: 2 4. ------代码 2 5. 参考 4 1. 语法错误(ERROR)和运行期错误(Exception) Javascript提供了两种特殊的错误处理方式 BOM包含一个onerror事件处理函数,这个window对象与图像对象上都有 同时EC