第15天 异常Error和Exception
面向对象编程
- 初时面向对象
- 方法回顾和加深
- 对象的创建分析
- 面向对象三大特征
- 抽象类和接口
- 内部类和OOP实战
- 内部类和OOP实战
- 内部类
- 内部类就是在一个类的内部定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就成为内部类,而A相对于B类就是外部类了
-
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
异常Error和Exception
异常处理框架
后面要学习异常如何捕获
- 异常处理机制
- 抛出异常
- 捕获异常
- 异常处理的五个关键字
- try catch finally throw throws
public class Test {
public static void main(String[] args) {
try {
new Test().test(1,0);
} catch (ArithmeticException e) {
e.printStackTrace();
} finally {
}
//要注意:有个层层递进,必须是先低层级后高层级,捕获异常必须从小到大
//finally 可以不要finally,假设IO流 资源 关闭!
}
//假设这个方法中,处理不了这个异常,方法上抛出异常
public void test(int a,int b) throws ArithmeticException{
if (b==0){// throw throws适用于方法抛出异常
throw new ArithmeticException();//主动给抛出异常一般在方法中使用
}
}
}
/*例子1
int a = 1;
int b = 0;
try {//监控区域
System.out.println(a/b);
}catch (ArithmeticException e){//捕获异常
System.out.println("程序出现异常,变量b不能为0");
}finally {//处理善后工作
System.out.println("finally!");
}
*/
/*
//例子2
int a =1;
int b =0;
try {//监控区域
//也可以主动抛出异常
if (b==0){// throw throws 适用于方法抛出异常
throw new ArithmeticException();
}
System.out.println(a/b);
}catch (Error e) {//catch(想要捕获的异常类型) 捕获异常 Throwable是最高的 其次是error和exception
System.out.println("程序出现异常,变量b不能为0");
}catch (Exception e){
System.out.println("Exception");
}catch (Throwable e){
System.out.println("Throwable ");
}finally {//处理善后工作
System.out.println("finally!");
}
*/
public class Test2 {
public static void main(String[] args) {
int a =1;
int b =0;
/*
捕获自动生成的快捷键 选中要捕获的语句
(System.out.println(a/b);)
按住 Ctrl + Alt +T 选组try catch finally即可
*/
try {
System.out.println(a/b);
} catch (Exception e) {
System.exit(1);//可以自己添加一个程序推出或者其他提示语
e.printStackTrace();//打印错误的栈信息
} finally {
}
}
}
-
自定义异常
- 使用java内置的异常类可以描述编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常只需要继承Exception类即可。
- 程序中自定义异常类,大体按一下几个步骤:
- 1.创建自定义异常类
- 2.在方法中通过throw关键字抛出异常对象
- 3.如果在当前排除异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字知名要抛出给方法调用者的异常,继续进行下一步操作。
- 4.在出现异常方法的调用者中捕获并处理异常。
package com.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 +
'}';
}
}
public class Test01 {
//可能存在异常的方法
static void test(int a) throws MyException{
if (a>10){
throw new MyException(a);
}
System.out.println("OK");
}
public static void main(String[] args) {
try {
test(1);
} catch (Exception e) {
System.out.println("MyException=>"+e);
}
}
}
实际应用中的经验总结:
- 处理运行时异常时,采用给逻辑去合理规避同时辅助try-catch处理
- 在多重catch块皇后,可以加一个catch(Exception)来处理可能会被遗漏的异常
- 对于不确定的代码,也可以加上try-catch,处理潜在异常
- 尽量去处理异常,切记只是简单的调用printStackTrace()去打印输出
- 具体如何处理异常,要根据不同的业务需求和异常类型去决定
- 尽量添加finally语句块去释放占用的资源