Java基础 快速学习(四)

来源:互联网 发布:3ds淘宝哪家 编辑:程序博客网 时间:2024/06/06 21:16

注意:本系列博客是在作者已经有一年多的C++经验的基础上学习Java的个人总结,可能并不适合所有看到这篇博客的童鞋

异常机制


1.异常

Java的异常分为一下几种

  1. 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
  2. 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
  3. 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

2.抛出异常及捕获异常

先看代码示例:

/*login.java*/package exception1;public class login{String ac;String password;int code;public void setAc(String ac){this.ac = ac;}public void setPassword(String password){this.password = password;}public void setCode(int code){this.code = code;}public int Loin() throws Exception  //使用throws声明   {if (ac.length()>5){throw new Exception("你输入的用户名太长了");    //抛出异常}if (password.length()<8){throw new Exception("密码不可以小于8位");     //抛出异常}System.out.println("登陆成功");return 0;}}
/*my.java*/package exception1;public class my{public static void main(String[] args){login h = new login();h.setAc("cdd");h.setPassword("123");h.setCode(1235);try // 捕获异常{h.Loin();} catch (Exception e) // 处理异常{System.out.println(e.getMessage());return;} finally    //该语句块总是被调用执行     常用来作清理工作    {System.out.println("本次服务结束");}return;}}
【1】所有的异常类是从 java.lang.Exception 类继承的子类。

【2】使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。使用 throw 关键字抛出一个异常。

【3】使用 try 和 catch 关键字可以捕获异常。语法如下:

try{   // 程序代码}catch(ExceptionName e1){   //Catch 块}
【4】finally 关键字用来创建在 try 代码块后面执行的代码块。无论是否发生异常,finally 代码块中的代码总会被执行。在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。需要注意的是finally不执行的情况:JVM 过早终止(调用 System.exit(int));在 finally 块中抛出一个未处理的异常。

【5】 Throws抛出异常的规则:
1) 如果是不可查异常(unchecked exception),即Error、RuntimeException或它们的子类,那么可以不使用throws关键字来声明要抛出的异常,编译仍能顺利通过,但在运行时会被系统抛出。

 2)必须声明方法可抛出的任何可查异常(checked exception)。即如果一个方法可能出现受可查异常,要么用try-catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误

3)仅当抛出了异常,该方法的调用者才必须处理或者重新抛出该异常。当方法的调用者无力处理该异常的时候,应该继续抛出,而不是不处理。
4)调用方法必须遵循任何可查异常的处理和声明规则。若覆盖一个方法,则不能声明与覆盖方法不同的异常。声明的任何异常必须是被覆盖方法所声明异常的同类或子类。

3.自定义异常与多重捕获

用户自定义异常类,只需继承Exception类即可。看下面的示例代码:

/*Ac_Exception.java*/package exception1;public class Ac_Exception extends Exception{public Ac_Exception(int id){this.id=id;}private int id;@Overridepublic String getMessage(){return "错误:账户输入错误    ,错误代码 "+id;}}
/*login。java*/package exception1;public class login{String ac;String password;int code;public void setAc(String ac){this.ac = ac;}public void setPassword(String password){this.password = password;}public void setCode(int code){this.code = code;}public int Loin() throws Exception,Ac_Exception  //使用throws声明   {if (ac.length()>5){throw new Ac_Exception(10);    //抛出自定义异常}if (password.length()<8){throw new Exception("密码不可以小于8位");     //抛出异常}System.out.println("登陆成功");return 0;}}
/*my.java*/package exception1;public class my{public static void main(String[] args){login h = new login();h.setAc("cddasdas");h.setPassword("123");h.setCode(1235);try // 捕获异常{h.Loin();} catch (Ac_Exception e)  //处理自定义异常{System.out.println(e.getMessage());} catch (Exception e) //因为自定义异常继承与Exception 所以它放在最后边,否则回直接拦截他后边的异常{System.out.println(e.getMessage());return;} finally // 该语句块总是被调用执行 常用来作清理工作{System.out.println("本次服务结束");}return;}}

4.异常方法

1 public String getMessage()
返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。


2 public Throwable getCause()
返回一个Throwable 对象代表异常原因。


3 public String toString()
使用getMessage()的结果返回类的串级名字。


4 public void printStackTrace()
打印toString()结果和栈层次到System.err,即错误输出流。


5 public StackTraceElement [] getStackTrace()
返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。


6 public Throwable fillInStackTrace()
用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中。


5.Java 内置异常类

  1、 java.lang.ArrayIndexOutOfBoundsException
    数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。


   2、java.lang.ArithmeticException
    算术条件异常。譬如:整数除零等。


   3、java.lang.NullPointerException
   空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属       性、计算null对象的长度、使用throw语句抛出null等等



----------------------------------------------------------------
本系列文章:
  • Java基础 快速学习(一)
  • Java基础 快速学习(二)
  • Java基础 快速学习(三)
  • Java基础 快速学习(四)
  • Java基础 快速学习(五)

我的个人网站 http://www.breeziness.cn/ 
我的CSDN   http://blog.csdn.net/qq_33775402

转载请注明出处 小风code   www.breeziness.cn




原创粉丝点击