异常的处理机制---java小知识

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言
异常是程序在“编译”或者“执行”的过程中可能出现的问题。编译时异常是编译阶段就出错的,所以必须处理,否则代码根本无法通过,所以我们有必要认识和学习异常的处理机制。

一、异常的处理机制有哪些?

编译时异常的处理形式有三种:

  1. 出现异常直接抛出去给调用者,调用者也继续抛出去。
  2. 出现异常自己捕获处理。
  3. 前两者结合,出现异常直接抛出去给调用者,调用者捕获处理。

二、异常处理机制详细解释及代码

1.异常处理方式1—— throws

throws:用在方法上,可以将方法内部出现的异常抛出去给本方法的调用者处理。

抛出异常格式:(第一种:如果方法异常过多,则代码过于繁琐)

方法 throws异常1,异常2,异常3 ..{}

规范格式:(一个Exception解决问题,简简单单,干干净净)

方法 throws Exception{}

代码如下(示例):

import java.text.SimpleDateFormat;
import java.util.Date;

public class exceptiontest {

	public static void main(String[] args) throws Exception {
		// TODO 自动生成的方法存根
		String str="2022/03/25 21:10-19";    //标准格式:"yyyy-MM-dd HH:mm:ss"
		datetest(str);
	}
	public static void datetest(String str) throws Exception {
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date=sdf.parse(str);
		System.out.println(date);
	}

}t

结果:

Exception in thread "main" java.text.ParseException: Unparseable date: "2022/03/25 21:10-19"
	at java.base/java.text.DateFormat.parse(DateFormat.java:396)
	at csdn.exceptiontest.datetest(exceptiontest.java:16)
	at csdn.exceptiontest.main(exceptiontest.java:12)

这种方式并不好,发生异常的方法自己不处理异常,如果异常最终抛出去给虚拟机将引起程序死亡。 

2.异常处理方式2—— try...catch...

监视捕获异常,用在方法内部,可以将方法内部出现的异常直接捕获处理。

格式:

try{
     //监视可能出现异常的代码
}catch (异常类型1 变量){
    //处理异常
}catch (异常类型2 变量){
    //处理异常
}...

建议格式:(直接Exception简单明了)

try{
     //监视可能出现异常的代码
}catch (Exception 变量){
    //处理异常
}

代码如下(示例):

import java.text.SimpleDateFormat;
import java.util.Date;

public class exceptiontest {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		String str="2022/03/25 21:10-19";    //标准格式:"yyyy-MM-dd HH:mm:ss"
		datetest(str);
	}
	public static void datetest(String str){	
		try {
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			Date date = sdf.parse(str);
			System.out.println(date);
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();    //java自带的报错方法,将异常栈中的异常打印出来
		}
	}
}

结果:

java.text.ParseException: Unparseable date: "2022/03/25 21:10-19"
	at java.base/java.text.DateFormat.parse(DateFormat.java:396)
	at csdn.exceptiontest.datetest(exceptiontest.java:17)
	at csdn.exceptiontest.main(exceptiontest.java:11)

这种方式还可以,发生异常的方法自己独立完成异常的处理,程序可以继续往下执行。但是方法自己处理了异常,调用者不知道方法是否异常。

3.异常处理方式3——前两者结合

方法直接将异通过throws抛出去给调用者;调用者收到异常后直接捕获处理。

代码如下(示例):

import java.text.SimpleDateFormat;
import java.util.Date;

public class exceptiontest {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		String str="2022/03/25 21:10-19";    //标准格式:"yyyy-MM-dd HH:mm:ss"
		try {
			datetest(str);
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}
	public static void datetest(String str) throws Exception{
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			Date date = sdf.parse(str);
			System.out.println(date);
	}
}

结果:

java.text.ParseException: Unparseable date: "2022/03/25 21:10-19"
	at java.base/java.text.DateFormat.parse(DateFormat.java:396)
	at csdn.exceptiontest.datetest(exceptiontest.java:20)
	at csdn.exceptiontest.main(exceptiontest.java:12)

这种方式,完美避免了前两者的缺点,结合了前两种的优点(调用者知道了方法是否异常,也不会是虚拟机死亡)

三.运行时异常

运行时异常指:编译时不出错,运行时异常。方法会自动抛出异常,在外层try{}catch{}即可。

代码如下(示例):

public class exceptiontest {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		try {
			test(10);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}	
	}
	public static void test(int x){
		System.out.println(x/0);
	}

}

结果:

java.lang.ArithmeticException: / by zero
	at csdn.exceptiontest.test(exceptiontest.java:16)
	at csdn.exceptiontest.main(exceptiontest.java:8)

总结

在开发中按照规范来说第三种方式是最好的:底层的异常抛出去给最外层,最外层集中捕获处理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值