1、运行时异常 vs 受检查异常
- 运行时异常:程序运行时才可能出现(如数组越界、空指针),编译器不强制处理(不用
try-catch或throws也能编译)。 - 受检查异常:编译器强制要求处理的异常(如IO异常),必须使用
try-catch捕获,或者用throws声明,否则编译报错
2、Java处理异常的机制
主要靠try-catch-finally(捕获处理)和throws(声明异常)
try:包裹可能出错的代码;catch:捕获特定异常并处理;finally:无论是否异常,都会执行(常用来关闭文件,连接等资源)throws:在方法签名上声明“这个方法可能抛异常”,把异常处理的责任交给调用者
3、声明异常的目的与方式
- 目的:告诉调用者“这个方法可能出什么异常”,让调用者提前处理
-
声明方法:在方法签名后加
throws 异常类名,多个异常用逗号分隔,例如:public void readFile() throws IOException{ // here is method code }
4、异常分类与抛出
-
分类:
Error:系统级严重错误(如栈溢出),程序几乎无法处理Exception:程序可处理的异常,又分为:- 运行时异常(
RuntimeException子类,如空指针):编译器不强制处理 - 受检查异常(非
RuntimeException的异常,如IO异常):编译器强制处理
-
抛出异常:用
throw关键字,例如throw new NullPointerException("空指针异常");
5、main方法中抛/捕Exception示例
public class Test {
public static void main(String[] args) {
try {
// 抛出带字符参数的Exception对象
throw new Exception("测试异常信息");
} catch (Exception e) {
// 捕获后打印构造器的字符参数
System.out.println(e.getMessage());
}
}
}
6、自定义异常(求和超范围抛异常)
// 自定义异常类(受检查异常,继承Exception)
class RangeException extends Exception {
public RangeException(String message) {
super(message);
}
}
// 测试类
public class SumDemo {
// 求和方法,声明可能抛自定义异常
public static int sum(int a, int b) throws RangeException {
if (a > 100 || b > 100) { // 假设范围≤100
throw new RangeException("数字超出范围(不能超过100)");
}
return a + b;
}
public static void main(String[] args) {
try {
sum(101, 50); // 触发异常
} catch (RangeException e) {
System.out.println("异常:" + e.getMessage());
}
}
}
7、getMessage()与printStackTrace()的作用
getMessage():返回异常的详细信息字符串(即构造异常时传入的描述信息)printStackTrace():打印 异常的堆栈跟踪信息(显示异常是在哪一行代码产生的,以及调用栈的顺序),方便调试找错误
8、无异常时try-catch的开销
如果没有异常产生,try-catch基本不会有额外系统开销(现代JVM对正常流程的try-catch优化很好。只有异常发生时,才会有创建异常对象的开销
© 版权声明
版权声明
- 1本网站名称:MuQYY
- 2本站永久网址:www.muqyy.top
- 3本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长 微信:bwj-1215 进行删除处理。
- 4本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
- 5本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
- 6本站资源大多存储在云盘,如发现链接失效,请联系我们我们会在第一时间更新。
THE END






暂无评论内容