JavaSE 异常机制
一、什么是异常?
异常指程序中出现的不期而至的各种情况
如:文件找不到、网络连接失败、非法参数等。
- 简单分类
- 检查性异常:用户错误或问题引起的异常,无法预见。
- 运行时异常:可以捕获,也可不处理
- 错误ERROR
- Java把异常当作对象来处理,超类:java.lang.Throwable
- Error:JVM一般会选择终止线程。
- Exception:在程序中尽可能的处理异常。
二、异常处理机制
1 捕获异常
使用代码块
try(){//try监控区域
}catch(){// catch(想要捕获的异常类型)捕获异常
}finally{ //处理善后工作,可以不要finally,可用在IO,资源关闭等地方,表示始终执行。
}
可使用快捷键: command+alt+T
- 案例展示一:(1/0异常捕获)
package com.exception;
public class Demo01 {
public static void main(String[] args) {
int a = 1;
int b = 0;
try { //try监控区域
System.out.println(a/b);
}catch (ArithmeticException e){ //捕获异常
System.out.println("程序异常!变量b不能为零");
}finally { //处理善后异常
System.out.println("finally");
}
}
}
- 案例展示二:(多个异常捕获)
package com.exception;
//异常捕获要从小到大捕获,不可从大到小,否则会覆盖!
public class Demo01 {
public static void main(String[] args) {
int a = 1;
int b = 0;
try { //try监控区域
System.out.println(a/b);
}catch (Error e){
System.out.println("Error");
}catch (Exception e){
System.out.println("Exception");
}catch (Throwable e){ //捕获异常
System.out.println("Throwable");
}finally { //处理善后异常
System.out.println("finally");
}
}
}
2 抛出异常
- 注意throw 和throws的不同
package com.exception;
public class Demo01 {
public static void main(String[] args) {
try {
new Demo01().test(1,0);
} catch (Exception e) {
e.printStackTrace();
}
}
//假设此方法中,处理不了这个异常,则在方法上抛出异常。
public void test(int a, int b) throws ArithmeticException{
if (b==0){ //注意throw和throws的区别
throw new ArithmeticException();//主动抛出异常,一般用在方法中
}
}
}
3 自定义异常
用户可以自己定义异常,只需继承Exception类即可。
案例展示:
package com.exception;
//自定义异常类:接收数据+打印异常信息
public class MyException extends Exception{
//传递数组:若该数字大于10,则抛出异常
private int detail;
public MyException(int a) {
this.detail = a;
}
//toString:异常的打印信息
@Override
public String toString() {
return "MyException{"+ detail +
'}';
}
}
package com.exception;
//测试类
public class Test {
//可能会存在异常的方法
static void test(int a ) throws MyException{
System.out.println("传递的参数为: "+ a);
if (a>10){
throw new MyException(a);//定义何时抛出
}
System.out.println("OK!");
}
public static void main(String[] args) {
try {
test(20);
} catch (MyException e) {
System.out.println("MyException=>"+e);
}
}
}
Conclusion:
- 处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理。
- 在多重catch块后面,可以加一个catch(Exception)来处理可能遗漏的异常。
- 对于不确定代码,也可以加try-catch。
- 尽量添加finally语句快去释放占用的资源。IO~ Scanner~
写在最后
出现在别人的生活里要想一份礼物!
To Demut and Dottie!