11. 异常
11.1 异常的定义
异常就是在程序运行过程中的一些预期之外的情况,需要说明一下,同时进行合理的处理,保证我们程序正常运行或者不至于崩掉,这些异常包括文件无法找到、网络连接失败等等。
一般有以下几种情况:
检查性异常。最具代表的就是用户操作错误引起的异常,这种异常时无法被发现的。
运行时异常。该异常时可以被避免的,运行的时候可以在编译的时候被忽略。
错误ERROR。错误就不是异常了,而是一种脱离了程序员控制的异常,常常不能在编译的时候检查出来。例如栈溢出。
在java中把异常当作对象来处理,定义了一个超类java.lang.Throwable作为所有异常和错误的类。
Error类时虚拟机生成抛出的,大多数与编写程序无关,一般这些错误发生java虚拟机会选择线程终止。还有是法神在虚拟机将要执行应用时发生的,例如定义错误、链接错误等等。
Exception类分支有很多:
- ArrayIndexOutOfBoundsException,数组下标越界
- NullPointerException,空指针异常
- ArithmeticException,算数异常
- MissingResourceException,丢失资源
- ClassNotFoundException,找不到类
这些异常都是不检查异常,既是只有在运行的时候才会出现的异常,程序中可以选择捕获或者不处理。
Error一般是灾难性的致命错误,程序无法控制处理,进而选择终止,Exception一般是可以被程序处理的,并且程序回尽可能处理这些异常。
11.2 异常的捕获
异常处理有以下五个关键字:
try、catch、finally、throw、throws
package com.cabin.test05;
public class A {
public static void main(String[] args) {
int a = 1;
int b = 0;
try {
System.out.println(a/b);
}catch (ArithmeticException e){//异常的类型
e.printStackTrace();//打印错误的信息
System.out.println("除数不能为0");
}finally {
System.out.println("finally");
}
}
}
这是捕获异常的基本方法,try和catch是必须有的,finally看情况添加。
catch可以和if一样添加多层,注意最下面一层捕获的异常时异常类最大的,既是依次增加异常类的级别。
11.3 异常的抛出
7654321·=中,主动抛出异常。
package com.cabin.test05;
public class A {
public static void main(String[] args) {
new A().a(1,0);
}
public void a(int a ,int b) throws ArithmeticException{
if(b==0) {
throw new ArithmeticException();
}
System.out.println(a/b);
}
}
方法内抛出异常时throw,方法上抛出异常是throws,当方法内无法处理异常可以往上抛出,既在方法上抛出异常。
11.4 自定义异常
想要自己定义异常没只需要继承Exception类就行。
一般是以下几个步骤:
- 创建自定义异常。
- 在方法中用throw抛出异常。
- 如果是在当前抛出异常的方法中处理异常,就用try-catch捕获处理,否则就在声明方法处通过throws关键字抛出给方法调用者处理。
- 或者直接在出现异常的地方直接捕获处理。
package com.cabin.test05;
public class MyException extends Exception{
private int detail;
public MyException(int a) {
this.detail = a;
}
@Override
public String toString() {
return "MyException{" +
"数字太大" + detail +
'}';
}
}
package com.cabin.test05;
public class Test {
public void test(int a) throws MyException {
if (a>10){
throw new MyException(a);
}
System.out.println("ok");
}
public static void main(String[] args) {
try{
new Test().test(12);
}catch(MyException e){
System.out.println("MyException "+e);
}
}
}
以上就是一种简单的自定义异常,自由度很高,Test类里面的方法可以按自己的需求来修改。
基本到这,我们的java的基础语法就结束了。感谢你的阅读和学习!!