Java异常详解1.0

在Java中如果写出下列的程序:

int[] a=new int[10];
a[10]=10;

这个程序在编译的时候并不会报错,但是在运行是会产生错误,编辑器会报出:java.lang.ArrayIndexOutOfBoundsException的错误,这个就是程序不正常的情况,这个在查看代码时我们很轻易地就知道他是因为索引越界而产生的,这个就是我们所说的异常情况之一。
JVM对异常默认的处理方案:
1.把异常的名称、异常的原因、异常出现的位置 输出在控制台上。
2.终止程序。
处理异常的常用方法有:try…catch,throws。

try{
//可能产生异常的代码
}catch(Type1 id1){
//处理Typde1异常的代码
}catch(Typde2 id2){
//处理Typde2异常的代码
}catch(Typde3 id3){
//处理Typde3异常的代码
}

因为在代码中可能 会产生一种或多种代码,所以要把所有可能的异常都要用一个catch捕捉,消除因为异常的产生而引起的程序不能运行的影响。
这个时候就可以把上面的数组放入try…catch中,如下

try {
		int[] a=new int[10];
		a[10]=10;
		System.out.println(a);
	}catch(ArrayIndexOutOfBoundsException e) {
		System.out.println(e.getMessage());
		System.out.println(e);
		e.printStackTrace();
	}

这样他就可以捕捉因为索引越界而产生的异常。进而消除他的影响。
在异常的捕捉机制中:
在这里插入图片描述
异常产生后会一层一层的跳出函数去寻找try…catch去消除一场产生的影响。例如下面的代码:

package yichang;

public class Yichang1 {
	public static void f() {
		int[] a=new int[10];
		a[10]=10;
		System.out.println("f");
	}
	public static void g() {
		f();
	}
	public static void h() {
		int i=10;
		if(i<100) {
			g();
		}
	}
	public static void j() {
		try {
			h();
		}catch(NullPointerException e) {//此时产生的异常和这个catch不匹配就会继续跳出结构,寻找相应的try...catch
			System.out.println("j()");
		}
	}
	public static void main(String[] args) {
		try {
			j();
		}catch(ArrayIndexOutOfBoundsException e) {
			System.out.println(e.getMessage());
			System.out.println(e);
			e.printStackTrace();
		}
		
	}

}

产生的结果就是:

Index 10 out of bounds for length 10//指出异常的原因
java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 10
java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 10
	at yichang.Yichang1.f(Yichang1.java:6)
	at yichang.Yichang1.g(Yichang1.java:10)
	at yichang.Yichang1.h(Yichang1.java:15)
	at yichang.Yichang1.j(Yichang1.java:20)
	at yichang.Yichang1.main(Yichang1.java:27)//从下往上看就相当于一层一层函数的嵌套

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值