小言_互联网的博客

Java关于异常的一些知识

506人阅读  评论(0)

Java关于异常的一些知识

哎,最近为了应付考试,不得不补一下java知识点了!虽然我很喜欢python,但是没办法啊!为了绩点加油,奥里给!

其实每种语言都有异常机制,那下面我就简单介绍一下:

在java中异常其实分为Exception类(运行时编程者犯的语法错误)和Error类(多半和编程者不关,也就不过多介绍)

他们共同的父类是Throwable类

这篇文章仅仅介绍一些Exception类!

Exception类有个子类为RuntimeException类(运行时异常类)比较常用!

而RuntimeException类又有如下子类:

ArrayIndexOutOfBoundsException 数组下标越界
NullPointerException 空指针异常
ArithmeticException 算术异常
MissingResourceException 丢失资源
ClassNotFoundException 找不到类

如果上面没有看懂也没关系,只是作为了解,只要你会如何用就行了!

下面先给出一段代码来看看:

public class Test1 {
    public int fun(){
        int []datas = new int[10];
        try{
            datas[11] = 2;
            System.out.println("输出!");
        }
        catch (ArrayIndexOutOfBoundsException g){   //数字下标越界异常
            System.out.println("数组越界!");
        }
        catch (Exception g){                    
            System.out.println("异常");
        }
        finally {
            System.out.println("看finally语句无论是否异常一定会输出!");
        }
    }
    public static void main(String[] args) {
        Test1 test = new Test1();
        System.out.println(test.fun());
    }
}
//输出为:
数组越界!finally语句无论是否异常一定会输出!

catch语句只会执行一个

finally语句无论是否发生异常都会执行!

如果你不知道会发生什么类型的异常就可以使用Exception类(他包含所有上述异常类型!)

throw语句 和throws语句

throw语句相当于主动抛出异常,而throws语句相当于自己不处理异常而是把异常抛给调用者!

class Math{
    public int div(int i,int j) throws Exception{
        int t=i/j;
        return t;
    }
}
public class ThrowsDemo {
    public static void main(String args[]) throws Exception{
        Math m=new Math();
   }
}
public class TestThrow
{
    public static void main(String[] args) 
    {
        try
        {
            //调用带throws声明的方法,必须显式捕获该异常
            //否则,必须在main方法中再次声明抛出
            throwChecked(-3);            
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
        //调用抛出Runtime异常的方法既可以显式捕获该异常,
        //也可不理会该异常
        throwRuntime(3);
    }
    public static void throwChecked(int a)throws Exception
    {
        if (a > 0)
        {
            //自行抛出Exception异常
            //该代码必须处于try块里,或处于带throws声明的方法中
            throw new Exception("a的值大于0,不符合要求");
        }
    }
    public static void throwRuntime(int a)
    {
        if (a > 0)
        {
            //自行抛出RuntimeException异常,既可以显式捕获该异常
            //也可完全不理会该异常,把该异常交给该方法调用者处理
            throw new RuntimeException("a的值大于0,不符合要求");
        }
    }
}


Java中异常的调用顺序

public class Test1 {
    public int fun(){
        int index=10;
        int []datas=new int[10];
        try{
            datas[11]=2;
            System.out.println("输出!");
            return index;
        }
        catch (ArrayIndexOutOfBoundsException g){
            System.out.println("数组越界!");
        }
        catch (Exception g){
            System.out.println("异常");
        }
        finally {
            System.out.println("看finally语句无论是否异常一定会输出!");
        }
        System.out.println("看try,catch语句之外的语句是否会输出");
        return 1;
    }

    public static void main(String[] args) {
        Test1 test=new Test1();
        System.out.println(test.fun());
    }

}
//输出结果为
数组越界!finally语句无论是否异常一定会输出!
看try,catch语句之外的语句是否会输出
1

你会发现try语句中如果发生异常,try语句中异常下面的语句就不会执行了!

然后再执行finally语句!

如果我再改下代码:

把上述代码try语句中的 data[11]=2; 删除(即让try语句不发生异常!)

结果为:

输出!
看finally语句无论是否异常一定会输出!
10

你会发现finally语句在return语句前就执行了!

所以这个顺序你应该了解了一下!

希望能够帮助你们,我曾经也是看了几篇博客才会了点,就是分享一些经验给大家!😊😊


转载:https://blog.csdn.net/weixin_47171492/article/details/106576044
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场