黑马程序员--自学笔记--异常

原创 2015年11月24日 12:00:18

异常

-------- android培训java培训、期待与您交流! ---------

一.概述

    异常就是在运行时期发生的不正常情况。在java中用类的形式对不正常情况进行了描述和封装对象。描述不正常的情况的类,就称为异常类。
    异常体系结构:

    Throwable :是java对不正常情况进行描述后产生的对象体系。无论是error,还是异常、问题,问题发生就应该可以抛出,让调用者知道并处理。该体系的特点就在于Throwable及其所有的子类都具有可抛性。
    该体系的不正常情况分成了两大类:
        ① 一般不可处理的:Error
        // 特点:是由jvm抛出的严重性问题。这种问题发生,一般不针对性处理,直接修改程序。
        ② 可以处理的:Exception
    该体系的特点:子类的后缀名都是用其父类名作为后缀,阅读性很强。
注意:
    凡是可以被throws和throw这两个关键字所操作的类和对象都具备可抛性。

二.异常的处理

    对于异常的处理:java提供了特有语句进行处理(即try{}catch{})。
代码演示:
    try{
        需要被检测的代码 ;
    }catch(异常类型 变量){
        处理异常的代码(处理方式) ;
    }finally{
        一定会被执行的语句 ;
    }
注意:
    该处理异常的语句的主要搭配:try-catch、try-catch-finally、try-finally三种形式。
范例演示:
<span style="font-family:KaiTi_GB2312;"><strong><strong><span style="font-family:KaiTi_GB2312;"><span style="font-size:14px;"><span style="font-family:KaiTi_GB2312;">public class Demo {</span>
	public static void main(String[] args) {
		int x = 5;
		int y = 0;
		try {
			//由于除数为零,导致异常发生
			int retsult = x / y;
			System.out.println("执行到我说明没有异常^_^");
		} catch (Exception e) {
			System.out.println("发生异常啦T_T");
			e.printStackTrace();
		} finally { // 通常用于关闭(释放)资源
			System.out.println("我一定会被执行");
		}
		System.out.println("执行完成");
	}
}</span><span style="color:#ff9966;">
</span></span></strong></strong></span>

三.自定义异常

1.自定义异常的定义 
    将可以自定义出的问题描述称为自定义异常。
2.自定义异常的条件
    ① 要想让一个类成为异常类,必须要继承异常体系,因为只有成为异常体系的子类才有资格具备可抛性,才可以被两个关键字所操作:throws、throw。
    ② 自定义异常类需要继承Exception或者其子类,通过构造函数定义来异常信息。
3.throws和throw两个关键字的区别:
    throw:在函数内使用,后面跟着异常对象。如RuntimeException。
    throws:可以在函数上声明异常。便于提高代码的安全性,让调用者进行处理,否则编译失败。后面跟着异常类,可以用逗号隔开跟多个异常类。
范例演示:(注意:注释中包含知识点注意点)
<span style="font-family:KaiTi_GB2312;"><strong><strong><span style="font-family:KaiTi_GB2312;"><span style="font-size:14px;"><span style="font-family:KaiTi_GB2312;">	public void setGender(String gender) throws MyException { // throws在函数上声明异常</span>
		if (gender.equals("男") || gender.equals("女")) {
			this.gender = gender;
		} else {
			/*
			 * throw可以在方法体内抛出异常,但必须捕获或者 在方法体上用throws抛出
			 */
			throw new MyException("性别只能是男或者女哦!");
		}
	}</span></span></strong></strong></span>

四.异常相关注意事项

1.异常处理的原则
    ① 函数内容如果有抛出需要检测的异常,那么在函数上必须要声明。否则,必须在函数内用try/catch语句进行捕捉,否则将会编译失败;
    ② 如果调用到了声明异常的函数,那么要不就利用try/catch语句进行捕捉,要不就使用关键字throws直接抛出,否则将会编译失败;
    ③ 如果产生异常的功能内容可以通过本身解决,就使用用catch语句。如果解决不了,就需要通过使用throws关键字告诉调用者,由调用者进行解决;
    ④ 一个功能如果抛出了多个不同的异常,那么在调用时,就必须有对应多个catch语句进行针对性地处理。内部产生出几个需要检测的异常,就会抛几个异常,就需要通过catch语句处理几个。
范例演示:
<span style="font-family:KaiTi_GB2312;"><strong><strong><span style="font-family:KaiTi_GB2312;"><span style="font-size:14px;"><span style="font-family:KaiTi_GB2312;">class Demo {</span>
	public int show(int index) throws ArrayIndexOutOfBoundsException {
		if (index < 0)
			throw new ArrayIndexOutOfBoundsException("越界啦!");
		int[] arr = new int[4];
		return arr[index];
	}
}

