黑马程序员Java面向对象——异常
来源:互联网 发布:linux nc 测试端口 编辑:程序博客网 时间:2024/05/22 00:37
¥异常
异常就是在程序运行时出现不正常情况。
1 异常的由来:问题也是现实生活中一个具体的事物。也可以通过java的类的形式进行描述,并封装成对象。
其实就是java对不正常情况进行描述后的对象体现。
异常将正常的代码和问题处理代码分离。方便于阅读。
对于问题的划分,两种:一种是严重的问题,一种非严重的问题。
对于严重的,java通过Error类进行描述。
对于error一般不编写针对性的代码对其进行处理。
对于非严重的,java通过Exception类进行描述。
对于Exception可以使用针对性的处理方式进行处理。
无论error 或者exception都具有一些共性内容。
比如:不正常情况的信息,引发原因等。
异常体系:
Throwable
|-------Error
|-------Exception
|-------RuntimeException
简单写了基本还有好多·····
2 异常的处理。
Java提供了特有的语句进行处理。
格式1:
Try
{
需要被检测的代码;
}
Catch(异常类 变量)
{
处理异常的代码:(处理方式)
}
Finally
{
一定会执行的语句
}
格式2:
Try
{
需要被检测的代码;
}
Catch(异常类 变量)
{
处理异常的代码:(处理方式)
}
格式3:
Try
{
需要被检测的代码;
}
Finally
{
一定会执行的语句
}
//记住:catch是用于处理异常,如果没有catch就代表异常没有没处理掉,如果该异常是检测异常要声明。
例题:
class Demo{ int dvs(int a ,intb){ return a/b;}}class ExceptionDemo { public static void main(String[] args) { /*最开始的语句 Demo d =newDemo(); intx=d.dvs(4,0); System.out.println("x="+x);*/ Demo d= new Demo(); try{ int x=d.dvs(4,0); System.out.println("x="+x); } catch (Exception A) { System.out.println("除数不为0"); System.out.println(A.getMessage());// / by zero; System.out.println(A.toString());//异常名称:异常信息。 A.printStackTrace();//异常名称,异常信息。异常出现的位置。 //其实JVM异常处理机制默认就是printStackTrace方法 //打印异常的堆栈的跟踪信息。 }
3. 对捕获到的异常对象进行常见方法操作。
getMessage();//获取异常的信息。
toString();//异常名称:异常信息。
printStackTrace();//异常名称,异常信息。异常出现的位置。
//其实JVM异常处理机制默认就是printStackTrace方法
//打印异常的堆栈的跟踪信息。
在函数上声明异常。便于提高安全性,让调用出进行处理,不处理编译失败。
对多异常的处理
1 声明异常时,建议声明为具体的异常,这样处理的可以更有针对性。
如例句:
int Div(int a,intb)throws ArithmeticException, ArrayIndexOutOfBoundsException// 在功能上通过throws的关键字声明该功能有可能出现问题。
2. 对方声明几个异常,就对应有几个catch块。如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
建议在进行catch处理时,catch一定要定义具体处理方式,不要简单定义一句e.printStackTrace(),也不要简单的书写一条输出语句。
当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。如例题
try
{
throw newAException();
}
catch(AExeception a)
{
throw a;
}
如果该异常处理不了,但并不属于该功能出现的异常。
可以将异常转换后,再抛出和该功能相当异常。
或者异常可以处理,当需要将异常产生的和本功能相当的问题提供出去。
当调用者知道,并处理,也可以将捕获异常处理后,转换新的异常。如下例题
try
{
throw new AException();
}
catch (AException a)
{
throw new BException();
}
比如银行转账例子
自定义异常
1 当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。
要么在内部try catch处理。
要么在函数上声明让调用者处理。
简明一句话:一般情况下,函数内出现异常,函数上需要声明。
2 自定义异常:
必须是自定义类继承Exception。或者RuntimeException
1为了让该自定义类具备可抛性。
2让该类具备操作异常的共性方法。
当要定义自定义异常的信息时,可以使用父类已经定义好的功能。
classMyException excends Exception
{
MyException(String message)
{
super(message);
}
}
继承Exception原因:
异常体系有一个特点:因为异常类和异常对象需要被抛出。
他么都具备可抛性。这个可抛性是Throwable这个体系中独有特点。
只有这个体系中的类和对象才可以被throw和throws操作。
3 throws和throw的区别
throws使用在函数上
throw使用在函数内
throws后面跟的是异常类,可以跟多个,用逗号隔开
throw后面跟的是异常对象。
注意:throw单独执行对象完毕,后面不要再加语句。因为执行不到。就像return后面不加语句一样。
RuntimeExceptiony异常
1 Exception中有一个特殊的子类异常RuntimeException运行时异常。
如果在函数内容抛出该异常,函数上可以不用声明。编译一样通过。
如果在函数上声明该异常,调用者可以不用进行处理,编译一样通过。
2 之所以不用在函数声明,是因为不需要让调用者处理。
当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。
3 自定义异常时:如果该异常的发生,无法在继续进行运算,
就让自定义异常继承RuntimeException。
4 对于异常分两种:
(1)编译时被检测的异常。
(2)编译时不被检测的异常(运行时异常,RuntimeException以及其子类)
// 下面为另外一个RuntimeException例子
class FuShuException extends RuntimeException{ FuShuException(String message){ super(message); }}class Demo{ int Div(int a,int b){ if(b<0) throw new FuShuException("出现了除数为负数"); if(b==0) throw new ArithmeticException("被零整除啦"); return a/b; }}class ExceptionDemo5{ public static void main(String[] args) { Demo d = new Demo(); int x = d.Div(4,-1); System.out.println(x); }}
Finally最终都会执行的语句(一定要记住这条哦)
假设:
class NoException
{
}
public void method()throws NoEception
{
连接数据库;
数据操作://shrow new SQLException();
关闭数据库://该动作,无论数据操作是否成功,一定要关闭资源。
}
try
{
连接数据库;
数据操作:
}
catch(SQlEception a)
{
会对数据库进行一次处理;
throw new NoException();
//抛出对外暴露可以识别的另外一个错误.
//比方说外部的销售科员要拿货这里的catch是仓
//库员处理的内容,他要处理货物的事情,因为销//售员只要知道有没有货,其他不是他的工作范
//围,那么catch仓库员就只抛出一个问题:就是
//告知销售员没货的问题就可以了。这就叫问题的封装
}
finally
{
关闭数据库
}
Finally代码块:定义一定执行的代码。通常用于关闭资源。
一种情况会执行不到就是在catch语句中定义了
System.exit(0); //属于系统退出。执行不到finally咯
异常在子父类覆盖中的体现。
1, 子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。或者不抛。(只延续父类或者有关父类的zi问题。)
2, 如果父类抛出多个异常,那么子类在覆盖方法时,只能抛出父类异常的子集。(只要父类有)
3, 如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时也不可以抛出异常, 日过子类方法发生了异常,就必须得try啦。决定不能抛。
应用题:
/*有一个圆形和长方形,都可以获取面积,对于面积如果出现非法的数值,视为是获取面积出现问题。问题用异常表示现在对这个程序进行基本设计*/ class NovalueException extends RuntimeException//原本继承Exception{ NovalueException(Stringmessage){ super(message); } } interface Shape{ void getArea();} class Rec implements Shape { private intlen,wid; Rec(int len,intwid)//throws NovalueException//throws NovalueException之前没有RuntimeException需要加的 { if(len<=0|| wid<=0) thrownew NovalueException("非法数值"); this.len=len; this.wid=wid; } public void getArea() { System.out.println(len*wid); }}class Circle implements Shape{ private int radius; public static finaldouble PI =3.14; Circle(int radius) { if(radius<=0) throw new NovalueException("数值非法");//RuntimeException("数值非法");不如自定义的好 this.radius =radius; } public void getArea() { System.out.println(radius*radius*PI); }}class ExceptionDemo{ public static voidmain(String[] args) { /*最开始的句子 try { Recr=new Rec(2,5); r.getArea(); } catch(NovalueException a) { System.out.println(a.toString()); } */ Rec r=new Rec(2,5); r.getArea(); Circle c=new Circle(-6); c.getArea(); System.out.println("程序结束"); }}
---------------------- 黑马程序员 Android培训、期待与您交流! ----------------------
- 黑马程序员——【Java】面向对象——异常
- 黑马程序员——java面向对象和异常
- 黑马程序员——java面向对象(异常篇)
- 黑马程序员 Java面向对象——异常
- 黑马程序员Java面向对象——异常
- 黑马程序员 Java面向对象——异常
- 黑马程序员---------Java面向对象——异常总结
- 黑马程序员——Java 面向对象_异常
- 黑马程序员——面向对象--异常
- 黑马程序员——面向对象-异常
- 黑马程序员_面向对象—>异常
- 黑马程序员 Java面向对象(异常)
- 黑马程序员--JAVA<面向对象>--异常
- 黑马程序员 Java面向对象<三> 异常
- 黑马程序员——java面向对象
- 黑马程序员——java:面向对象
- 黑马程序员——Java面向对象
- 黑马程序员——java-面向对象
- Matlab PCA+SVM人脸识别(一)
- IOS_UI_day5_UIScrollView+代理设计模式+键盘
- 小数转换成百分数,以及前台中颜色的控制
- 理解 javascript 中的 构造函数 原型对象 实例对象 之前的关系
- Extjs学习笔记之三 extjs form更多的表单项
- 黑马程序员Java面向对象——异常
- 读书
- TCP/IP SOCKET HTTP
- mysql错误 Every derived table must have its own alias
- Python - 将window 窗口操作过程包装成脚本函数可被调用
- 在JAVA中线程到底起到什么作用
- 智能手机出现数据丢失该怎么办
- leetcode:Word Ladder
- jQuery 1.7 RC1发布 为正式发布大幅更新