Java的异常

Java 异常处理是 Java 程序设计中的重要部分之一。程序中出现异常时,如果不加以处理,程序将会异常终止。Java 异常处理提供了一种结构化的方式,让程序员能够更加优雅的处理程序异常情况,从而使程序更加健壮。

异常的概念

Java 异常指程序在执行过程中出现的不正常情况。 Java 平台自带的类库提供了很多有用的异常类,程序员也可以自己定义异常类。异常类是 Java 类,继承自 Throwable 类。Java 异常分类:

  • 受检异常:在编译时必须被捕获或声明抛出,即在方法中使用 try-catch 块或声明 throws 关键字。常见的受检异常包括:IOException、SQLException等。
  • 非受检异常:也称为运行时异常(RuntimeException),在程序运行时才被检查到。不要求必须显式的捕获或声明抛出。常见的运行时异常包括:NullPointerException、IndexOutOfBoundsException等。

异常处理

Java 异常处理机制引入了 5 个关键字:try、catch、throw、throws 和 finally。

try-catch 语句

try-catch 语句用于处理可能抛出异常的语句,它是最基本的异常处理机制。try 块中的代码称为受保护的代码,用于捕获可能抛出异常的代码。如果发生异常,try 块内的代码立即停止执行,并跳转到 catch 块中。catch 块后面必须跟一个异常类型或其父类型的参数,用于捕获对应类型的异常。

try{
    //受保护的代码
}catch(ExceptionType e){
    //发现异常后执行的代码
    //系统自动生成异常类型对象,e代表异常内容
}

finally 语句

finally 块中的语句总是会被执行,无论 try 语句块中是否发生异常。finally 块通常包含完成清理工作的代码,如关闭文件、释放资源等。

try{
    //受保护的代码
}catch(ExceptionType e){
    //发现异常后执行的代码
    //系统自动生成异常类型对象,e代表异常内容
}finally{
    //用于完成清理工作的代码
}

throw 语句

throw 语句用于在代码中显式地抛出一个异常。它的语法如下:

throw throwableInstance;

throwableInstance 是一个异常类型的实例。

throws 语句

当方法内抛出异常时,调用该方法的方法就会捕获或抛出该异常。如果方法可能抛出异常,则必须要声明这些异常。Java 中,throws 关键字用于声明方法可能抛出的异常列表。

public void method() throws ExceptionType1, ExceptionType2 {
    //方法体
}

自定义异常

在 Java 中,也可以自定义异常,使用关键字 extends 继承 Exception 类或其子类实现自己的异常类。

public class MyException extends Exception {
    private int id;
    public MyException(String message, int id) {
        super(message); //调用父类构造方法,初始化异常消息
        this.id = id;
    }
    public int getId() {
        return id;
    }
}

异常的处理原则

  1. 必须对捕获的异常进行处理。
  2. 不要过多使用 try-catch 块,应尽可能在程序设计中避免出现异常情况。
  3. 不要把所有的异常打成一类异常处理,应该对不同异常具体分析,有针对性地进行处理。

Java 常见异常

NullPointerException

空指针异常,常出现在使用了没有初始化的对象,或者对 null 调用方法时抛出。

Object obj = null;
obj.toString(); // 抛出 NullPointerException 异常

IndexOutOfBoundsException

数组越界异常,常出现在访问数组中不存在元素时抛出。

int[] arr = new int[5];
System.out.println(arr[5]); // 抛出 IndexOutOfBoundsException 异常

NumberFormatException

数字格式异常,常出现在试图把一个字符串转化为数字时失败抛出。

String str = "abc";
int num = Integer.parseInt(str); // 抛出 NumberFormatException 异常

ClassNotFoundException

找不到类异常,常出现在类不存在时抛出。

Class clazz = Class.forName("com.example.MyClass"); // 抛出 ClassNotFoundException 异常

IOException

I/O 异常,常出现在读或写文件时发生错误。

FileOutputStream fos = new FileOutputStream("file.txt");
fos.write("Hello World".getBytes());
fos.close();

SQLException

SQL 异常,常出现在连接到数据库或执行 SQL 语句时出现错误。

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "password");
PreparedStatement ps = conn.prepareStatement("SELECT * FROM user WHERE id = ?");
ps.setString(1, "123");
ResultSet rs = ps.executeQuery();

OutOfMemoryError

内存溢出错误,常出现在 Java 应用程序尝试使用太多内存时。

List<String> list = new ArrayList<>();
while(true){
    list.add("out of memory");
}

这些异常经常在 Java 开发中出现,我们应该尽可能地避免它们的出现。在出现异常时,应该根据具体情况进行相应的处理,以避免程序崩溃。

总结

Java 异常处理是一项很重要的编程技能,它可以帮助我们规避程序运行过程中的一些不可预知情况。在实际编程中,应根据不同的需求、不同的情况,选择合适的异常处理方式。

微信公众号搜索:小虎哥的技术博客,关注公众号,看更丰富的系统文章!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小虎哥的技术博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值