Error
类对象由 Java
虚拟机生成并抛出,一般与代码编写者执行的操作无关
- 当
JVM
不再有执行操作所需要的内存资源时,JVM
一般会选择终止线程,抛出 OutOfMemoryError
错误
- 诸如:类定义错误
NoClassDefFonudError
、链接错误 LinkageError
等
Exception
类分支中有一个非常最重要的子类RuntimeException
(运行时异常),常见的异常如下:
- 数组下标越界
ArrayIndexOutOfBoundsException
- 空指针异常
NullPointerException
- 算术异常
ArithmeticException
- 丢失资源
MissingResourceException
- 找不到类
ClassNotFoundException
- 异常一般由程序逻辑错误引起,程序应该从逻辑角度去尽量避免
- 异常的捕获:从小到大取捕获异常
IDEA
异常捕获生成快捷键 Ctrl + Alt + T
public class main {
public static void main(String[] args) {
try {
new main().a();
}catch (StackOverflowError s){
System.out.println("StackOverflowError");
}catch (Exception e){
System.out.println("Exception");
}catch (Error e){
System.out.println("Error");
}catch (Throwable t){
System.out.println("Throwable");
}finally {
System.out.println("finally");
}
}
public void a(){
b();
}
public void b(){
a();
}
}
- 主动抛出异常:在编写程序时,对于可能出现的异常,如果主动抛出异常,那么在遇到异常抛出后,程序不会停止运行
public class main {
public static void main(String[] args) {
int a = 2, b = 0;
try {
new main().test(a, b);
} catch (ArithmeticException e) {
e.printStackTrace();
} finally {
System.out.println("finally");
}
System.out.println("我还能执行");
}
public void test(int a, int b) throws ArithmeticException{
if (b == 0){
throw new ArithmeticException();
}
System.out.println("a / b = " + a/b);
}
}
Error
一般是灾难性、致命的错误,是程序无法处理的,此时 JVM
会选择终止线程
Exception
一般情况下程序是可以处理的,应该在编写程序时就去处理这些潜在的异常
public class MyException extends Exception {
private int detail;
public MyException(int detail) {
this.detail = detail;
}
@Override
public String toString() {
return "MyException{" + "detail=" + detail + '}';
}
}
public class TestException {
public static void main(String[] args) {
int a = 20;
try {
new TestException().chose(a);
} catch (MyException e) {
e.printStackTrace();
} finally {
System.out.println("finally");
}
}
public void chose(int a) throws MyException {
if (a > 10){
throw new MyException(a);
}
System.out.println("a = " + a);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!