JAVA异常处理学习笔记

2017-12-09 10:50:33

异常处理

异常概述

  异常处理是面向对象语言区别于面向过程语言的重要标志之一,异常的出现,可以使我们编写的程序变得强大并且安全.
  简单的说,异常是处理错误的机制
  如果编写以下的代码

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        int a,b,c;
        Scanner sc = new Scanner(System.in);
        a = sc.nextInt();
        b = sc.nextInt();
        c = a % b;
        System.out.println("余数为"+c);
    }
}

  运行以后,我们发现,如果输入正常的值,结果不正确的,比如说输入字符串,或者是输入b的值等于0,执行的就已经开始报错了,如图

  这样就发生了一个异常,程序中止,这就需要我们的异常机制,使我们的程序变的更加的健壮且安全.

用try...catch处理异常

  try...catch是处理异常的两种方法之一,适合处理程序员可以控制和用户输入有误的情况,以起到程序开发顺利进行和避免不必要情况的发生.下面我们来把程序改写一下

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        int a,b,c;
        Scanner sc = new Scanner(System.in);
        try {
            a = sc.nextInt();
            b = sc.nextInt();
            c = a % b;
            System.out.println("余数为" + c);
        }catch (Exception e)
        {
            System.out.println("输入的数字非法,请检查后重新输入");
        }
    }
}

  这样就成功的捕获了程序的异常情况

  • 在try块中,如果块中所有的语句有一句执行时发生异常,程序将捕获此异常,从而转向catch块中,而不会抛出错误,从而导致程序中止,大大增加了程序的可用性.

用throws处理异常

  throws是处理异常的两种方法之一,它的处理方法是将异常拋给上一级处理,如都不能处理,最终拋给虚拟机处理,这个过程 我们称为拋异常.这种方法适合比较严重的异常和程序员无法预料或无法完全避免异常发生的情况,以及无法处理的异常.
  其中虚拟机处理的唯一方式就是将程序停止,然后将异常的分类打成文档,返回给程序员,只有这一种方法.于是我们能处理的就处理,不能处理的只能使用throws.就像一个小的领导,有能力那就自己尽量处理,实在处理不了的话,只能往上报.

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        A aa = new A();
        try {
            aa.a();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

class A
{
    void a() throws Exception
    {
        int a,b,c;
        Scanner sc = new Scanner(System.in);
        a = sc.nextInt();
        b = sc.nextInt();
        c = a %b;
        System.out.println("余数为"+c);
    }
}

  这样a方法中拋出了异常,将转交给他的上级进行捕获处理.上级可以使用try..catch或者直接拋给虚拟机处理,也就是说放弃了对此异常的处理,虚拟机会将程序正常的中止

Finally的使用

Finally语句是起到异常处理出口的作用,用在try...catch语句的最后,无论是否出现异常(catch中的语句是否被执行),Finally中的语句都会被执行,这样可以更好的控制程序的走向.