【黑马程序员】java中的---------------------异常机制
来源:互联网 发布:家装监理必知300 编辑:程序博客网 时间:2024/05/17 03:25
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! -------------------------------------------
异常机制:Throwable
一、定义:就是程序在运行时出现的不正常情况。
导致程序运行失败,称之为异常。
二、异常处理机制
当异常发生错误时,异常处理机制会捕获异常错误信息,并且按照给定的处理方式
进行处理,并且把错误信息返回给调用者,让程序开发人员以便分析与维护
三、异常体系
在java中,描述异常的基类是Throwable类,它所要异常的父类
只有继承这个基类的异常,在这个体系中都具备可抛性
一种;对严重问题java通过Error类进行描述
第二种;对非严重问题java通过Exception类进行描述。
还有就是:对于一些特有的问题,需要需要我们按照java的对象封装思想,将特有问题进行字定义的异常封装
继承Exception类
处理方式:
第一种:在函数上声明Throws抛出或者函数内throw抛出异常对象
区别:
throws是在函数上声明抛出异常
int show(int a,int b)throws Exception//声明异常,并抛出{return a/b;}
throw是在函数内部用来抛出异常对象,且要在函数上声明
int div(int a,int b)throws Exception{if(b<0)//手动抛出自定义异常throw new FushuException("除数出现负数了:"+b);}
第二种:在函数内try{}catch(){}处理
调用者调用到存在异常的函数进行异常处理
class Test{int show(int a,int b)throws Exception//声明异常,并抛出{return a/b;}}//对于Exception等异常,要么抛,要么try处理class ExceptionTest{public static void main(String[] args){Test t=new Test();try{int x=t.show(8,0);System.out.println("x="+x);}catch(Throwable e){System.out.println(e.toString());}System.out.println("程序结束");}}
四、异常处理原则
1. 多个异常声明存在,必须需要多个对应的catch(){ }语句进行处理(一个try对应多个catch)
2. 一个try对应多个catch语句块的时候,要将父类的catch语句块放在最下面,
否则,子类的catch语句块无法执行到,编译失败
3. catch语句块中的异常处理方法,尽可能的有意义,有针对性
不要简单的printStackTrace();异常输出语句,也不要不书写任何语句
4. 当某个异常捕获到之后,无法处理时,可以在catch语句块中抛出
五、自定义异常:
1、自定义异常就是java中异常体系中的异常类没有符合我们在程序开发中发生的异常
这时需要我们自己定义这个特有异常,并且继承Exception类或者RuntimeException类
2、必须继承Exception类或者RuntimeException类,因为只有在Threowable这个体系中才具备可抛性
只有在这个体系中才具备可抛性,具备异常体系中共性方法的操作,
才可以throw和throws操作
//自定义异常class FushuException extends Exception{private int value ;//定义特有变量FushuException(){super();//通过super语句将异常信息传递给父类}FushuException(String msg,int value){super();this.value=value;}public int getValue(){return value;}}class ExceptionTest{int div(int a,int b)throws Exception{if(b<0)//手动抛出自定义异常throw new FushuException("除数出现负数了:"+b);}}class ExceptionDemo{public static void main(String[] args ){ExceptionTest et=new ExceptionTest();try{int x=et.div(5,-9);}catch(FushuException e){System.out.println("错误信息:"+e.message());}}}
六、RuntimeException类:它是运行时异常
1.如果函数内抛出该异常,函数上不要声明,编译通过
2.如果函数上声明了该异常,调用者可以不要处理,编译通过
NumberFormatException字符串转换为数字时。
比如int i= Integer.parseInt(“ab3″);
ArrayIndexOutOfBoundsException:数组越界
比如 int[] a=new int[3]; int b=a[3];
StringIndexOutOfBoundsException:字符串越界
比如 String s=”hello”; char c=s.chatAt(6);
ClassCastException:类型转换错误
比如 Object obj=new Object(); String s=(String)obj;
ArithmeticException:算术错误,典型的就是0作为除数的时候。
IllegalArgumentException:非法参数,在把字符串转换成数字的时候经常出现的一个异常
Catch(){}是用于处理异常,如果没有catch(){}就代表异常未被处理,如果是检测是异常,
函数上必须声明
finally{}语句块:定义一定执行的代码,通常用于关闭资源
除了,finally语句前执行到system.exit(0);
class Test{int show(int a,int b)throws Exception//声明异常,并抛出{return a/b;}}class ExceptionTest{public static void main(String[] args)//对于Exception等异常,要么抛,要么try处理{Test t=new Test();try{int x=t.show(8,0);System.out.println("x="+x);}catch(Throwable e){System.out.println(e.toString());}//system.exit(0);系统退出//finally语句中定义一定执行代码finally{System.out.println("程序结束");}}}
七、异常在继承关系的子父类中的体现:
1.子类覆盖父类时,如果父类中方法抛出异常,那么子类覆盖的方法只能抛出父类异常或者是异常的子类
2.如果父类方法抛出多个异常,子类在覆盖方法时,只能抛出父类异常的子集
3.如果父类或者接口的方法中没有异常抛出,那么子类覆盖父类的方法,也不可以抛出异常,
这时,发生异常只能try{}catch(){}处理,不能抛出
注意:
在throw语句后面不能有语句,因为后面的语句无法执行到。try{//程序抛出异常,导致程序的跳转,下面的语句无法执行到,编译失败throw new ArithmeticException();System.out.println("无法执行读到的语句");}特殊情况:class Test{int show(int a,int b){return a/b;}void mothed()throws Exception//将函数上声明异常表示该函数有可能发生异常{int x= 5/0;throw new Exception();//函数内部抛出异常}}class ExceptionTest{public static void main(String[] args){Test t=new Test();try{//这里调用mothed()方法,此方法内抛出异常,但是编译通过//这种情况有可能发生异常,下面的语句有可能被执行t.mothed();int x=t.show(8,0);System.out.println("x="+x);}catch(Throwable e){System.out.println(e.toString());}//一定可执行语句finally{System.out.println("程序结束");}}}
示例:请看下面代码执行结果class Demo{public static void func ()throws Exception//函数上声明异常{try{throw new Exception();//函数内部抛出异常}finally{System.out.println("B");//一定执行语句}}public static void main(String[] args){try{func();//表示该方法有可能发生异常,下面语句有可能执行System.out.println("A");//编译通过,但是该语句执行不到}catch(Exception e){//异常处理System.out.println("C");}System.out.println("D");}}执行结果:B C D
比较上面的代码:class Demo{public static void func(){try{throw new Exception();//抛出异常,程序跳转到catch语句块System.out.println("A");//无法执行到的语句,编译失败}catch(Exception e){System.out.println("B");}}public static void main(){try{func();}catch(){System.out.println("C");}System.out.println("D");}}
- 【黑马程序员】java中的异常处理机制
- 【黑马程序员】java中的---------------------异常机制
- 黑马程序员——浅谈java中的异常机制
- 黑马程序员——Java中的异常机制总结
- 黑马程序员----java中的异常
- 黑马程序员_java中的异常机制
- 黑马程序员:JAVA异常处理机制
- 黑马程序员---java异常处理机制
- 黑马程序员--Java异常处理机制
- 黑马程序员-Java异常处理机制
- 黑马程序员-java异常处理机制
- 黑马程序员----java异常处理机制
- 黑马程序员-----java异常处理机制
- 黑马程序员-----------JAVA基础-------异常机制
- 黑马程序员-【JAVA基础】-异常处理机制
- 黑马程序员——Java异常机制
- 黑马程序员---Java基础(异常机制)
- 黑马程序员-Java异常处理机制
- Hibernate直接生成MySQL数据库
- IE6:防止Select等元素遮挡弹出Div层
- 用到的sql
- nagios 监控脚本
- 浅谈java web项目在tomcat下的部署经验
- 【黑马程序员】java中的---------------------异常机制
- js:字符串(string)转json .
- 关于html中charset与<title>位置不同页面空白的问题及解决方法
- Vim/Cscope 入门指导
- ASP.NET页面间传值的几种方式
- How to find Domino installation related log files
- Android--AsyncTask异步任务
- struts2标签
- 压缩感知简介