14异常处理

14异常处理

关键字

try catch finally throw throws

try 尝试运行的 catch 捕获异常 finally 最终执行的

throw 抛出到控制台 throws 抛出给其他的方法调用者

java处理异常流程

程序如果出错 => 被一个类抓到 (Exception (异常处理类的父类)) => 找到它的子类 叫XXXException =>每个子类负责处理一种异常
最终我们才能在控制台看见程序给我们提供的异常信息 根据异常信息才能对程序进行调试

java 标准异常处理流程也叫自动流程

自动流程一个缺点 (一旦java连接数据库,数据库出现的问题java就无法预知更无法处理)
java就要把异常处理这个工作交给开发者
开发者需要使用 try catch代码块自己捕获异常 自己处理异常

处理异常java提供了两种方案

1.自己捕获自己处理

try 尝试运行的 catch 捕获异常 finally 必须执行的

如果try中的代码出错了 能被catch捕获 代码进入到catch

如果try中的代码不出错 不会进入catch

流程

1.准确找到 错误的信息的处理类 如果找不到 牺牲性能找Exception
2.处理(有三种方法)
1.自己打印错误信息 不推荐 优点是信息是汉字 缺点是没有错误的行数

System.out.println("空指针");

​ 2.让java打印错误信息(推荐)

e.printStackTrace(); 

​ 3.使用throw往控制台抛出错误信息 不推荐因为提示错误的行数不准确(2.抛出,不处理)

throw new RuntimeException("空指针!");

可以1.2.一起用麻烦些

2.抛出,不处理

try 尝试运行的 thorw 抛出到控制台 thorws 抛出给其他的方法调用者

自己不处理,往外甩,程序照样崩溃,立刻终止当前方法,程序直接停止运行

同上理

一般不用,很不负责任,尤其是main方法中

可以只抛不处理的情景:

​ 1.底层工具方法、通用方法

​ 2.自己没权限、不知道怎么处理异常

​ 3.受检异常不得不抛

​ 4.项目有全局统一异常处理

示例

java处理

String str = null;
int size = str.length();			
System.out.println(size);
//报错
Exception in thread "main" java.lang.NullPointerException
	at 草稿.cg001.main(cg001.java:6)

Exception in thread "main" :报错的代码块

java.lang.NullPointerException :报错的名称 (空指针异常 超级常见)

at 草稿.cg001.main(cg001.java:6) :报错的行数位置

自己捕获自己处理

public static void main(String[] args) {
	String str = null;
	try{
     	int size = str.length();			
     	System.out.println(size);
  	}catch (NullPointerException e){
      	System.out.println("出现异常:字符串不能为 null!");
    	e.printStackTrace();
        }
}

输出

出现异常:字符串不能为 null!
java.lang.NullPointerException
	at 草稿.cg001.main(cg001.java:7)

抛出,不处理

public static void main(String[] args) throws NullPointerException {
    String str = null;
    str.length(); // 出异常
    System.out.println("后面代码不执行");
}
public static void main(String[] args) {
    String str = null;
    if(str == null){
        throw new NullPointerException("字符串为空");
    }
}

联系

public static void main(String[] args) {
    try {
        String str = null;
        if(str == null){
            throw new NullPointerException("字符串为空");
        }
    } catch (NullPointerException e) {
        // 捕获并处理异常,程序不终止
        System.out.println("捕获到异常:" + e.getMessage());
    }
    System.out.println("程序继续执行后面代码");
}

区别

关键字 位置 作用 会不会终止程序
throw 方法里面 手动主动扔出一个异常 没人捕获就立刻终止
throws 方法声明上 只是告诉别人我这里可能会出异常,不处理 不处理,异常往外抛,程序照样崩
try-catch 方法里面 接住异常、处理异常 接住了就不终止,继续运行
posted @ 2026-10-20 20:35  瑜淞蜀  阅读(1)  评论(0)    收藏  举报