异常梳理总结

异常是指程序在运行过程中的非正常情况。当程序违反Java编程语言的语义约束时,Java虚 拟机会将此错误作为异常信号发送给程序。

异常体系

 Error

Error 是 Throwable 的子类,表示严重的问题,合理的应用程序不应该试图捕获。一般不 应该抛出( throw )这种类型的错误,由虚拟机抛出。普通程序通常不会从中恢复。

 能处理,但是不建议处理

 Exception

Exception 合理的应用程序想要捕获的条件,普通程序可能希望从中恢复的所有异常的超 类。

 分为两大类:运行时异常( RuntimeException )、设计时异常。

设计时异常:在程序未运行时的异常。

java.lang.CloneNotSupportedException 不支持克隆操作异常,一般是被克隆的类未 实现 Cloneable 接口导致

java.lang.IndexOutOfBoundsException 下标越界异常,索引值不合法 java.lang.ArrayIndexOutOfBoundsException 数组下标越界 java.lang.StringIndexOutOfBoundsException 字符串下标越界 java.lang.NullPointerException 空指针异常,对 null 进行了运算 java.lang.ClassCastException 类型转换异常

java.util.InputMismatchException 输入不匹配异常

java.lang.IllegalStateException 非法状态异常

java.lang.NumberFormatException 数字格式化异常

java.lang.ArithmeticException 算术异常(1/0)

 异常处理(5个关键字)try 、 catch 、 finally 、 throw 、 throws

使用 try-catch 处理异常

public static void main(String[] args) {
String str = "java是世界上最好的编程语言";
str = null;
say(str);
System.out.println("结束");
}
public static void say(String str) {
//将我们认为可能发生异常的代码放到try中
try {
int length = str.length();
System.out.println("你说了" + length + "个字");
}catch (NullPointerException e) {//可能产生的异常
e.printStackTrace();
System.out.println(e.getMessage());
System.out.println("你传了个Null");
}
}

如果程序的异常得到处理,程序会继续执行。如果没有处理程序会终止运行。 一个 try 可以有多个 catch 语句,如果产生异常(对象)会一个一个按顺序比对,如果产生 的异常是 catch 声明的异常就执行当前 catch 中的代码,其他 catch 不会被执行。执行 完 catch 如果方法中还有其他代码,则继续执行。多个 catch 中捕获的异常要从子类到父 类,一般最后一个是 Exception 。

try中一旦检测到异常其余代码就不执行。

如果try发现异常,但在catch中没有声明,程序终止,被迫退出。

catch 捕获到的是异常对象。

viod prinStackTrace()堆栈跟踪用于显示导致代码中某个点(通常是异常或错误)的函数调用序列

public class yichang {
    public static void main(String[] args) {
        try {
            int a=1/0;
        }catch (Exception e){e.printStackTrace();
        }
    }
}

 

String getMessage();您可以在捕获到异常时,将通用的错误消息转换为适合用户的消息,并在用户界面上显示该消息,而不是直接将原始错误消息暴露给用户。

 try {
            int a=1/0;
        }catch (Exception e){
            String errorMessage = e.getMessage();  // 获取异常的错误消息
            System.out.println("Error Message: " + errorMessage);
        }

 

unchecked exception 是指 运行时异常以及 Error .

checked exception 是指除 运行时异常以外的所有异常类别。也就是说,检查的异常类 是Throwable及其所有子类。强制处理的异常

 try-catch-finally(不执行唯一情况,在异常处理代码中中遇见System.exit(1),退出java虚拟机)

无论 try 语句中是否会发生异常,最后都会执行 finally 语句代码。 try/catch/finally 一个 try 可以有多个 catch 只能有一个 finally 。 try 可以单独和 f inally 使用。try可以和一个catch或多个catch单独使用。

如果try和catch中都有return语句,在try中没有异常时,在return之前执行finally语句,如果finally中有return,直接结束。如果try中有异常被catch捕获,在catch中的return之前执finally。

抛异常

public static void main(String[] args) {
checkRange(-1);
}
public static void checkRange(int num) {
if(num < 0 || num > 10) {
//抛异常
throw new ArrayIndexOutOfBoundsException(num);
}
System.out.println("true");
}

如果方法中有 throw 关键字表示会抛异常,这个时候我们要在方法头使用 throws 关键字 声明此方法有可能会抛出的异常,这样方法的调用者就要做异常的处理。 throws 可以声 明多个异常,用 , 隔开。

throw 运行时异常( RuntimeException 及其子类),可以不在方法头使用 throws 声明 此方法有可能抛出的异常 throw 的不是运行时异常,必须在方法头使用 throws 声明此方法有可能抛出的异常

 throws

throws 的是 unchecked 异常的话,调用处可以不处理

throws 的是 checked 异常的话,调用必须处理

重写方法时要求抛出的异常相同或变小指,重写方法抛出的异常时父类方法异常类或 其子类

 构造方法可以使用 throws 关键字吗?

可以。但是如果父类构造 throws 的时检查异常(checked exception)子类构造也得 throws ,不能使用 try-catch 处理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值