Java知识总结-异常
来源:互联网 发布:炎黄网络 服务器怎么样 编辑:程序博客网 时间:2024/06/05 10:08
说明:异常多多注语句的使用格式就好。
一,异常类体系介绍
1.异常类体系的父类是Throwable类。其中常见方法有:
方法1:getMessage():返回异常的详细消息,返回值类型String;
package Test;class DemoException extends Exception{DemoException(String message){super(message);}}class Demo{void show(int x)throws DemoException{if(x==0)throw new DemoException("参数错误,不能为零");System.out.println("参数正确");}}public class Test {public static void main(String[] args) {Demo d=new Demo();try {d.show(0);} catch (DemoException e) {System.out.println(e.getMessage());}}}
运行结果:
参数错误,不能为零
方法2:toString():返回异常的简短描述。返回值类型String;
public class Test {public static void main(String[] args) {Demo d=new Demo();try {d.show(0);} catch (DemoException e) {System.out.println(e.toString());}}}
运行结果:
Test.DemoException: 参数错误,不能为零
访法3:printStackTrace():返回异常的全部信息,返回值类型void。
public class Test {public static void main(String[] args) {Demo d=new Demo();try {d.show(0);} catch (DemoException e) {e.printStackTrace();}}}
运行结果:
Test.DemoException: 参数错误,不能为零at Test.Demo.show(Test.java:10)at Test.Test.main(Test.java:18)
以上三个方法都是输出异常的信息,区别在于信息的详细程度不一样。
2.Throwable类有两个子类:Error类,Exception类;
其中Error类用于描述严重问题,这类问题大多程序都不用试图捕获和处理。
Exception类用于描述程序应当捕获并可以进行处理的异常。
这里主要介绍Exception类:
3.自定义异常:
通常自定义异常的格式如下:
class ZiDingYiException extends Exception{ ZiDingYiException(String message){ super(message);}}
通过构造函数,我们可以向异常对象传入信息,并通过前面介绍的Throwable类中的三个方法来获取这些信息。
自定义异常后,就是异常的使用了。当一段程序中可能会出现异常时,就需要对程序进行异常捕捉和处理,如果程序对该异常只是抛出并未处理时,就需要在函数进行异常声明。
例:编写一个方法,功能为打印所传参数的平方数,且要求参数只能是正数,当传入的参数不是正数时,则抛出异常。
class DemoForZiDingYi{ //在方法上声明该方法可能会出现的异常类public void method(int x) throws ZiDingYiException{if(x<=0)//当参数不是正数时,抛出异常对象throw new ZiDingYiException("参数不是正数");System.out.println("所得结果是="+x*x);}}
对一个函数进行异常声明后,表示该函数运行时可能会出现所声明的异常,当用户调用这个函数时,需要对这个异常进行处理(抛出或者捕捉)。
public class Test {public static void main(String[] args) {DemoForZiDingYi d=new DemoForZiDingYi();//捕捉异常try {d.method(-5);} catch (ZiDingYiException e) {//处理异常e.printStackTrace();}}}
当函数调用者也无法处理函数声明中的异常时,可以继续讲异常抛出:
public class Test {public static void main(String[] args) throws ZiDingYiException {DemoForZiDingYi d=new DemoForZiDingYi();d.method(-5);}}
注意:catch代码块中也可以继续抛出异常,当catch代码块中有异常抛出时,也需要在函数上对该异常进行声明,catch捕捉的异常和抛出的异常可以是相同的异常,也可以是不同的异常:
package Test;//自定义A异常class AException extends Exception{AException(String message){super(message);}}//自定义B异常class BException extends Exception{BException(String message){super(message);}}class ClassA{//函数上声明A异常public void show(int x) throws AException{if(x==0)//抛出A异常throw new AException("异常A");}}public class Test {//在函数上声明B异常public static void main(String[] args) throws BException{ClassA a=new ClassA();try {//调用已声明A异常的函数a.show(0);//捕获A异常} catch (AException e) {//处理A异常e.printStackTrace();//抛出B异常 throw new BException("异常B");}}}
4.Exception类体系中有乐意子类型体系:RuntimeException类体系。RuntimeException类和子类异常都是运行时异常,当出现该类异常时,调用者可以不用进行异常处理,并且可以不用在函数上进行异常声明。之所以不用再函数上声明运行时异常,是因为该类通过不需要让调用者处理,当该类异常发生时,希望程序停止,因为运行时异常表示程序出现了无法继续运算的情况,需要停止程序并对代码进行修正。
自定义异常时,如果这个异常发生会使程序无法继续继续运算,就将该异常继承RuntimeException类。让该异常成为一个运行时异常。
//自定义一个RuntimeException异常class DemoException extends RuntimeException{DemoException(String message){super(message);}}class DemoClass{//当函数中抛出RuntimeException异常时,函数上不需要声明public void show(int x){if(x==0)throw new DemoException("参数不能为零");}}public class Test {public static void main(String[] args){DemoClass dc=new DemoClass();//调用一个会抛出RuntimeException异常的函数时,不需要处理异常的语句dc.show(0);}}
5.try{}catch{}finally{}代码块的几种使用形式。
形式1:
try {} catch (Exception e) { }
形式2:
try {} catch (AException e) { } catch (BException e) { } catch (CException e) { }
注:当一个try对应多个catch时,如果这几个异常之间存在继承关系,需要将父类异常放在后面的catch代码块中。
如果将父类异常放在前面的catch中,则后面catch就无法补货子类异常,会出现编译失败。
形式3.
try {} catch (Exception e) { } finally{}
注:finally代码块中的语句一般是必须执行的语句,除非系统停止,否则finally代码块必会执行一次。
形式4.
try {} finally{}
注:这个形式中并没有异常处理。
6.继承中子父类异常。
若一个父类函数中抛出一个异常,当其子类重写该函数时,可以不抛出异常,如果要抛出异常,必须是父类函数异常或者其子异常。
若一个父类函数中抛出多个异常,当其子类重写该函数时,可以不抛出异常,如果要抛出异常,只能是父类函数异常的子集。
若一个父类函数中没有抛出异常,当其子类重写该函数时,也不能抛出异常,如果出现异常,就必须在函数进行try{}catch{}处理。
- Java异常知识总结
- Java知识总结-异常
- 有关Java 异常处理中的知识总结
- 异常知识总结
- Java知识总结(1)——关于异常
- 黑马程序员—Java编程异常知识总结
- java知识总结(十一)异常处理机制
- java 自我知识总结(二十)异常
- JAVA异常知识整理
- java异常小知识
- Java异常知识
- 【Java面试知识】异常
- Java知识(异常)
- Java异常知识整理
- 异常知识总结------------黑马程序员
- Java异常捕获小知识
- Java异常的相关知识
- java知识-自定义异常类
- vector
- JAVA 注释
- 迭代器
- Fedora 19下安装无限网卡驱动(Intel Corporation Wireless 7260 (rev 73))
- 数组
- Java知识总结-异常
- UVa 112 - Tree Summing解题报告
- spy——A - Dinner
- 关键字
- 证书的有效性管理和验证
- spy——B - You are my brother
- gdb 调试 显示内存的方法
- 博客——开题
- spy——C - Time