码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础-异常

时间:2019-03-13 15:17:36      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:mamicode   break   com   word   http   throw   main   ast   运行环境   

技术图片

异常都是继承自Throwable类。

非检查异常unchecked exception:runtimeexception和error。javac在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常。所以如果愿意,我们可以编写代码处理(使用try…catch…finally)这样的异常,也可以不处理。对于这些异常,我们应该修正代码,而不是去通过异常处理器处理 。这样的异常发生的原因多半是代码写的有问题。如除0错误ArithmeticException,错误的强制类型转换错误ClassCastException,数组索引越界ArrayIndexOutOfBoundsException,使用了空对象NullPointerException等等。

检查异常checked exception:其他异常。javac强制要求程序员为这样的异常做预备处理工作(使用try…catch…finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过。这样的异常一般是由程序的运行环境导致的。如SQLException , IOException,ClassNotFoundException 等。

  处理方法:方法用throws抛出异常

 

注意事项:

当子类重写父类的带有 throws声明的函数时,其throws声明的异常必须在父类异常的可控范围内——用于处理父类的throws方法的异常处理器,必须也适用于子类的这个带throws方法 。这是为了支持多态。

例如,父类方法throws 的是2个异常,子类就不能throws 3个及以上的异常。父类throws IOException,子类就必须throws IOException或者IOException的子类。

 

在 try块中即便有return,break,continue等改变执行流的语句,finally也会执行。

finally中的return 会覆盖 try 或者catch中的返回值。

              public static void main(String[] args)

     {    int result;
        result = foo();
        System.out.println(result);     /////////2
        result = bar();
        System.out.println(result);    /////////2
    }
    public static int foo()
     {   try{
            int a = 5 / 0;
        } catch (Exception e){
            return 1;
        } finally{
            return 2;
        }
    }
    public static int bar()
    {  try {
            return 1;
        }finally {
            return 2;
        }
    }
finally中的return会抑制(消灭)前面try或者catch块中的异常
     publicstaticvoidmain(String[] args)
    {
        int result;
        try{
            result = foo();
            System.out.println(result);           //输出100
        } catch (Exception e){
            System.out.println(e.getMessage());    //没有捕获到异常
        }
        try{
            result  = bar();
            System.out.println(result);           //输出100
        } catch (Exception e){
            System.out.println(e.getMessage());    //没有捕获到异常
        }
    }
    public static int foo() throws Exception
    {
      try {
            int a = 5/0;
            return 1;
        }catch(ArithmeticException amExp) {
            throw new Exception("我将被忽略,因为下面的finally中使用了return");
        }finally {
            return 100;
        }
    }
    public static int bar() throws Exception
    {
        try {
            int a = 5/0;
            return 1;
        }finally {
            return 100;
        }
    }
finally中的异常会覆盖(消灭)前面try或者catch中的异常
publicstaticvoidmain(String[] args)
{          int result;
        try{
            result = foo();
        } catch (Exception e){
            System.out.println(e.getMessage());    //输出:我是finaly中的Exception
        }
        try{
            result  = bar();
        } catch (Exception e){
            System.out.println(e.getMessage());    //输出:我是finaly中的Exception
        }
    }
    public static int foo() throws Exception
    try {
            int a = 5/0;
            return 1;
        }catch(ArithmeticException amExp) {
            throw new Exception("我将被忽略,因为下面的finally中抛出了新的异常");
        }finally {
            throw new Exception("我是finaly中的Exception");
        }
    }
    public static int bar() throws Exception
    {  try {
            int a = 5/0;
            return 1;
        }finally {
            throw new Exception("我是finaly中的Exception");
        }
    }

Java基础-异常

标签:mamicode   break   com   word   http   throw   main   ast   运行环境   

原文地址:https://www.cnblogs.com/SunnivaZhang/p/10523047.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!