首页 > 编程语言 >Java中的错误处理

Java中的错误处理

时间:2022-10-10 19:14:48浏览次数:40  
标签:Java 抛出 try finally catch 错误处理 异常 throws

Java中的错误处理

面向对象的错误处理机制

错误被抽象成类(异常类)

错误的具体信息、发生错误的上下文状态被封装在异常类的实例中

如何使用异常

1.在方法体中创建异常类的实例

2.使用throw关键字抛出

3.异常被抛出之后的代码不会被执行

当预期到一段代码中可能会抛出异常时,课使用try捕获异常

异常类的分类

运行时异常

RuntimeException方法调用者可以不处理此类异常

预期异常

程序必须对Throwable中SQLException,ClassNotFoundException这种异常进行处理,否则会出现编译错误。

throws关键字

方法可通过throws关键字告诉调用者方法执行过程中可能会抛出哪些异常

public void transfer(Account anotherAccount, double value) throws DefeatValueException, NotEnoughMoneyException{
    if (value < 0) {
        throw new DefeatValueException("转账金额不能为负值。");
    }

    if (amount < value) {
        throw new NotEnoughMoneyException("NotEnoughMoney");
    } else {
        anotherAccount.amount += value;
        this.amount -= value;
    }
    System.out.println("转账成功!");
}

throws和catch的语法规则

方法体中可能抛出预期异常

在方法签名中使用throws写明,表示方法中不处理该异常

使用try-catch捕获此异常并进行处理

方法体中可能抛出Error和RuntimeException

无需使用throws写明

无需使用try-catch进行捕获处理

try-catch语法

try{

}catch(ExceptionType1 ex){

}catch(ExceptionType2 ex){

}catch(ExceptionType3 ex){

}

单个代码片段可能会引起多个错误

可提供多个 catch 块分别处理各种异常

ArrayIndexOutOfBoundsException****类为 Exception 类的子类,但是如果异常

属于ArrayIndexOutOfBoundsException类将执行第一个 catch 块,之后控制

将转向try/catch块之后的语句,所以始终不会执行第二个 catch 块。

异常的处理方法

自行处理

使用try-catch的语法

只有在知道如何处理的情况下才捕获异常!

方法h调用d,捕获可能发生的预期异常,

将其转换为运行时异常

void h() {

try {

​ d();

​ } catch (Exception e) {

throw new RuntimeException(e);

​ }

}

一旦程序中出现不可恢复的错误,程序应当尽快终止,不要尝试处理异常

回避异常

使用throws

异常转换

catch后进行再次throw

finally块

确保出现异常时所有清除工作都将得到处理

与try 块一起使用

无论是否出现异常,finally块都将运行

finally是防止资源泄漏的有效工具

关闭文件

回收资源

{{uploading-image-947754.png(uploading...)}}

finally语法

try {
    lc.transfer(xtr, 300);
} catch (DefeatValueException e) {
    System.out.println("负数异常");
} catch (NotEnoughMoneyException e) {
    System.out.println("余额不足");
}catch (Exception e) {
    e.printStackTrace();
}
finally {
    //用于回收资源
    System.out.println("finally");
}

异常和方法的覆盖

父类方法中声明抛出异常A

子类方法可以声明抛出异常A及其子类

子类方法可以不抛出任何异常

自定义异常

继承Exception类或者其子类

对于运行时异常需要继承RuntimeException或者其子类

根据需要实现不同的构造方法

public class NotEnoughMoneyException extends Exception{

    public NotEnoughMoneyException() {
    }

    /**
     * 带参数人构造函数
     * @param msg
     */
    public NotEnoughMoneyException(String msg) {
        super(msg);
    }
}

标签:Java,抛出,try,finally,catch,错误处理,异常,throws
From: https://www.cnblogs.com/seeingxi/p/16776827.html

相关文章

  • JAVA 进阶第一阶段 59-69
    10/10号笔记用private在类中定义的成员变量只有在这个类的内部才支持访问和编写public公共的用这个定义的在任何地方都可以访问 比如publiccalssclock 、定义......
  • Java基本语法 while循环
    while循环packageBasicGrammar.day05;/*While循环的使用一、循环结构的4个要素①初始化条件②循环条件--->是boolean类型③循环体④迭代条件二、while......
  • Java虚拟机详解(六)------内存分配
    我们说Java是自动进行内存管理的,所谓自动化就是,不需要程序员操心,Java会自动进行内存分配和内存回收这两方面。前面我们介绍过如何通过垃圾回收器来回收内存,那么本篇......
  • idea 动态修改 java程序运行 jvm参数
    我们经常需要调优或者验证jvm参数又不想去修改配置文件就需要idea参数的形式修改测试代码点击查看代码packagecom.example.safepointTest;publicclassSafePoi......
  • 006Java程序运行机制
    006Java程序运行机制高级程序语言分为编译型和解释型两种,Java这两种特性都具备。编译型还是解释型取决于翻译的时机。以看一本外语书为例:编译型:先把整本书翻译成中文......
  • 2022.10.7 Java第五次课总结
    继承java的继承与C++的继承的区分java中的继承是单项继承,区分与C++的多项继承,这种继承避免了C++继承中可能出现的冲突的问题,单项继承父类所有的属性,子类对于好的属性可以......
  • Java Scanner中一起使用next()和nextLine()方法会出现什么情况?
     Java中,我们可以通过Scanner类来获取用户的输入。先来看看next()方法的使用:  packageWorkStudy;importsun.rmi.runtime.Log;importjava.util.Scanner;publicclass......
  • Java运算符
    Java运算符逻辑运算符与&&,或||,非!逻辑与运算:两个结果都为真,结果才为true,如果前面代码判断为错,后面则不执行。逻辑或运算:两个变量有一个为真,则结果才为true。逻辑......
  • Java 多线程(四)Lambda表达式
    Lamda表达式λ希腊字母表中排序第十一位的字母,英语名为Lambda避免匿名内部类定义过的多其实质属于函数式编程的概念理解函数式接口是学习Java8Lambda表达式的关键所......
  • Java 我的第一个hello word
         项目—右键—选中添加框架的支持 选中“WebApplication”,然后确定  右键src,新建一个类          ......