Java中的异常

异常的概念
异常的本质就是Java当中对可能出现的问题进行描述的一种对象体现。
异常: 凡是Excetption的子类都是异常。
异常分类
编译时异常: 在编译时期发生的异常,程序员可以处理,因为编译会报错,
Exception的子类但不是RuntimeException的子类。
运行时异常: 在运行时期发生的异常,程序员也可以处理,一般都是代码的逻辑性不够严谨不够健壮,依赖的是程序员的经验。
RuntimeException的子类都是运行时异常
严重错误: 在程序执行的整个阶段,都可发生错误,错误是无法解决的,可以避免。

		System.out.println("开始");
		System.out.println(10/0);
		System.out.println("结束"); //未执行
//开始
//Exception in thread "main" java.lang.ArithmeticException: / by zero  运行报错

处理异常的目的: 并不是为了修复程序的错误,而是就算程序出现了错误,也能够让程序继续执行。
如何处理异常
方式一: try…catch…finally;
异常处理的格式:
try{
//放置程序可能出现问题的代码
}catch(异常类 异常名){
//这里放置异常处理的代码
} finally{
//释放资源
}
finally关键字
1.finally修饰代码块一定会被执行,除非碰到程序退出
System.exit(0);
Runtime.getRuntime().exit(0);
2.一般用来释放内存资源,比如关闭IO流的输入输出对象,数据库连接对象等等

		System.out.println("开始");
		try {
			System.out.println(10/0);
		} catch (ArithmeticException e) {
			System.out.println("出现错误,除数不能为0");
		}
		System.out.println("结束");
		//开始
		//出现错误,除数不能为0
		//结束

注意:
1.try块的代码越少越好,节约内存空间
2.try块中一旦发生异常,那么try块中发生异常后面所有的代码都不会被执行
3.多个catch块只会执行一个
4.Exception接受异常必须放在异常的最后面,满足先子类后父类

异常的执行流程:
1.程序执行到错误行,系统会创建一个异常对象,并且抛给我们
ArithmeticException exp = new ArithmeticException("/by zero");
throw exp;
2.程序进入catch块进行逐个匹配
匹配成功,程序执行catch块代码
ArithmeticException ae = exp;
Exception e = exp;
匹配失败,交给jvm处理

处理异常的标准方式:
1.能够显示处理的尽量显示处理,提高程序的可读性
2.但是一定要在异常处理的最后加上 父类Exception处理

		int a = 10;
		int b = 0;
		int[] arr = new int[3];
		System.out.println("开始");
		try {
			System.out.println(a / b); //try块中一旦发生异常,那么try块中发生异常后面所有的代码都不会被执行
			System.out.println(arr[5]);
		} catch (ArithmeticException ae) {
			System.out.println("算术异常");//多个catch块只会执行一个
		} catch (ArrayIndexOutOfBoundsException aioobe) {
			System.out.println("数组越界");
		} catch (Exception e) {
			System.out.println("出现问题");
		}
		System.out.println("结束");
		//开始
		//算术异常
		//结束

方式二: throws。
throws关键字概述
在定义一个方法的时候可以使用throws关键字声明,使用throws声明的方法表示此方法不处理异常,而交给方法的调用者进行处理。

throws处理异常的格式
[修饰符] 返回值类型 方法名(参数列表) [throws 异常类1,异常类2…]{

}

注意:
1.异常的声明只是一种可能性,可能方法中没有异常,但是也可以声明
2.子类重写方法抛出的异常不能够被扩大

	//交给jvm处理异常
	public static void main(String[] args) {
		method();
	}
	
	private static void method() throws ArithmeticException {
		method2();
	}

	private static void method2() throws ArithmeticException {
		int a =10;
		int b = 0;
		System.out.println(a / b);
	}
//Exception in thread "main" java.lang.ArithmeticException: / by zero  运行报错

自定义异常
Java提供的异常不够我们自己使用,我们需要自定义异常,自己应用在我们的开发中
自定义异常的步骤
1.创建一个异常类继承 Exception或者RuntimeException
2.在自定义异常类中书写构造方法即可
a.无参构造
b.带错误信息的构造方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值