java异常处理
java异常处理
软件程序在运行过程中,可能出现意外(Exception),运行中不期而至的问题。
- 检查性异常:用户错误或问题引起的异常,程序员无法预见的
- 运行时异常:可能被程序员避免的异常,可以在编译时被忽略
- 错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如栈溢出
java把异常当做对象来处理,基于java.lang.Throwable
api定义了许多异常类,主要分为错误(Error)和异常(Exception)两类
部分如下图:
error类对象由java虚拟机生成抛出,大多数与执行者无关
例如:
- OutOfMemoryError:虚拟机运行错误
- NoClassDefFoundError:类定义错误
- LinkageError:链接错误
异常:
运行时异常:
这些异常一般是程序逻辑错误引起的,和程序员有关
区别:
- Error是灾难性的致命错误,程序无法控制,一般java虚拟机(jvm)会选择终止线程
- Exception通常情况是可以被程序处理的
异常处理机制
五个关键词:
try,catch,finally,throw,throws
int a = 1;
int b = 0;
//捕获多个异常从小到大
try {//监控区域
System.out.println(a/b);
}catch (ArithmeticException e){//如果出现ArithmeticException错误
System.out.println("程序出现错误");
//打印错误跟踪
System.out.println(e.fillInStackTrace());
System.exit(0);
}catch (Exception e){
System.out.println("程序出现错误11");
System.out.println(e.fillInStackTrace());
}finally {
//不论是否出现错误都执行
System.out.println("finally");
}
/*程序出现错误
java.lang.ArithmeticException: / by zero
finally
选中代码块快捷键ctrl+alt+t(surround with)
int a = 1;
int b = 0;
if(b==0){
throw new ArithmeticException();//主动抛出异常
}
}
/*out :Exception in thread "main" java.lang.ArithmeticException
*/
//方法抛出异常
int a = 1;
int b = 0;
isZero(b);
//假设这个方法处理不了异常,向上抛出异常
public static void isZero(int b) throws ArithmeticException{
if(b==0){
throw new ArithmeticException();
}
System.out.println("aa");
}
/* out:Exception in thread "main" java.lang.ArithmeticException
at com.xxx.Student.isZero(Student.java:12)
at com.xxx.Student.main(Student.java:7)
自定义异常
继承Exception
public class MyException extends Exception{
//传递数字大于10
private int detail;
public MyException(int detail) {
this.detail = detail;
}
//打印异常信息
@Override
public String toString() {
return "MyException{" +
"detail=" + detail +
'}';
}
}
//b=11
public static void isZero(int b) throws MyException {
if(b>10){
throw new MyException(b);
}
}
//out:MyException{detail=11}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人