Java异常

一.异常和错误

1.错误(Errors):

  • 错误是指程序在运行过程中遇到的无法处理的问题,通常是由底层系统或硬件出现的严重问题导致的,比如内存溢出等。
  • 错误是致命的,会导致程序无法继续执行,通常情况下程序会直接终止
  • 由于错误通常是与底层系统或硬件相关的,因此程序本身很难对其进行处理

2。异常(Exceptions):

  • 异常是指程序在正常运行过程中遇到的意外情况,导致程序无法继续执行或者执行结果与预期不符合的问题。
  • 异常是非致命的,不会导致程序直接终止,但如果不加以处理,可能会影响程序的正常执行流程。
  • Java 提供了异常处理机制,允许程序在遇到异常时进行捕获和处理,以便程序能够以一种合适的方式继续执行或者进行异常情况的处理。

异常和错误的区别:异常能被程序本身处理,错误是无法处理

二.异常的种类

1.编译时异常
编译时异常是指在编译阶段可以被检测到的异常。在Exception 类中,除了RuntimeException 类以外,其他子类都是编译时异常。在编写代码时,如果存在可能抛出编译时异常的代码,必须在代码中使用try…catch…语句捕获或一直向上抛出来处理该异常。Java编译器会对编译时异常进行检查,如果出现这类异常就必须对其进行处理,否则程序无法通过编译

2.运行时异常
(1)什么是运行时异常?
RuntimeException类及其子类异常都是运行时异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是由Java虚拟机在程序运行时自动进行捕获处理的。与编译时异常不同,编译器不要求程序员显式地处理这些异常,即使没有捕获或声明抛出这些异常的代码,程序仍然可以编译通过。但是,如果Java虚拟机遇到未捕获的运行时异常时,程序会终止执行。

运行时异常一般是由程序逻辑错误引起的,程序员应该在编写代码时尽可能地避免这些异常的发生。

3.自定义异常
(1)什么是自定义异常?
虽然Java中有很多异常类,但是在实际开发中所遇到的一些异常,不能完全表示,所以就需要自定义异常类.
自定义异常默认会继承Exception或者RunTimeException。继承自Exception的异常默认是编译时异常,继承自RunTimeException的异常默认是运行时异常。
使用自定义异常时,通常的做法是在方法中使用 throw 语句来抛出自定义异常,然后在调用该方法的地方使用 try-catch 语句块来捕获并处理异常

(2)如何定义自定义异常?
当定义自定义异常时,首先需要创建一个类,并继承自Java提供的异常类,如 Exception 或 RuntimeException ,然后添加自定义的构造方法和其他方法。
例如:

public class InvalidISBN extends Exception{
    public InvalidISBN(String message) {
        super(message);
    }
}

三.处理异常

1.使用try-catch-finally语句捕获处理异常

  • try 代码块:包含可能抛出异常的代码。如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch代码块;如果异常没有发生,则顺序执行try的代码块,不会进入到catch代码块。

  • catch 代码块:用于捕获并处理 try 代码块中抛出的异常。可以有多个 catch 块,每个 catch 块处理一种类型的异常。

  • finally 代码块:无论是否发生异常,finally 代码块里面都会被执行的关键字。

内容补充:

1.在 try 内定义的变量,只能在 try 块内访问,而不能在 catch 或 finally 块中访问。
2.当在 try 块或 catch 块中遇到 return 语句时,finally 语句块将在方法返回之前被执行。

2.throw 和 throws 声明处理异常

  • throw关键字的作用: 在java中,提供了一个throw关键字,它用来抛出一个指定的异常对象。throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行

  • throws关键字的作用:使用throws关键字将问题标识出来, 表示当前方法不处理异常,而是提醒给调用者, 让调用者来处理。( 调用者的处理方式:调用者可以使用throws继续向上抛出或者在方法内部使用try…catch…语句捕获处理异常。)

如果一直上抛,最终会到虚拟机,虚拟机会直接结束程序,打印异常信息。

注意:

1.throw 关键字用在方法内部,只能用于抛出一种异常,用来抛出方法或代码块中的异常,运行时异常和编译时异常都可以被抛出。

2.throws 关键字用在方法声明上,可以抛出多个异常。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值