1.代码中的异常
Throwable类
java中所有异常的超类,在java中所有的异常,错误的基类就是Throwable类
Throwable有两部分组成
1.Exception 异常,可以处理,代码中还有拯救的可能性
2.Error 错误 无法拯救
Throwable 常用方法:
Constructor:
Throwable构造方法,Throwable类对象中,存储的异常或者错误信息为null
Throwable(String message);Throwable构造方法,Throwable类对象中,存储的异常或者错误信息为message
Metgod:
String getMessage();获取Throwable对象存储中的异常或者错误信息
String toString();返回当前异常或者错误的简要描述
void printStackTrace();展示错误的前因后果,【红色字体】
package throwable;
public class Demo1 {
public static void main(String[] args) {
Throwable throwable =new Throwable();
System.out.println(throwable.getMessage());
System.out.println(throwable.toString());
throwable.printStackTrace();
//System.out.println(throwable.getMessage());
test();
}
public static void test(){
new Throwable("异常测试").printStackTrace();
}
}
1.1Exception和Error区别
Exception 异常 可以处置
Error 错误 不可以处置 只能避免
1.2异常处理
1.2.1捕获异常
try - catch结构
格式
try{
//有可能出现异常代码
}catch(处理对应的异常对象)
{
//处理方法
}
/*
* 捕获异常问题总结:
* 1. 代码中从异常发生位置开始,之后的代码都不在运行
* 2. 代码中有多个异常,可以使用多个catch块进行捕获操作,分门别类处理
* 3. 当前情况下,只能展示异常情况,后期可以讲异常情况做成log日志文件
* 4. 异常被捕获之后代码可以正常运行。
try - ccatch -finally 结构
1.2.2抛出异常
关键字
throw:在方法内抛出异常
throws:在【方法声明】位置,告知调用者当前方法有哪些异常抛出
总结:
1.一个代码块内有且只能抛出一个异常
2.从throw位置开始,之后的代码不再运行
3.代码中存在使用throw抛出异常,在方法的声明位置必须告知 这里有异常
package throwable;
import java.rmi.AccessException;
public class Demo4 {
//调用带有异常抛出的犯法,如果选择继续抛出需要在当前方法的声明位置
//告知其他调用者 这里有异常抛出
public static void main(String[] args) throws AccessException {
//调用一个带有异常抛出的 方法
//捕获处理
try {
test(10, 2, null);
} catch (ArithmeticException e) {
System.out.println(e.getMessage());
}catch (NullPointerException e) {
System.out.println(e.getMessage());
}
}
public static void test(int num1,int num2,int[] arr) throws AccessException,NullPointerException{
//参数合法性判断
//
// if(0 == num2 || null == arr){
// System.out.println("Input Parameter is Invalid");
// return;
//
// }
//抛出异常方式来处理当前的参数合法性判断
if(0 == num2 ){
//有可能会导致算数异常
throw new AccessException("算数异常");
}
if(null == arr){
//存在数组操作空指针异常
throw new NullPointerException("数组空指针异常");
}
System.out.println(num1/num2);
arr[10]=0;
}
}
1.2.3 抛出和捕获的对比
捕获之后,代码 可以正常运行,要保证处理之后的异常不会导致其他问题
例如:
用户密码错误,不能采用捕获异常
用户指定路径问题,也不能采用捕获异常
抛出的确可以解决很多问题,并且可以让代码健壮性很强。到用户层面说什么都不能抛出异常
用户密码错误情况:
1.捕获异常
2.通过异常处理 catch将错误抛出
3.给于用户的友好提示
1.2.4 为什么不使用大异常
不能所有的异常都使用Exception捕获或者抛出无法得知具体的异常类型。、
1.2.5 RuntimeException
运行时异常:
JVM在运行过程中可以非检查异常
例如:
ArrayIndexOutOfBoundException
NullPointerException
StringIndexOutOfBoundException
ArithmeticException
1.2.6自定义异常
```
代码运行的过程中存在一定的生活化
例如:
用户名密码错误
NoGirlFriendException 没有女朋友异常
自定义异常格式:
class 自定义异常类名 extends Exception {
// No Fields Constructor
// String Field Constructor
}
自定义异常类名:
必须Exception结尾!!!
```javapackage com.qfedu.a_throwable;/* * 自定义异常 */class NoGirlFriendException extends Exception { /** * 无参数构造方法 */ public NoGirlFriendException() {} /** * 带有String类型参数的构造方法 * * @param message 描述当前的异常信息 */ public NoGirlFriendException(String message) { super(message); }}public class Demo5 { public static void main(String[] args) throws NoGirlFriendException { try { buyOneFreeOne(false); } catch (NoGirlFriendException e) { // TODO Auto-generated catch block e.printStackTrace(); } buyOneFreeOne(false); } /** * 买一送一方法,需要判断是不是单身狗 * * @param singleDog boolean类型数据,true是单身,false表示有女朋友 * @throws NoGirlFriendException 没有女朋友异常 */ public static void buyOneFreeOne(boolean singleDog) throws NoGirlFriendException { if (singleDog) { throw new NoGirlFriendException("两只黄鹂鸣翠柳,你还没有女朋友"); } System.out.println("买蜜雪冰城甜筒一个送保时捷一辆"); }}
本文深入解析Java中的异常处理机制,包括Throwable类的构成、Exception与Error的区别、异常捕获与抛出的技巧,以及如何自定义异常。通过实例演示了异常处理在代码健壮性中的作用。
17万+

被折叠的 条评论
为什么被折叠?



