java进阶01 异常处理


          异常处理
          异常处理就是错误处理机制
          是面向对象语言区别于面向过程语言的重要标志之一,
          异常处理机制的出现,可以使我们的程序更加强大而且安全。

    

import java.util.Scanner;


public class Exception1 {
    public static void main(String[] args){
        /*
         * 异常处理
         * 异常处理就是错误处理机制
         * 是面向对象语言区别于面向过程语言的重要标志之一
         * 异常处理机制的出现,可以使我们的程序更加强大而且安全
         * */
        Scanner in=new Scanner(System.in);
        
        System.out.println("请输入除数与被除数");
        int a=in.nextInt();
        int b=in.nextInt();
        System.out.print("余数是->"+a%b);
        System.out.println("接下来要干的事");
        /*
         * 当被除数是0的时候会抛出
         * Exception in thread "main"     java.lang.ArithmeticException: / by zero
         * at Exception.main(Exception.java:17)的异常
         * 如果只是这个异常的话 ,用if语句来判断是否输入的为0即可
         * 但是 往往异常比这复杂的多
         * 当你键入的值 不是整数时候,用if是无法解决的
         * 而程序也会中断执行
         * 之后的代码将不会被执行
         * 所有需要用异常处理机制来解决这个问题
         * */
    }
}
    

控制台打出:  

请输入除数与被除数

  aa
  Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at Exception.main(Exception.java:15)
   从这里可以看出 当输入的不是整数的时候 根本不允许你输入第二个。

  所以才有了异常处理机制

  1:

  用try...catch处理异常

  它适合处理程序猿可以控制和用户输入有误的情况.

  

Scanner in=new Scanner(System.in);
        
        System.out.println("请输入除数与被除数");
        try {
            int a=in.nextInt();
            int b=in.nextInt();
            System.out.print("余数是->"+a%b);
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("你的输入有误");
        }
        
        System.out.println("接下来要干的事");

  try里面的语句是可能出现问题的代码,catch里面的语句是出现问题之后要执行的代码。

  这是控制台打出的

  请输入除数与被除数
  aa
  你的输入有误
  接下来要干的事

  这样就很好的处理了输入异常的问题.

  2:
  用Throws处理异常

  它的处理方法是将异常抛给上一级处理,如都不能处理
      最终抛给虚拟机处理,这个过程我们称为抛异常
      这中方法适合比较严重的异常和程序猿无法预料的异常

  

import java.util.Scanner;


public class Exception2 {
    public static void main(String[] args){
        
        //用Throws处理异常
        /*
         * 它的处理方法是将异常抛给上一级处理,如都不能处理
         * 最终抛给虚拟机处理,这个过程我们称为抛异常
         * 这中方法适合比较严重的异常和程序猿无法预料的异常
         * */
            System.out.println("请输入除数与被除数");
            A aa=new A();
            try {                
                aa.a();
            } catch (Exception e) {
                // TODO: handle exception
                System.out.println("你的输入有误");    
            }            
            System.out.println("接下来要干的事");
        
    }    
}
class A{
    void a() throws Exception{
    Scanner in=new Scanner(System.in);
    int a=in.nextInt();
    int b=in.nextInt();
    System.out.print("余数是->"+a%b);    
    }
}

  这里在a()这里throws 如果a()里面出现异常它将抛给它的上级处理 它的上级在哪呢?

  就是在主函数 因为你调用了 aa.a();

  现在在主函数中处理这个异常

  如果主函数中还处理不了 你就继续向上抛

  

import java.util.Scanner;


public class Exception2 {
    public static void main(String[] args) throws Exception{
        
        //用Throws处理异常
        /*
         * 它的处理方法是将异常抛给上一级处理,如都不能处理
         * 最终抛给虚拟机处理,这个过程我们称为抛异常
         * 这中方法适合比较严重的异常和程序猿无法预料的异常
         * */
            System.out.println("请输入除数与被除数");
            A aa=new A();
            aa.a();            
            System.out.println("接下来要干的事");
        
    }
}
class A{
    void a() throws Exception{
    Scanner in=new Scanner(System.in);
    int a=in.nextInt();
    int b=in.nextInt();
    System.out.print("余数是->"+a%b);    
    }
}

 

  由于只有虚拟机能调用主函数,所以就将异常抛给了虚拟机,虚拟机能做的就是正常退出程序.

  这就是2种处理异常的方法

  最后讲一下 Finally

  Finally语句是起到异常处理出口的作用
      用在try...catch语句的最后,无论是否出现异常
      Finally中的语句都会执行

  

import java.util.Scanner;


public class Exception3 {
    public static void main(String[] args){
        /*
         * Finally 
         * Finally语句是起到异常处理出口的作用
         * 用在try...catch语句的最后,无论是否出现异常
         * Finally中的语句都会执行
         * */
        Scanner in=new Scanner(System.in);
    
        System.out.println("请输入除数与被除数");
        try {
            int a=in.nextInt();
            int b=in.nextInt();
            System.out.print("余数是->"+a%b);
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("你的输入有误");
        }
        finally{
        System.out.println("接下来要干的事");
        }
        /*
         * 现在看来finally可以不用写
         * 但是往往 catch并不能处理全部异常 
         * 所以用finally能进行收尾工作
         * 直观又好控制
         * */
        
    }
}

   现在看来finally可以不用写
       但是往往 catch并不能处理全部异常
       所以用finally能进行收尾工作
       直观又好控制

 

   关于Exception的种类,就自行百度,不做更多讲解。

   异常处理的笔记就此结束.

 

  

posted @ 2014-04-24 15:51  未闻罂粟  阅读(244)  评论(0编辑  收藏  举报