class ExceptionDemo {
	public static void main(String[] args) {
		Demo d = new Demo();
		try {
			int num = d.show(-2);
			System.out.println("num = " + num);
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println(e.toString());
			System.exit(0);// 退出jvm
		} finally { // 通常用于关闭(释放)资源
			System.out.println("finally"); // 由于前面执行了System.exit(0);,故不会执行此语句。
		}
		System.out.println("over");
	}
}</span></span></strong></strong></span>

2.异常的注意事项
    ① RuntimeException以及其子类异常如果在函数中被关键字throw抛出,则可以不用在函数上进行声明;
    ② 子类在覆盖父类方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类的异常或者该异常的子类;如果父类抛出了多个异常,那么子类只能抛出父类异常的子集;总而言之,子类覆盖父类只能抛出父类的异常或者子类的子集。(该注意点必须记住,在今后代码开发必须要留心)
    ③ 如果父类的方法没有抛出任何异常,那么子类覆盖时绝对不能抛出异常,只能通过try/catch语句进行处理。

五.异常综合案例

通过以下关于异常的代码演示,进一步认识异常的相关知识:  (注意:注释中包含知识点和注意点)
<span style="font-family:KaiTi_GB2312;"><strong><strong><span style="font-family:KaiTi_GB2312;"><span style="font-size:14px;"><span style="font-family:KaiTi_GB2312;">class FuShuException extends Exception// 自定义的异常类</span>
{
	private int value;

	FuShuException(String mes, int value) {
		/*
		 * 因为自定义异常继承于Exception,而且Exception再 继承Throwable的时候就已经复写了它的方法,所以可以直接引用
		 */
		super(mes);
		this.value = value;
	}

	public int getValue() {
		return value;
	}
}

class Demo {
	// 函数内抛出异常时,函数上应声明该异常
	public int div(int a, int b) throws FuShuException {
		if (b < 0)
			// 如果除数是负数,则抛出自定义异常
			throw new FuShuException("负数异常!出现负数了!", b);
		return a / b;
	}
}

class DemoExceptionTest {
	public static void main(String[] args) {
		Demo d = new Demo();
		try {
			int x = d.div(4, -1);
			System.out.println(x);
		} catch (FuShuException e) {
			System.out.println(e.toString());// 打印对自定义异常的描述
			System.out.println("错误的负数时:" + e.getValue());
		}
	}
}</span>
</span></strong></strong></span>








版权声明:本文为博主原创文章,未经博主允许不得转载。

黑马程序员---自学随堂笔记----异常

异常处理: 1,声明异常时,建议异常更为具体的异常,处理更具体。 2,对方声明几个异常,就对应几个catch块。 如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面...

黑马程序员 java学习笔记 Day1:异常

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 异常: 是什么?是对问题的描述,将问题进行对象的封装。 异常体系:...

黑马程序员-异常总结和笔记

------- android培训、java培训、期待与您交流! ---------- 异常 异常分为两种:   Error (这个是严重的异常 表示JVM不能够处理的)   ...

黑马程序员---------笔记整理(java基础六-----异常)

---------------------- android培训、java培训、期待与您交流! ----------------------   今儿真该忏悔一下,啥也没做,从明天起去软件园复习,在...
  • tcs250
  • tcs250
  • 2012年05月22日 00:50
  • 416

黑马程序员--Java异常处理笔记

---------------------- android培训、java培训、期待与您交流! ---------------------- 异常 异常是什么? 是对问题的描述,将问题进行对象...

黑马程序员之笔记4---异常处理

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------       异常是Java技...
  • bjtu_ty
  • bjtu_ty
  • 2014年03月25日 11:49
  • 366

黑马程序员——java学习笔记--异常

异常 异常时导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失, 所以在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,这样才能保证...

黑马程序员 JAVA学习笔记 ——— 异常

android培训、java培训、期待与您交流!  异常是什么? 是对问题的描述。将问题进行对象的封装。 也就是说将问题出在哪里告诉编写者的一样东西。 异常类的体系: java.lan...
  • Dunamis
  • Dunamis
  • 2014年05月16日 15:20
  • 145

黑马程序员_笔记十_异常的捕获及处理

----------android培训、java培训期待与您交流!---------- 异常的基本概念 异常是导致程序中断运行的一种指令流,如果部队异常进行正确的处理,则可能导致程序的中断执行,造...
  • zlfjxs
  • zlfjxs
  • 2014年05月19日 10:55
  • 224

黑马程序员------毕老师视频笔记第九天------面向对象(异常上)

一.概述 先直观感受一下 定义 int a = 4/0;
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员--自学笔记--异常
举报原因:
原因补充:

(最多只允许输入30个字)