Java异常
什么是异常
简单分类
异常体系结构
Error
EXception
异常处理机制
Test1–捕获异常
package com.liu.exception.demo01;
public class Test01 {
public static void main(String[] args) {
int a = 1;
int b = 0;
try{//try监控区域
System.out.println(a/b);
}catch(ArithmeticException e){//catch异常处理区域
System.out.println("程序出现异常,变量b不能为0");
}catch(Exception e){//假设要捕获多个异常:从小到大!
System.out.println("Exception");
}catch(Throwable t){//包含范围越大的,写在越下面
System.out.println("Throwable");
}finally{//处理善后工作
System.out.println("finally1");
}
//finally 可以不要fianlly,假设IO,资源,关闭!
try{
new Test01().a();
}catch(Throwable e){//catch(想要捕获的异常类型)
System.out.println("程序出错");
}finally{
System.out.println("finally2");
}
//finally 可以不要fianlly,假设IO,资源,关闭!
}
public void a(){b();}
public void b(){a();}
}
Test2–快捷创建try catch(异常处理框架)
package com.liu.exception.demo01;
public class Test02 {
public static void main(String[] args) {
int a = 1;
int b = 0;
//CTRL+alt+t 选择try catch对应的方法,快捷生成
try {
System.out.println(a/b);
} catch (Exception e) {
//System.exit(1);//手动添加,程序捕获到到异常,程序退出
e.printStackTrace();//打印错误的栈信息(旧版idle)
} finally {
System.out.println("finally");
}
try {
System.out.println(a/b);
} catch (Exception e) {
throw new RuntimeException(e);//抛出一个运行时异常,并将当前异常 e 作为该运行时异常的原因。(新版idle)
} finally {
System.out.println("finally");
}
}
}
Test3–抛出异常
package com.liu.exception.demo01;
public class Test03 {
public static void main(String[] args) {
try {
new Test03().test(1,0);
} catch (Exception e) {
System.out.println("程序出现异常,变量b不能为0");
}//捕获处理掉异常后不影响整个程序的正常运行
}
public void test(int a,int b) throws ArithmeticException{ //假设这个方法中,处理不了这个异常。方法上抛出异常
if(b==0){
throw new ArithmeticException();//主动抛出异常,一般在方法中使用
}
}
}
自定义异常(使用的不多)
MyException
package com.liu.exception.demo02;
//自定义的异常类
public class MyException extends Exception{
//传递数字>10;就抛出异常
private int detail;
public MyException(int a){
this.detail = a;
}
//toString:异常的打印信息
@Override
public String toString() {
return "MyException{" +
"detail=" + detail +
'}';
}
}
Test
package com.liu.exception.demo02;
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(11);
} catch (MyException e) {
//增加一些处理异常的代码块
System.out.println("MyException=>"+e);
}
}
}
经验总结