Java异常

Java中的异常

1.为什么要使用异常

什么是异常机制 ?

一般来说,高级一点的编程语言,如Java, Php,javascript, c#它们都具备一套用来处理, 在程序的运作过程中监视与捕

获突发的各种异常的机制,可允许在相应的代码当中编写相应的补救措施/处理办法。

Java中为了增强程序的健壮性,保证程序遇到问题还能继续运行.

2.异常的概念

什么是异常: 在程序中出现了不正常情况就叫做异常

常见异常的体系结构:

在这里插入图片描述

3.JVM默认处理异常的方式

​如果程序中出现了不正常情况,且我们没有主动的去处理,这时候JVM会默认处理这个异常,打印出异常后,终止程序.

public class TryCatchDemo {

	public static void main(String[] args) throws ParseException {
		Scanner in = new Scanner(System.in);
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		System.out.println("请输入日期:");
		String str = in.next();
		// 使用parse方法,将字符串转换为日期
		// 如果出现异常,交给JVM默认处理
		Date date3 = df.parse(str);
		System.out.println("后续代码");
		System.out.println("日期为:" + date3);
	}
}

在这里插入图片描述

4.处理异常的方式

try–catch处理异常 throws抛出异常

注意:

异常机制的体系结构

当程序出现异常,但没有处理,会抛出异常,程序不会再往下执行

可以使用trycatch进行异常的捕抓和处理 【多捕获、针对异常类型进行捕获】

异常处理【trycatch 将异常往上抛出】

注意:try中的代码块出现异常后,则try剩余的语句不会再执行

如果trycatch中出现异常类型并不是catch所指定的类型则会直接抛出异常

try–catch处理异常

try—catch处理异常: 将可能出现不正常情况的代码放在try模块中,当出现异常时,直接匹配catch中设定的异常捕获类,

注意: 为了避免出现捕获不了异常,最后一个异常使用Exception异常父类捕获,或直接使用Exception捕获

格式:  try{
		可能出现异常的代码;
		出现异常后,后续代码不会执行
	  }catch(异常类 类名){
	  	捕获到异常后,处理异常
	  }catch(异常类1 类名1){
	  	捕获到异常后,处理异常
	  }
	  .......
	  finally{
	  	不管是否出现异常,都会执行,一般 用于关闭资源
	  }

try–catch简单处理

public class TryCatchDemo {

	public static void main(String[] args) throws ParseException {
		Scanner in = new Scanner(System.in);
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		System.out.println("请输入日期:");
		String str = in.next();
		// 使用parse方法,将字符串转换为日期
		Date date3=null;
		try {
			//可能出现异常的代码
			date3 = df.parse(str);
			System.out.println("try后续代码");
		} catch (ArrayIndexOutOfBoundsException e) {
			//异常会进行匹配,如果匹配不上是不会处理异常的
			e.printStackTrace();
		}
		System.out.println("后续代码");
		System.out.println("日期为:" + date3);
	}
}

在这里插入图片描述

多重try—catch处理异常: 如果第一个catch中的异常类没有匹配上,会继续匹配第二个异常类,如果都没匹配上会被JVM捕获

注意: 小范围的异常类放在前面的catch中,返回大的异常类放在后面的catch中

finally 不管是否发生异常,都被执行

public class TryCatchDemo1 {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		System.out.println("请输入除数:");
		int num = in.nextInt();
		int result = 0;
		try {
			//可能出现异常的代码
			result = 20/num;
			System.out.println("try后续代码");
		} catch (ArrayIndexOutOfBoundsException e) {
			//异常会进行匹配,如果匹配不上是不会处理异常的
			e.printStackTrace();  //打印栈异常信息
		} catch(ArithmeticException e) {
			System.out.println("除数不能为0");
		} catch(Exception e) {  //注意:多重异常捕获,将小范围的异常类放在前面
			System.out.println("被父类异常捕获");
		}finally {
			//不管是否异常都会关闭资源
			in.close();
		}
		System.out.println("后续代码");
		System.out.println("运算结果为:" + result);
	}
}

在这里插入图片描述

在这里插入图片描述

5.throws抛出异常类型

throws一般用于方法中,在方法内部出现异常后,但该方法没有处理异常,则使用throws抛出异常,谁调用该方法谁处理异常.

格式:  在方法名的后面 使用throws关键 抛出 异常类型
	 public void 方法名() throws 异常类{
	 	可能出现异常方法体;
	 }
public class ThrowsDemo {

	public static void main(String[] args) {
		int result=0;
		//提示需要处理方法抛出的异常
		try {
			result = show();
		} catch (Exception e) {
			//获取异常信息
			System.out.println(e.getMessage());
		}  
		System.out.println("运算结果为:"+result);
	}
	//方法需要抛出异常,用于调用方法者处理可能出现的异常
	private static int show() throws Exception {
		Scanner in = new Scanner(System.in);
		System.out.println("请输入除数:");
		int num = in.nextInt();
		int result = 20/num;
		return result;
	}
}

在这里插入图片描述

6.throw手动抛出异常对象

主动定义一个异常对象,并使用throw抛出异常对象,方法需要抛出异常,使用throws

public class ThrowDemo {

	public static void main(String[] args) {
		try {
			show();
		} catch (Exception e) {
			System.err.println(e.getMessage());
		}
	}
	//throws在这里的作用使用,让我们throw抛出的异常对象从方法之中抛出
	private static void show() throws Exception {
		int  score = -5;
		if(score<=100&& score>=0) {
			System.out.println("成绩正常!");
		}else {
			//使用throw手动抛出异常对象,并设置异常信息
			throw new Exception("您的成绩不在范围之中!");
		}
	}
}

在这里插入图片描述

try–catch与throws应用场景

​try-catch一般用于集中处理异常,或快速异常处理

​throws多用与较少调用或能被集中处理异常的方法使用

finally语句块

finally和trycatch一起使用的

不管trycatch中是否有出现异常都会执行finally中的代码

不管trycatch中是否有出现异常return语句都会执行

finally会影响方法的返回值、finally中如果有return语句,则trycatch中的

return就不起作用,最终还是返回finally中的数据

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢木木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值