java中的异常处理及心得

前言

先上图,这是我总结的一个关于异常的图,其中包括异常类之间的关系。
异常关系图

1、异常类简单说明

针对上面的图片,首先在java中所有类的父类都是Object,而异常类的父类Throwable继承Object类,同时Throwable下面还包括两个子类Error和Exception,具体解释如下:

  • Error(天灾):个人努力或者计算机系统都无法恢复
  • Eeception(在Java的API中封装了几十个类型):
    1.非检查型异常(还称之为bug,通常是人的问题eg:ArrayIndexOutOfBoundsException)
    编译器在编译时不进行检查,而在运行的时候检查
    2.检查型异常(eg:IoException)
    编辑器在编译时检查
  • 何为非检查型异常,何为检查型异常?
    1.非检查型异常
    调用该方法的方法可以处理可以不处理
    2.检查型异常
    调用该方法的方法需要进行异常处理
  • 总结:我们平时编写的程序极大多数都是非检查型异常,比如数组越界、空指针异常等。

2、异常书写的基本格式

谈到异常及一定要说明一下异常的基本书写格式,以及我当时遇到的坑。
异常基本书写格式
针对异常,最喜欢挖的坑就是关于return,对此,我有一句话总结:
如果try、catch和finally中都有return,finally中的return将覆盖掉其他return语句。
话句话说就是finally中的return必须执行。

3、自定义的异常如何书写?

以下是我当初学习异常时,记录的一个自定义异常。

/**
 * 题目:输出abc时,抛出异常
 * 
 * 说一下整个程序的走向吧,这也是当时我最迷惑的地方。
 * 首先在控制台输入一个字符串,程序会实例化Entity类的对象,调用Entity类中的
 * Letter()方法,并将输入的字符串当做参数传入;如果输入的字符串不是abc,则输出你输
 * 入的内容,如果输入的字符串是abc,则会实例化并调用自定义的异常类,通过throws将这个
 * 异常抛出,之后由catch接收到这个异常对象,之后调用自定义异常类中的getSum()方法。
 * 输出异常,到此结束。呼!!!
 */
public class ExerciseAbnormal {
	public void getSummary() {
		String strLetter = null;
		try {
			@SuppressWarnings("resource")
			Scanner objIn = new Scanner(System.in);
			strLetter = objIn.nextLine();
			Entity objout = new Entity();
			objout.Letter(strLetter);
		}catch(MyException e) {          //catch的作用是抓住异常
			e.getSum();
		}
	}
	
	public static void main(String[] args) {
		ExerciseAbnormal objSum = new ExerciseAbnormal();
		objSum.getSummary(); 
	}
}

class Entity {
	public void Letter(String r) throws MyException {
		if(r.equals("abc")){
			throw new MyException(); //抛出异常
		}else {
			System.out.print(r);
		}
	}
}

@SuppressWarnings("serial")
class MyException extends Exception {
	public void getSum() {
		System.out.println("输出异常");
	}

}

解题思路以上已经说明,比较容易让人困惑的是throws和throw的区别?

  • throws(用于方法上)代表这个方法可能会抛出异常,如果抛出多个异常,中间可以用逗号隔开
  • throw(用于语句上)代表这里的语句一定需要抛出异常

4、总结

以上就是我对异常的一些基本理解,如有不对之处,希望诸君不吝赐教。

版权声明:本文出自孤星卟哭的博客,原创文章,转载请注明出处。 https://blog.csdn.net/zcy92949/article/details/80074839

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值