1. 什么是异常
实际工作中,遇到的情况不可能是非常完美的。比如,你写的某个模块,用户输入不一定符合你的要求;你的程序打开某个文件,这个文件不存在或者文件格式不对;你要读取数据库的数据,数据可能是空的;程序跑着跑着,内存或硬盘满了。。。
异常:Exception
- 检查性异常
- 运行时异常
- 错误(ERROR)
2. 异常体系结构
即异常处理框架,java把异常当作对象处理
3. Java异常处理机制
-
处理异常五个关键字:try,catch,finally,throw,throws
-
抛出异常
-
捕获异常
public class Test { public static void main(String[] args) { int a = 1; int b = 0; System.out.println(a/b); }
public class Test {
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不能为0");
}finally {//处理善后工作,finally可以不要
System.out.println("finally");
}
}
}
-
catch(想要捕获的类型)可以写多个。假设要捕获多个异常,类型必须从小到大!
public class Test { public static void main(String[] args) { int a = 1; int b = 0; //System.out.println(a/b); try {//try监控区域 System.out.println(a/b); }catch (ArithmeticException e){//捕获异常 System.out.println("程序出现异常,变量b不能为0"); }catch (Error e){ System.out.println("Error"); }catch (Exception e){ System.out.println("Exception"); }catch (Throwable t){ System.out.println("Throwable"); } finally {//处理善后工作 System.out.println("finally"); } } }
-
选中语句 + Ctrl + Alt + t:可以自动的补充异常处理代码
-
主动抛出异常:在方法中使用throw
public class Test { public static void main(String[] args) { int a = 1; int b = 0; new Test().div(a, b); } public void div(int a, int b){ if(b == 0){//主动抛出异常 throw,一般在方法中使用 theow new ArithmeticException(); } System.out.println(a/b); } }
-
假设这个方法中,处理不了这个异常,就在方法上抛出异常 throws
-
public class Test { public static void main(String[] args) { int a = 1; int b = 0; try { new Test().div(a, b); } catch (ArithmeticException e) { e.printStackTrace(); } } //假设这个方法中,处理不了这个异常,就在方法上抛出异常 throws public void div(int a, int b) throws ArithmeticException{ if(b == 0){//主动抛出异常 throw,一般在方法中使用 throw new ArithmeticException(); } System.out.println(a/b); } }
4. 处理异常
5. 自定义异常
//自定义异常
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 + '}';
}
}
public class Test2 {
//可能会存在异常的方法
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(1);
} catch (MyException e) {
System.out.println("MyException -> " + e);
}
}
}