黑马程序员 异常
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>、期待与您交流! ----------------------
相关文章推荐
- 黑马程序员----,编译异常,运行异常。自定义异常,IO流技术,分类,
- 黑马程序员 Java基础 异常
- 黑马程序员-异常小结
- 黑马程序员 异常
- 《黑马程序员》java笔记->【03.2.1】关于异常
- 黑马程序员—接口,异常,包
- 黑马程序员--Java笔记07--异常
- 黑马程序员_Java基础_面向对象(异常2、练习题、导包)
- 黑马程序员-java基础-并发修改异常产生的原因和解决方案
- 黑马程序员--自学笔记--异常
- 黑马程序员_java中的异常
- 黑马程序员---异常finally
- 黑马程序员-----字符流异常简单处理(黑马视频)
- 黑马程序员—javaSE—异常
- 黑马程序员——关于常量、枚举、结构、异常的总结笔记
- 黑马程序员 五、异常处理和常用类)
- 黑马程序员----C#中的流程控制语句之异常处理语句
- 黑马程序员——JAVA学习笔记五(异常)
- 黑马程序员--异常
- 黑马程序员——第十篇:异常处理、File类