黑马程序员_面向对象(3)_(异常)
来源:互联网 发布:淘宝开旗舰店费用 编辑:程序博客网 时间:2024/06/05 15:42
------- android培训、java培训、期待与您交流! ----------
异常:就是程序在运行时出现的不正常情况
异常由来:问题也是现实生活中的一个具体事物,也可以通过java的类的形式
进行描述,并封装为对象。其实就是java对不正常情况进行描述后的对象体现。
对于问题的划分:两种:一种是严重的问题,一种是非严重问题。对于严重的,java通过Error类进行描述。
对于Error一般不编写针对性代码对其进行处理。对于非严重的,java通过Exception类进行描述。
对于Exception可以使用针对性的处理方式进行处理。因为项目中会出现特有的问题:
而这些问题并未被java所描述并封装成对象, 所以对于这些特有的问题可以按照java的对问题封装的思想。
将特有的问题,进行自定义的异常封装。
自定义异常。(必须是继承Exception类)
需求:在本程序中,除数是负数也无法进行运算,那么久需要对这个问题进行自定义的
描述。
自己定义的异常java虚拟机不认识,只能手动抛出。当在函数内部出现了throw抛出异常对象,那么必须要给对应的处理动作
要么在内部try catch处理。要么在函数上声明让调用者处理。
继承Exception的原因:
异常体系有一个特点,因为异常类以及异常对象都会被抛出,他们都具备可抛性
这个可抛性是Throwable这个体系独有的特点,只有这个体系中的类和对象才可以被throws
和throw操作。
class FushuException extends Exception{private String msg;FushuException(String msg){this.msg=msg;}public String getMessage(){return msg;}//因为父类把这些都做完了,子类只要传入一个String类型的异常信息就可以了//FushuException(String msg){//super(msg)}}class Demo01{int div(int a,int b)throws FushuException{if(b<0)throw new FushuException("出现了除数是负数的情况了");//手动通过关键字throw抛出异常。return a/b;}}public class ExceptionDemo01 {public static void main(String[] args) {Demo01 d=new Demo01();try{int x=d.div(4,-1);System.out.println("x="+x);}catch(FushuException e){System.out.println(e.toString());System.out.println("除数出现负数");}}}
异常体系:
Throwable
|--Error
|--Exception
|--RuntimeException
异常体系中的特点:异常体系中的所有类以及建立的对象都具备可抛。
也就是说可以被throw和throws关键字所操作
只有异常体系具备这个特点
-----------------------------
throw和throws的用法
throw定义在函数内,用于抛出异常对象。
throws定义在函数上,用于抛出异常类,可以抛出多个,用逗号隔开。
当函数内容有throw抛出异常对象,并未进行try处理,必须要在函数上声明,都在编译失败。
注意:RuntimeException 除外。也就是说,函数内如果抛出了该异常,函数上可以不申明。
如果函数声明了异常,调用者需要进行处理,处理方法可以throws可以try
异常有两种:
编译时受检测异常
该异常在编译时,如果没有处理(没有抛也没有try)编译失败
该异常被表示,代表着可以被处理。
运行时异常(编译时不检测)
在编译时,不需要处理,编译器不检查。
该异常的发生,建议不处理,让程序停止,需要对代码进行修正。
注意:
1.finally中定义的通常是 关闭资源的代码,因为资源必须释放。
2.finally只有一种情况下不会执行,当执行到System.exit(0);finally不会执行。
异常的好处:
1.将问题进行封装。
2.将正常流程代码和问题处理代码相分离,方便与阅读。
异常的处理原则:
1.处理方式有两种:try 或者 throws.
2.调用到抛出异常的功能时,抛出几个,,就处理几个。
一个try对应多个catch
3.多个catch时,父类的catchh往下放。
4.catch内,需要针对性的处理方式。不要简单的定义printStackTrack,输出语句,也不要不写。。
当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。
class NoValueException extends RuntimeException{NoValueException(String msg){super(msg);}}interface Sha{void getArea();}class Rec implements Sha{private int len,wid;Rec(int len ,int wid)throws NoValueException{if(len<=0||wid<=0)throw new NoValueException("出现负数了");this.len=len;this.wid=wid;}public void getArea(){System.out.println(len*wid);}}class Cic extends RuntimeException{private int radius;public static final double PI=3.14;Cic(int radius){this.radius=radius;}public void getArea(){if(radius<=0)throw new RuntimeException("出现负数了!");System.out.println(radius*radius*PI);}}public class ExceptionDemo02 {public static void main(String[] args) {try{//上面如果是RuntimeException则不用进行try catch处理。Rec r=new Rec(-3,4);r.getArea();}catch(Exception e){System.out.println(e.toString());}finally{System.out.println("over1");}System.out.println("over2");}}
- 黑马程序员_面向对象(3)_(异常)
- 黑马程序员_面向对象—>异常
- 黑马程序员_java_面向对象_异常
- 黑马程序员_面向对象(异常)
- 黑马程序员_面向对象(3) 异常处理机制
- 黑马程序员_面向对象(三)_异常
- 黑马程序员_面向对象_异常&内部类
- 黑马程序员_面向对象(三)_异常
- 黑马程序员_面向对象3_(异常Exception、包package、String类、StringBuffer类)
- 黑马程序员_面向对象(3)
- 黑马程序员_面向对象(3)
- 黑马程序员_面向对象(3)
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- POJ 2975 Nim(nim博弈)
- ORACLE 创建和管理表
- 梯度下降(Gradient Descent)
- 拓扑排序模板
- 深入浅出ShellExecute
- 黑马程序员_面向对象(3)_(异常)
- SwipeRefreshLayout实现下拉刷新、上拉加载更多功能
- c/C++程序占用的内存部分
- XMLConfig
- Kth Largest Element in an Array
- hdu5391 Zball in Tina Town
- char、char*、char**数组
- Linux BSP开发指导
- 关于mysql中文字符编码设置的解决办法