捕获它,也没有用throws子句声明抛出它,也会编译通过。
非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。
通过上面对异常的解释,现在应该对异常有一定的了解。下面来说明在java中是如何处理异常的。
try{} 代码块用于执行可能存在异常的代码,catch(异常类型 异常对象的名称){}代码块用于捕获并处理异常。
try{
//有可能出现异常的代码段1
//有可能出现异常的代码段2
}catch(异常类型 e){
//处理异常的代码段3
}
//代码段4
处理1.2.1的两数相除问题的demo:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try{
System.out.println("请输入一个被除数:");
int num1=sc.nextInt();
System.out.println("请输入一个除数:");
int num2=sc.nextInt();
int result=num1/num2;
}catch(Exception e){
System.out.println("在此处处理异常!");
}
System.out.println("程序运行结束");
}
第一种:没有遇到异常,即正常执行
第二种:匹配到异常
在try{}中的代码遇到异常时,会与catch()中括号里的异常进行比对,如果遇到的异常时属于catch的异常就会执行catch块中的代码,让后执行try-catch块后面的代码
第三种:匹配不到异常
try{} 代码块用于执行可能存在异常的代码,catch{}代码块用于捕获并处理异常。
finally{} 代码块用于回收资源(关闭文件、关闭数据库、关闭管道)的代码。finally代码块不管是否出现异常,都必须???行( finally块唯一不执行的情况System.exit(0) jvm正常退出。)
第一种:catch块没有return语句
(1)没有遇到异常:
try块内的代码——>finally块内的代码——>finally块后的代码
(2)遇到异常并匹配到异常:
try块内的代码——>catch块内的代码——>finally块内的代码——>finally块后的代码
public class Test01 {
public static void main(String[] args) {
try {
int a=1/0;
System.out.println("try");
} catch (Exception e) {
System.out.println("catch");
}finally {
System.out.println("finally");
}
System.out.println("程序正常运行结束");
}
}
结果:
(3)遇到异常却没有匹配到异常:
try块内的代码——>finally块内的代码——>程序中断运行
public static void main(String[] args) {
try {
int a=1/0;//会抛出ArithmeticException
System.out.println("try");
} catch (NullPointerException e) {
System.out.println("catch");
}finally {
System.out.println("finally");
}
System.out.println("程序正常运行结束");
}
结果:
第二种:catch块有return语句
(1)没有异常
try块内的代码——>finally块内的代码——>try块内的return语句
public class Test01 {
public static int test() {
try {
int a=2*2;
System.out.println("try");
return a;
} catch (Exception e) {
System.out.println("catch");
return 0;