码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员_Throwable_error_Exception

时间:2015-06-09 12:02:40      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:exception   异常   jvm   异常处理   java   

---------     Java培训、Android培训、iOS培训、.Net培训    期待与您交流!  ------
一,概述:

1,异常和错误:Java编译或运行时期发生的不正常行为。运行时除了exception还有error

异常Exception:通常发生的错误可以有针对性的处理方式。

错误error:通常发生后不会有针对性的处理方式,error 的发生通常都是系统级别的问题,都是有jvm所在的系统发生的病反馈给jvm虚拟机的,无法针对性的处理,只能修改代码。
2,异常的分类:
异常分为受查异常和运行时异常,两者都在异常类的层次结构中。
受查异常(checked exceptions),:受查异常,必须被try{}catch捕获,或者在方法签名中,通过throws子句声明。受检查的异常必须在编译被捕获时捕捉处理,命名为CheckedException是因为将AVAV要进行检查,java虚拟机也要进行检查,以确保这个规则得到遵守。
运行时异常(runtime exceptions)需要程序员自己分析代码决定是否捕获和处理,比如 空指针,被0除...
而声明为Error的,则属于严重错误,需要根据业务信息进行特殊处理,Error不需要捕捉。

图例:异常类的继承关系(红色为受查异常,黑色为运行时异常):

技术分享

3,异常发生的细节:

主函数收到异常对象。没有处理,main函数就会继续抛出给调用者jvm,jvm收到问题后,就做出了最终的处理方式,将问题对象中的名称,信息,问题的位置,都显示在屏幕上,让软件使用者知道。同时让程序提前终止。
二,Throwable类:

1,throwable类:
是Java语言中所有错误或异常的超类,只有当对象是此类(或其子类之一)的实例时,才能通过Java虚拟机或者Java throw语句抛出,类似,只有此类或其子类之一才可以是catch子句中的参数类型。

2,方法:
构造方法:
Throwable()  构造一个将null 作为其详细消息的新 throwable。
Throwable(String message,Throwable cause)构造一个带指定详细消息和 cause 的新 throwable。

一般方法:

printStackTrace()   将此 throwable 及其追踪输出至标准错误流。
 getStackTrace()  提供编程访问由printStackTrace() 输出的堆栈跟踪信息。
toString()    返回此 throwable 的简短描述。


3,一些主要子类对应的异常处理功能简要说明如下:

ArithmeticException——由于除数为0引起的异常; 
ArrayStoreException——由于数组存储空间不够引起的异常;     
ClassCastException—一当把一个对象归为某个类,但实际上此对象并不是由这个类 创建的,也不是其子类创建的,则会引起异常; 
IllegalMonitorStateException——监控器状态出错引起的异常;    
NegativeArraySizeException—一数组长度是负数,则产生异常;  
NullPointerException—一程序试图访问一个空的数组中的元素或访问空的对象中的 方法或变量时产生异常;
  当应用程序试图在需要对象的地方使用null时,抛出该异常,这种情况包括:
1,调用null对象的实例方法。
2,访问或修改null对象的字段。
3,将null作为一个数组,获得其长度。
4,将null作为一个数组,访问或修改其时间片。
5,将空作为throwable值抛出。
OutofMemoryException——用new语句创建对象时,如系统无法为其分配内存空 间则产生异常; 
SecurityException——由于访问了不应访问的指针,使安全性出问题而引起异常

IndexOutOfBoundsExcention——由于数组下标越界或字符串访问越界引起异常;用非法索引访问数组时抛出的异常,如果索引为负或大于等于数组大小,则该索引为非法索引。 
IOException——由于文件未找到、未打开或者I/O操作不能进行而引起异常;   
ClassNotFoundException——未找到指定名字的类或接口引起异常;   

CloneNotSupportedException——一程序中的一个对象引用Object类的clone方法,但 此对象并没有连接Cloneable接口,从而引起异常;
InterruptedException—一当一个线程处于等待状态时,另一个线程中断此线程,从 而引起异常,有关线程的内容,将在下一章讲述;     
NoSuchMethodException一所调用的方法未找到,引起异常;   
Illega1AccessExcePtion—一试图访问一个非public方法;     
StringIndexOutOfBoundsException——访问字符串序号越界,引起异常; 
ArrayIdexOutOfBoundsException—一访问数组元素下标越界,引起异常;  
NumberFormatException——字符的UTF代码数据格式有错引起异常;  
IllegalThreadException—一线程调用某个方法而所处状态不适当,引起异常;   
FileNotFoundException——未找到指定文件引起异常;    

EOFException——未完成输入操作即遇文件结束引起异常。

4,异常-finally的使用:
需求:有一些特定的代码无论是否发生异常都需要执行,因为异常会引发程序的跳转,导致有些语句执行不到,无法满足这个要求。异常捕获处理时Java提供的解决方案:try catch  finally语句,finally就是解决这个问题的,finally中存放的代码无论如何都会执行。

注意:有一种情况发生finally代码也会不执行:system。exit();退出jvm。

5,自定义异常:必须是继承throwable类,或者继承throwable的子类。该对象才可以被throw抛出。可抛性:可以被throw关键字操作。

三,try catch;try finally;try catch finally语句:
1,try catch:对代码进行异常检测,并对检测的异常传递给catch处理,异常捕获处理:
void show()//不用throws
{
	try{
		throw new Exception();
	}catch(Exception e){
	
	}
}

2,try finally:对代码进行异常检测,检测到异常后因为没有catch,所以一样会被默认jvm抛出,异常是没有捕获处理的,但是功能所开启资源需要进行关闭,所有finally。只为关闭资源。
void show()//需要throws
{
	try{
		throw new Exception();
	}finally
	{
	
	}
}

3,try catch finally:检测异常,并传递给catch处理,并定义资源释放。
异常在继承或者实现中的使用细节:*****
1,子类覆盖父类方法时,如果父类的方法声明异常,子类只能抛出父类异常或者该异常的子类,或者不声明。
2,当父类方法声明多个异常时,子类覆盖时只能声明多个异常的子集。
3,当被覆盖的方法没有异常声明时,子类覆盖时无法声明异常的。
举例:父类存在这种情况,接口也有这种情况,
问题:接口中没有声明异常,而实现的子类覆盖方法时发生了异常。
无法进行throws声明,只能catch的捕获。万一问题处理不了呢?
catch中继续throw抛出,但是只能将异常转换成runtime异常的子类抛出。
Inteface Inter
		{
			public void show();
		}

		class demo implement Inter 
		{
			public void show(){
				try{
					throw new Exception();	
				}catch(Exception e)
				{
					code.....
					throw new RuntimeException("");//告知调

用者问题所在。 
				}
			}
		}


四,细节:

1,throw和throws区别:
1,throw用在函数内。throws用在函数上。
2,throw抛出的是异常对象,
throws用于进行异常类的声明,后面异常类可以有多个,用逗号隔开。
3,hrows是用来声明一个方法可能抛出的所有异常信息throw则是指抛出的一个具体的异常类型。
4,两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。
5,throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。






黑马程序员_Throwable_error_Exception

标签:exception   异常   jvm   异常处理   java   

原文地址:http://blog.csdn.net/u013233097/article/details/46422417

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!