您的位置:首页 > 职场人生

黑马程序员 异常

2014-06-15 13:23 197 查看
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------


1、——异 常:就是程序在运行时出现不正常情况。

异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述。并封装成对象。

其实就是java对不正常情况进行描述后的对象体现。

对于问题的划分:两种:一种是严重的问题,一种非严重的问题。

对于严重的,java通过Error类进行描述。

对于Error一般不编写针对性的代码对其进行处理。

对与非严重的,java通过Exception类进行描述。

对于Exception可以使用针对性的处理方式进行处理。

2、——异常处理:

java 提供了特有的语句进行处理。

try

{

需要被检测的代码;

}

catch(异常类 变量)

{

处理异常的代码;//(处理方式)

}

finally

{

一定会执行的语句;

}

****************

第一个格式:

try

{

}

catch ()

{

}

第二个格式:

try

{

}

catch ()

{

}

finally

{

}

第三个格式:

try

{

}

finally

{

}

//记住一点:catch是用于处理异常。如果没有catch就代表异常没有被处理过,如果该异常是检测时异常。那么必须声明。

3、——对捕获到的异常对象进行常见(方法):

String getMessage ( ) :获取 “异常信息”。 //(注意是否带返回值?)

String toString ( ) :获取 “异常名称 : 异常信息”

void printStackTrace () :获取”异常名称,异常信息,异常出现的位置”

其实jvm默认的异常处理机制,就是在调用printStackTrace方法//打印异常的堆栈的跟踪信息.;

4——异常声明:【throws】 “ 抛 ”

// throws : “抛”的意思,定义的类可能有异常抛给后面的程序员处理

class Demo

{

int div(int a,int b) throws Exception//通过throws的关键字声明该功能有可能会出现问题。

{

return a/b;

}

}

//如果后面的程序员解决不了此异常,可以再抛给JVM处理,通过在main行后再次做异常声明,( 如:public static void main­(String[] args) throws Exception {} )

【多异常】

int div(int a,int b)throws 1Exception,2Exception

对多异常的处理:

1,声明异常时,建议声明更为具体的异常。这样处理的可以更具体。

2,对方声明几个异常,就对应有几个catch块。不要定义多余的catch块。

如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。

ArithmeticException:算数异常; ArrayIndexOutOfBoundsException:角标越界异常

(ArithmeticException,ArrayIndexOutOfBoundsException二者是Exception的子类)

(建立在进行catch处理时,catch中一定要定义具体处理方式。不要简单定义一句 e.printStackTrace(), 也不要简单的就书写一条输出语句。)

【自定义异常】 ——需继承下

因为项目中会出现特有的问题,

而这些问题并未被java所描述并封装对象。

所以对于这些特有的问题可以按照java的对问题封装的思想。

将特有的问题。进行自定义的异常封装。

1、需求:在本程序中,对于除数是-1,也视为是错误的是无法进行运算的。

那么就需要对这个问题进行自定义的异常描述。

2、当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。

要么在内部try catch处理。

要么在函数上声明让调用者处理。(再次声明“抛出”)

一般情况在,函数内出现异常,函数上需要异常声明。

区别:throws 与 throw

throws : 使用在函数上;后面跟的是异常类、可以跟多个、用逗号隔开。

throw :使用在函数内;后面跟的是异常对象。

【 RuntimeException 】 ——特殊的Exception子类异常

子父类关系:(Exception>>RuntimeException>>ArithmeticException)

特点:RuntimeException下的所有子类都不用异常声明

RuntimeException: 运行时异常。

如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。

如果在函数上声明了该异常。调用者可以不用进行处理(抛或try catch)。编译一样通过;

之所以不用在函数声明,是因为不需要让调用者处理。

当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,程序员对代码进行修正。

class Div

{

public static int div (int a, int b )

{

if (b==0)

throw new ArithmeticException("被零出啦!!!"); //特点在此,函数上可以不用异常声明

int x = a/b;

return x;

}

}

class RuntimeException

{

public static void main (String[] args )

{

int x = Div.div(4,0);

System.out.println(x);

}

}

【】

自定义异常时:如果该异常的发生,无法在继续进行运算,就让自定义异常继承RuntimeException。

【】

对于异常分两种:1,编译时被检测的异常。

2,编译时不被检测的异常 (运行时异常:RuntimeException以及其子类)

(如果程序出现异常时不能处理就继承RuntimeException,如能处理要么抛要么 try)

【 finally 】

finally代码块:定义一定执行的代码。 (通常用于关闭资源)关闭数据库操作

代码示例:

数据库的操作:(连接、数据操作、关闭数据库。)//该动作,无论数据操作是否成功,一定要关闭资源。

public void method( ) throws NoException

{

try

{

连接数据库;

数据操作; //throw new SQLException(); 如果数据库操作异常

}

catch (SQLException e)

{

会对数据库进行异常处理;

throw new NoException() ; //处理完告诉调用者,如提示调用失败

}

finally

{

关闭数据库;

}

}

【】

注意:

1,finally中定义的通常是 关闭资源代码。因为资源必须释放。

2,finally只有一种情况不会执行。当执行到System.exit(0);—系统里面有静态exit退出方法

【】异常在 子父类 覆盖中的体现:

|--A异常

|--B异常

|--C异常

1,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。

2,如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。

3,如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。

如果子类方法发生了异常。就必须要进行try处理。绝对不能抛。

class AException extends Exception //A异常

{}

class BException extends Aexception //B异常,A的子类异常

{}

class CException //C异常

{}

class Fu

{

void show ( ) throws AException

{}

}

class Zi extends Fu

{

void show( ) throws BException //或者抛 AException ,就是不能抛CException;

或者子类什么都不抛

{}

}

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: