目录
前言必读
一、概念
1.异常分为编译时异常和运行时异常
2.java异常划分如下图:
1.Error:系统级别问题
2.Exception:java.lang包下,称为异常类,代表程序本身可以处理的问题
3.RuntimeException:运行时异常,在运行时候才会发现报错的,例如空指针异常,数组索引越界
4.其他异常:除RuntimeException之外的所有异常,在编译时候就要处理,否则编译不通过,例如日期格式等
二、异常出现的原因
运行时异常:业务逻辑思维没有考虑好
例子有:
1.数组索引越界异常(ArraylndexOutOfBoundsException)
2.空指针异常(NullpointerException)
3.算术异常(ArithmeticException)
4.丢失资源(MissingResourceException)
5.找不到类 (ClassNotFoundException)
编译时异常:代码书写规范问题
三、处理异常三大方法
1.出现异常直接抛出去给调用者,调用者也抛出去
具体:
throws:用在方法上,可以将方法内部的的异常抛给调用者处理
方式:哪里红光标就放哪里然后使用快捷键:alt+回车
评价:一直往外抛,抛出去给虚拟机会导致程序死亡
语法:
方法 throws Exception{
}
快捷键:alt+回车
自定义异常,方法内部抛出使用:throw new 异常
选中这个抛出异常
2.出现异常自己捕获,不麻烦别人
具体:
try….catch:用在方法内部,可以将出现的异常直接捕获处理
评价:这种方式还可以,发生异常自己内部独立处理,程序继续往下执行
语法:
try {
//可能出现的异常代码块
} catch (Exception e) {
e.printStackTrace();//打印异常栈信息
}
//快捷键:ctrl+alt+t
3.前两种结合,出现异常抛出去给调用者,调用者捕获处理
具体:
评价:这种方式最后,把最底层代码抛给最外层再进行集中捕获处理
语法:
具体步骤跟着前面两个来1.先对异常进行抛出到最外层,2.然后进行捕获处理
五、例子
1.无法解决的虚拟机异常之栈溢出
package bao;
//测试类
public class Test {
public static void main(String[] args) {
//栈溢出,无法解决的异常,java.lang.StackOverflowError
main(args);
}
}
运行结果
at bao.Test.main(Test.java:6)
at bao.Test.main(Test.java:6)
at bao.Test.main(Test.java:6)
at bao.Test.main(Test.java:6)
at bao.Test.main(Test.java:6)
at bao.Test.main(Test.java:6)
at bao.Test.main(Test.java:6)
at bao.Test.main(Test.java:6)
at bao.Test.main(Test.java:6)
1.无法解决的虚拟机异常之堆溢出
package bao;
//测试类
public class Test {
public static void main(String[] args) {
//堆溢出,无法解决的异常,java.lang.OutOfMemoryError
Integer[] arr = new Integer[1024*1024*1024];
}
}
运行结果
Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
at bao.Test.main(Test.java:6)Process finished with exit code 1
运行时异常例子
package bao;
public class Test {
public static void main(String[] args) {
//2.快捷键ctrl+alt+t生成捕获异常
try {//监控区域
System.out.println(10/0);//1.不能除于0,出现异常
} catch (Exception e) {//想要捕获的异常类型
System.out.println("这里出现了异常");//手动提醒用户出现异常
throw new RuntimeException(e);//往外抛,打印错误的信息,这个注释掉调控制台就不会报红
} finally {//处理善后工作
System.out.println("出现异常了我还能运行耶");//出现异常后还能运行的代码
}
}
}
//注意:多组异常放一起,越大的父类异常放在越下面
运行结果
这里出现了异常
出现异常了我还能运行耶
Exception in thread “main” java.lang.RuntimeException: java.lang.ArithmeticException: / by zero
at bao.Test.main(Test.java:9)
Caused by: java.lang.ArithmeticException: / by zero
at bao.Test.main(Test.java:6)Process finished with exit code 1
旁白:出现异常能解决就解决,解决不了再快捷键抛出捕获处理等。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/112710.html