Java的异常处理

异常:一般运行期间出现的错误,而不是编译期间的语法问题

分类:
Throwable(最大的父类)

Error:一般灾难性错误, 比如 堆栈溢出,内存溢出.(内存不足)不使用异常机制进行处理

Exception:
运行时异常(非检查性异常) : 可以处理,也可以不处理,通常根据程序员的编码经验可以避免.
非运行时异常(检查性异常) : 在编译期间进行检查,必须进行处理,否则编码不通过.

在这里插入图片描述

异常处理流程:抛出异常>捕获异常>处理异常

public class ExceptionHandling {
	//运行时异常(ArithmeticException)
	public static void check() {
//		int i=10/0;
		
		try {
			FileInputStream file = new FileInputStream("说明.txt");//检测有无异常
		} catch (FileNotFoundException e) {	//存在异常的话在下面进行处理
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		int[] j = new int[] {12,23,45};
		for(int k=0;k<=j.length;k++) {
			System.out.println(j[k]);
		}
		
		System.out.println("代码执行完毕");
	}
		
	
	public static void main(String[] args) {
		check();
	}
}

处理方式:
1.积极处理(自行处理):try中放的是可能发生异常的语句.catch(异常类型 异常名)中声明捕获的异常类型,cathy中处理异常的语句

try{
	可能出现异常的代码;
}catch(异常类型 异常名){
 	处理异常的代码;
}finaly{
	始终都会执行的代码;	通常用来关闭资源或释放资源
}

2.消极处理(throws回避异常):自身对异常不处理,由调用方法的对象处理

throws:定义在方法的声明上,告诉调用方法的人可能抛出某些异常

throw:定义在方法里,抛出特定的异常类型

jdk7后可以在方法上throws多个异常

注意:
1.try与catch结合使用,不能单独使用,且try与catch之间不能添加任何代码

2 可以定义多个catch捕获不同的异常类型

3.catch中的异常必须按照从小到大的顺序排序

4.对应finally代码中的语句,即使try代码块和catch代码块使用了return语句退出当前方法或使用break跳出循环,相关的finally代码块都会执行.
当try或catch中执行了System.exit(0);时,finally不会被执行

//积极
public class try_catch {
	public static void check() {
		try {
			
			System.exit(0);
			
			FileInputStream file = new FileInputStream("说明.txt");
			
			int[] arr = new int[] {12,34,55};
			
			System.out.println("代码执行完毕");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("数组越界异常");
		}catch(Exception e) {
			System.out.println("最大异常类");
		}finally {
			System.out.println("finally代码块");
		}

	}
	public static void main(String[] args) {
		check();
	}
}
//消极
public class e_throws {
	public static void check() throws FileNotFoundException {
		FileInputStream file = new FileInputStream("说明.txt");
	}
	
	public static void main(String[] args) {
		try {
			check();
//			throw new FileNotFoundException();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

异常堆栈

后进先出:打印堆栈信息
1.明确第一行的异常类型,异常原因
2.从上往下找
3.解决异常

public class ExceptionStack{
	public static void methodOne() {
		System.out.println("方法一");
		methodTwo();
	}
	
	public static void methodTwo() {
		System.out.println("方法二");
		methodThree();
	}
	
	public static void methodThree() {
		System.out.println("方法三");
		//制造异常
		int i=1/0;
		
	}
	public static void main(String[] args) {
		methodOne();
	}
}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值