java中的异常
java中的系统异常机制
1、系统的异常:JVM中的错误
此类错误是无法修改代码来避免的,属于硬件错误。比如
StackOverFlow ,递归运行一万次不会出错误,但是总会在特定时间出现错误
2、非系统异常,可以通过修改代码修改
java中的异常分类
1、非检查性异常:
NullPointException
ArrayIndexOutOfException
这种属于运行时错误,编译时不会报错
2、检查性异常:
这种属于编译时报错,比如最简单的没有加分号,就会产生报错。或者
异常报错的信息分析
1、可以通过系统跑出的异常提示,和输出System.out.println();添加到各个位置,判断错误
2、通过try或者catch,或者finally来改变。
通过各种各样的抛出异常来解决
class A{
public static void main(String args[]){
Scanner read=new Scanner();
System.out.println(“请输入两个整数”);
int num1=read.nextInt();
int num2=read.nextInt();
int res=method(num1,num2);
}
public void method(int num1,int num2){
int num3=num1/num2;
System.out.println(num2);
return num2;
}
}
这个时候就会有异常抛出,这是属于非检查性异常,程序到
int num3=num1/num2;就会停止,并不会执行到接下来的输出。
此时我们就需要用到try和catch了
就比如
这样之后的运行结果就不一样了
finally{}的作用就是无论执行到哪里,finally中的程序一定会被执行
举个栗子,我们对代码进行一个小的修改
public class A {
static //private static final Readable Integer = null;
int num3;
public static void main(String args[]){
Scanner read=new Scanner(System.in);
System.out.println("请输如两个整数");
int num1=read.nextInt();
int num2=read.nextInt();
int res=method(num1,num2);
}
public static int method(int num1,int num2){
try{
num3=num1/num2;
}catch(Exception e){
System.out.println("num3="+num3);
return num3;
}
finally{
System.out.println("我是finally");
}
System.out.println("已结束");
return num2;
}
}
运行的结果是
如果我们把finally注释掉,结果就是
所以,我们可以看出,虽然结果已经在return num2处结束,但只要finally存在,就一定会执行。因此,我们一般会在finally中放入关闭输入的之类的程序,比如in.close();
ps:不要再try或catch中返回值。