以异常类的形式对这些非正常情况进行封装,通过异常处理机制对程序运行时
发生的各种问题进行处理

package test;

public class test1 {

public static void main(String[] args) {
System.out.println(a(1, 2));
System.out.println("aaaaaaaaaaaaa");
}
//当我们定义的被除数为整型时(short、int、long)会抛出此异常, 被除数为整型时不可为零。
public static int a(int x, int y) {
int result = x / y;
return result;
}


}

java 处理异常 注意项总结_子类

Error类称为错误类,它表示Java运行时产生的系统内部错误或资源耗尽的错误,是比较严重的,仅靠修改程序本身是不能恢复执行的。

Exception类称为异常类,它表示程序本身可以处理的错误,在开发Java程序中进行的异常处理,都是针对Exception类及其子类。在Exception类的众多子类中有一个特殊的RuntimeException类,该类及其子类用于表示运行时异常,除了此类,Exception类下所有其他的子类都用于表示编译时异常。

java 处理异常 注意项总结_子类_02

异常捕获通常使用try…catch语句,具体语法

格式如下:

java 处理异常 注意项总结_子类_03

其中在try代码块中编写可能发生异常的Java语句,catch代码块中编写针对异常进行处理的代码。当try代码块中的程序发生了异常,系统会将这个异常的信息封装成一个异常对象,并将这个对象传递给catch代码块。catch代码块需要一个参数指明它所能够接收的异常类型,这个参数的类型必须是Exception类或其子类。

如果去调用一个别人写的方法时,是否能知道别人写的方法是否会有异常呢?这是很难做出判断的。针对这种情况,Java中允许在方法的后面使用throws关键字对外声明该方法有可能发生的异常,这样调用者在调用方法时,就明确地知道该方法有异常,并且必须在程序中对异常进行处理,否则编译无法通过。

java 处理异常 注意项总结_代码块_04

try…catch和finally

package test;

public class test2{
public static void main(String[] args) {
try{
int c=a(4,0);
}catch (ArithmeticException e){
System.out.println(e.getMessage());
}finally {
System.out.println("this is");
}
System.out.println("ending");
}
public static int a(int x,int y){
int result=x/y;
return result;
}
}

throws关键字

package test;

public class test3 {
public static void main(String[] args) {
//case1
System.out.println(a(4, 10));
//case2
try {
System.out.println(a(4, 0));
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("end");
}

//throws关键字需要写在方法声明的后面,throws后面需
//要声明方法中发生异常的类型,通常将这种做法称为方法声明抛出一个异常。
public static int a(int x,int y) throws RuntimeException{
int result=x/y;
return result;
}
}

编译时异常和运行时异常

java 处理异常 注意项总结_代码块_05

java 处理异常 注意项总结_代码块_06

java 处理异常 注意项总结_代码块_07

自定义异常

java 处理异常 注意项总结_代码块_08

package test;

public class test4 extends Exception {
public test4() {
super();
}

public test4(String message) {
super(message);
}

}
package test;

public class test5 {
public static void main(String[] args) {
try {
a(10, 0);
} catch (test4 e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
System.out.println("aa");
}

public static int a(int x, int y) throws test4 {
Integer c = null;
try {
c = x / y;
} catch (Exception e) {
throw new test4("cc");
} finally {
System.out.println("ttt");
}
return c;
}
}