Java基础 快速学习(四)
来源:互联网 发布:3ds淘宝哪家 编辑:程序博客网 时间:2024/06/06 21:16
注意:本系列博客是在作者已经有一年多的C++经验的基础上学习Java的个人总结,可能并不适合所有看到这篇博客的童鞋
异常机制
1.异常
Java的异常分为一下几种
- 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
- 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
- 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
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基础 快速学习(五)
转载请注明出处 小风code www.breeziness.cn
- Java基础 快速学习(四)
- Java基础学习(四)
- java基础学习四
- java学习记录----java基础(四)
- Java基础 快速学习(一)
- Java基础 快速学习(二)
- Java基础 快速学习(三)
- Java基础 快速学习(五)
- Java基础学习笔记(四)容器
- java基础语法学习笔记(四)
- java基础学习四(数组)
- 学习笔记---Java基础语句(四)
- Java基础-学习笔记(四)
- 零基础学习java(四)
- Java基础学习笔记:(四)数组
- Java语言基础学习笔记(四)
- JAVA学习笔记(复习)-----5、 JAVA基础(四)
- java基础学习笔记(四)JAVA IO
- JavaBean
- frameset 标签属性参考和简单实例应用
- Java.lang.IllegalArgumentException: already added: 异常解决办法
- js垃圾回收机制
- [YTU]_2575( 交通工具信息)
- Java基础 快速学习(四)
- java并发、多线程知识点
- switch-case中接受的参数类型
- CXF与REST服务实际开发
- linux自动清理日志脚本
- [YTU]_2477( C++习题 抽象基类)
- python)) unknown encoding: cp65001
- 解决ubuntu16.04 you are using pip version 8.1.1,however version 9.0.1 is available问题
- parallel scavenge 与parnew 区别