本帖最后由 传奇查 于 2015-11-18 17:10 编辑
对你有用就给个鼓励奖吧~
异常的概述:
- package cn.fuxi.exception;
- /**
- * 异常的体系
- * 异常:是在运行时期发生的不正常情况.
- * 在java中用类的形式对不正常情况经行了描述和封装对象.描述不正常的情况的类,就称为异常类.
- * 1.以前是正常流程代码和问题处理代码相结合,现在将正常流程代码和问题处理代码分离,提高阅读性.
- * 2.其实异常就是java通过面向对象的思想将问题封装成了对象,用异常类对其进行描述.
- * 3.不同的问题用不同的类进行具体的描述.比如角标越界...空指针异常等等.
- * 4.问题很多,意味着描述的类很多,将其共性经行向上抽取,形成了异常体系.
- *
- * 不正常情况分成了两大类:
- * Throwable:无论是error,还是异常问题,发生就可以抛出,让调用者知道并处理.
- * 该体系的特点就再在于Throwable及其所有的子类都具有可抛性.
- *
- * 可抛性到底指的是什么?怎么体现?
- * 其实是通过两个关键字来体现的:throws throw
- * 凡是可以被这两个关键字所操作的类和对象都具备可抛性.
- *
- * 1.一般不可处理的:Error
- * 特点:是由jvm抛出符严重性问题.
- * 这种问题发生,一般不针对性处理,直接修改程序.
- * 2.可以处理的:Exception
- * 该体系的特点:
- * 子类的后缀名都是用其父类名作为后缀,阅读性很强.
- *
- * Throwable中的方法:
- * 1.getMessage():获取异常信息,返回字符串.
- * 2.toString():获取异常类名和异常信息,返回字符串.
- * 3.printStackTrace():获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void.
- * 4.printStackTrace(PrintStream s):通常用该方法将异常内容保存在日志文件中,以便查询.
- */
- class Demo{
- public static int method(int[] arr,int index){
- if(arr==null){
- throw new NullPointerException("数组的引用不能为空!");
- }
- if(index >=arr.length){
- throw new ArrayIndexOutOfBoundsException("数组角标越界:"+index);
- }
- return arr[index];
- }
- }
- public class ExceptionDemo {
- public static void main(String[] args) {
- int[] arr = new int[3];
- Demo.method(arr, 30);
- }
- }
复制代码 运行结果:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 数组角标越界:30
at cn.fuxi.exception.Demo.method(ExceptionDemo.java:38)
at cn.fuxi.exception.ExceptionDemo.main(ExceptionDemo.java:47)
自定义异常:
- package cn.fuxi.exception;
- /**
- * 自定义异常
- * 可以自定义出的异常为自定义异常.
- * 对于角标为负数的情况,可以用负数角标异常来表示,负数角标这种异常在java中并没有定义过.
- * 那就按照java异常的创建思想,面向对象,将负数角标经行自定义描述,并封装成对象.
- * 这种自定义的问题描述称为自定义异常.
- *
- * P.S.如果让一个类称为异常类,必须要继承异常体系,因为只有称为异常体系的子类才有资格具备可抛性,
- * 才可以被两个关键字所操作:throws throw.
- *
- * 自定义类继承Exception或者其子类,通过构造函数定义异常信息
- */
- class DemoException extends Exception{
- DemoException(String message){
- super(message);
- }
- }
- /*
- *通过throw将自定义异常抛出.
- *throws和throw的区别
- *1.throws用于标识函数暴露出来的异常类,并且可以抛出多个,用逗号分隔.throw用于抛出异常对象.
- *2.throws用在函数上,后面跟异常类名.throws用在函数内,后面跟异常对象.
- *
- * 定义功能方法时,需要把出现的问题暴露出来让调用者去处理,那么久通过throws在函数上标识.
- */
- class FuShuIndexException extends Exception{
- FuShuIndexException(){}
- FuShuIndexException(String msg){
- super(msg);
- }
- }
- class Demo2{
- public static int method(int[] arr,int index) throws FuShuIndexException {
- if(index<0){
- throw new FuShuIndexException("数组的角标是负数");
- }
- return arr[index];
- }
- }
- public class ExceptionDemo2 {
- public static void main(String[] args) throws FuShuIndexException {
- int[] arr = new int[5];
- Demo2.method(arr, -6);
- }
- }
复制代码 运行结果:
Exception in thread "main" cn.fuxi.exception.FuShuIndexException: 数组的角标是负数
at cn.fuxi.exception.Demo2.method(ExceptionDemo2.java:37)
at cn.fuxi.exception.ExceptionDemo2.main(ExceptionDemo2.java:46)
异常的分类:
- package cn.fuxi.exception;
- /**
- * 异常的分类:
- * 1.编译时被检测异常:只要是Exception和其子类都是,初二了特殊子类RuntimeExc体系.
- * 这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应的处理方式.
- * 这样的问题都可以针对性的处理.
- *
- * 2.编译时不检测异常(运行时异常):就是Exception中的RuntimeException和其子类.
- * 这种问题的发生,无法让功能继续,运算无法运行,更多是因为调用的原因导致的或者引发了内
- * 部状态的改变导致的.
- * 那么这种问题一般不处理,直接编译通过,在运行时,让调用者调用时的程序强制停止,让调用者
- * 对对代码经行调整.
- * 所以自定义异常时,要么继承Exception,要么继承RuntimeException.
- */
- class FuShuIndexException2 extends RuntimeException{
- FuShuIndexException2(){}
- FuShuIndexException2(String msg){
- super(msg);
- }
- }
- class Demo3{
- public static int method(int[] arr,int index){//RuntimeException 不需要用throws抛出
- if(index < 0){
- throw new FuShuIndexException2("数组的角标是负数啦!");
- }
- return arr[index];
- }
- }
- public class ExceptionDemo3 {
- public static void main(String[] args) {
- int[] arr = new int[5];
- Demo3.method(arr, -9);
- }
- }
- /*
- *P.S.RuntimeException是那些可能在java虚拟机正常运行期抛出的异常的超类.
- *可能在执行方法期间抛出当未被捕获的RuntimeException的任何子类都无需再throws子句中进行声明.
- */
复制代码 运行结果:
Exception in thread "main" cn.fuxi.exception.FuShuIndexException2: 数组的角标是负数啦!
at cn.fuxi.exception.Demo3.method(ExceptionDemo3.java:24)
at cn.fuxi.exception.ExceptionDemo3.main(ExceptionDemo3.java:33)
发现一张贴写不完啦~好吧!我错了!!异常的捕捉、处理、案列---->后续请看↓↓↓↓↓↓
对你有用就给个鼓励奖吧~~
|
|