您的位置:首页 > 其它

【异常的基本概念】_异常的其他概念笔记`

2013-01-09 16:29 232 查看
【异常的基本概念】_异常的其他概念笔记`

本章目标:

掌握:throws与throw关键字的作用

掌握Exception与RuntimeException的区别

可以自定义异常类

了解断言的作用及应用

throws关键字

使用throws声明的方法表示此方法不处理异常,而是交给方法的调用处进行处理。

class Math{
    public int div(int i,int j)throws Exception{
        int temp = i/j;
        return temp;    
    }
}
public class ThrowsDemo01{
    public static void main(String[] args){
        Math m = new Math();        //实例化Math类对象
        System.out.println("除法操作:"+m.div(10,2));
    }
}


编译时错误:

unreported exception java.lang.Exception;must be caught or declared to be thrown

class Math{
    public int div(int i,int j)throws Exception{
        int temp = i/j;
        return temp;    
    }
}
public class ThrowsDemo01{
    public static void main(String[] args){
        Math m = new Math();        //实例化Math类对象
        try{
            System.out.println("除法操作:"+m.div(10,2));
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}


如果现在连主方法的声明上也使用了throws关键字呢?那么是不是就意味着主方法也可以不处理异常了?

class Math{
    public int div(int i,int j)throws Exception{
        int temp = i/j;
        return temp;    
    }
}
public class ThrowsDemo01{
    public static void main(String[] args)throws Exception{
        Math m = new Math();        //实例化Math类对象
        try{
            System.out.println("除法操作:"+m.div(10,2));
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}


3.1.2 throw关键字

throw关键字的作用是在程序中抛出一个异常。抛出的时候抛出的是一个异常类的实例化对象。

在异常的处理中,try语句中要捕获的是一个异常的对象,那么此异常对象也可以自己抛出。

public class ThrowDemo02{
    public static void main(String[] args){
        try{
            throw new Exception("自己抛着玩的。");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}


3.1.3范例:throw与throws的应用

在一般开发中try...catch...finally、throw、throws联合使用的情况是最多的,例如以下的代码:

class Math{
    public int div(int i;int j)throws Exception{
        System.out.println("****计算开始****");
        int temp = 0;    //定义局部变量
        try{
            temp = i/j;    //计算,但是此处有可能出现异常        
        }catch(Exception e){
            throw e;
        }finally{
            System.out.println("****计算结束****");
        }    
        return temp;
    }
}
public class ThrowDemo03{
    public static void main(String[] args){
        Math m = new Math();
        try{
            System.out.println("除法操作:"+m.div(10,0));
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}


3.2 、Exception 与 RuntimeException的区别

public class RuntimeExceptionDemo01{
    public static void main(String[] args){
        String str = "123";
        int temp = Integer.parseInt(str);
        System.out.println(temp);
    }
}


parseInt()方法的定义格式

public static int parseInt(String s)throws NumberFormatException

此处使用了throws关键字抛出了异常,为什么不用处理,编译也可能通过?

Exception 与 RuntimeException 的区别

这两个类的区别如下:

Exception 在程序中必须使用try...catch进行处理

RuntimeException 可以不使用try...catch进行处理,但是如果有异常产生,则异常将由JVM进行处理

Exception

RuntimeException

IllegalArgumentException

NumberFormatException

3.3自定义异常类

只需要继承Exception就可以完成自定义异常类。因为在J***A提供的都是标准异常类,如果需要定义自己想要的异常信息的时候就可以自定义异常类。

只要直接继承Exception 类即可

class MyException extends Exception{//自定义异常类,继承Exception 类
    public MyException(String msg){
        super(msg);    //调用Exception 类中有一个参数的构造方法,传递错误信息
    }
}
public class DefaultException{
    public static void main(String[] args){
        try{
            throw new MyException("自定义异常");            
        }catch(Excepton e){
            e.printStackTrace();
        }    
    }
}


一般如果项目很大的时候有可能自定义异常,可以得到一些准确的信息等等

3.4断言(assert)

在JDK1.4之后,系统增加了断言的功能。就是断定某一个操作的结果肯定是正确的,如果程序执行到出现断言语句的时候发现结果不正确了,则会出现错误的信息。

断言格式: assert boolean 表达式;

assert boolean 表达式:详细信息;

public class Test{
    public static void main(String args[]){
        int[] x = {1,2,3};    //定义数组,长度为3
        assert x.length==0;    //此处断言数组的长度为0
    }
}


断言本身不会影响程序的执行,但是如果要想让一个断言起作用,则必须对断言进行验证。

-enableassertions ->可以简写为-ea

下面验证程序

java -ea Test.java

出现错误:Exception in Thread "main" java.lang.AssertionError

此断言信息为默认J***A提供,如果觉得不满意,也可以自己设置错误的信息。

public class Test{
    public static void main(String args[]){
        int[] x = {1,2,3};
        assert x.length==0:"数组长度不为0";    //此处断言数组的长度为0    
    }
}


此时,再进行断言验证

D:\expdemo>java -ea Test

Exception in thread "java.lang.AssertionError 数组长度不为0"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: