Java初学——面向对象异常

Posted wuxuewei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java初学——面向对象异常相关的知识,希望对你有一定的参考价值。

一、异常

  1.什么是异常

    异常是指程序在运行是发生的不正常事件,会中断运行的程序称之为异常

  2.什么是异常处理

    Java编程语言使用异常处理机制为程序提供了错误处理的能力。一般处理顺序为:程序中预先设置好 对付异常的处理办法→程序运行→异常→对异常进行处理→处理完毕,程序继续运行

  3.Java中如何进行异常处理

    Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws

技术图片

  4.try catch

    

 1 public class text 
 2     public static void main(String[] args) 
 3         Scanner in = new Scanner(System.in);
 4         System.out.print("请输入被除数:");
 5         int num1 = in.nextInt();
 6         System.out.print("请输入除数:");
 7         int num2 = in.nextInt();
 8         try //try中可能出现异常的代码
 9             System.out.println(num1+"/"+ num2 +"="+ num1/ num2);
10             System.out.println("感谢使用本程序!");
11          catch (ArithmeticException e) //在程序发生异常时候执行的代码 括号中变量是可能出现的异常类型
12             System.out.println("除数不能为零");
13         
14 
15     
16 

  Java中的异常类是存在继承关系的Exception父类可以代替任何子类,找出所有的异常,但是异常涉及面太广所以在设计代码时要精写,有时异常不仅仅是一个catch块,所以catch块可以多个存在多个。如以下代码

public class text 
    public static void main(String[] args) 
        Scanner in = new Scanner(System.in);
        System.out.print("请输入被除数:");
        int num1 = in.nextInt();
        System.out.print("请输入除数:");
        int num2 = in.nextInt();
        try // try中可能出现异常的代码
            System.out.println(num1 + "/" + num2 + "=" + num1 / num2);
            System.out.println("感谢使用本程序!");
         catch (ArithmeticException e) // 在程序发生异常时候执行的代码 括号中变量是可能出现的异常类型
            System.out.println("除数不能为零");
         catch (NullPointerException e) 
            System.out.println("空指针异常");
         catch (ClassCastException e) 
            System.out.println("类型转换异常");//如果没有满足上述异常执行顶级异常(未知异常)
        catch (Exception e)         //异常需要从小到大的顺序 将顶级异常放在最后
            System.out.println("顶级异常");
        

    

 5.try catch finally语句

  使用finally语句无论是否出不出现异常都会执行。代码最先执行try语句 出现异常执行catch 在执行finally块,如果在代码中加入了system.exit(1)则直接退出虚拟机不会运行finally语句

    try catch 和try finally都能单独使用 但是不能省略try块且不能单独存在

6.throw 和throws  

  throw:是抛出具体的某个对象,方法内部可能存在异常。请调用方处理 方法名末尾(在该方法中根本没有对该类异常的捕获)

  throws声明异常,通知调用方方法内部可能存在异常请调用方处理

  

public class text 
    public static void main(String[] args) 
        try 
            b();
         catch (FileNotFoundException e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
        
    
    public static void a () throws FileNotFoundException //声明可能异常
    FileInputStream aFileInputStream=new FileInputStream("a.txt");

    
    public static void b() throws FileNotFoundException 
        a();
    

7.异常链

使用异常链可以一层一层的去追溯错误的产生和传递,例如:我在mian方法中调用method1方法,在method1方法中调用method2方法,在method2方法中抛出一个空指针异常。

    

public class Test 

    public static void main(String[] args) 

        Test t = new Test();

        try 
            t.method1();
         catch (Exception e) 
            e.printStackTrace();
        
    

    public void method1() throws Exception 

        try 
            method2();
         catch (Exception e) 
            Exception exception = new Exception("method1 exception");
            exception.initCause(e);
            throw exception;
            //或者
            //throw new Exception("method1 exception", e);
        
    

    public void method2() 
        throw new NullPointerException("method2 exception");
    

运行结果如下

技术图片

可以看到 method1 exception,然后Caused by method2 exception。之所以产生异常链,是因为

Exception exception = new Exception("method1 exception");
exception.initCause(e);
throw exception;
//或者
//throw new Exception("method1 exception", e);

如果不这样处理,打印如下

 

java.lang.NullPointerException: method2 exception
    at normal.Test.method2(Test.java:31)
    at normal.Test.method1(Test.java:19)
    at normal.Test.main(Test.java:10)

 

                               

 

以上是关于Java初学——面向对象异常的主要内容,如果未能解决你的问题,请参考以下文章

Java+面向对象初学感想

Java面向对象编程之异常处理机制

初学者——面向对象的理解03

Java初学者容易犯的代码错误

Java面向对象之异常(异常处理方式)

第五章 使用java实现面向对象异常