Java异常

异常父子关系

package ch10;
/**
 * Created by Jiqing on 2016/11/30.
 */
public class DivTest {
    public static void main(String[] args) {
        try {
            int a = Integer.parseInt(args[0]);
            int b = Integer.parseInt(args[1]);
            int c = a/b;
            System.out.println("您输入的两个数相除的结果是:"+c);
        } catch (IndexOutOfBoundsException ie) {
            System.out.println("数组越界:运行程序输入的参数个数不够");
        } catch (NumberFormatException ne) {
            System.out.println("数字格式异常:程序只能接收整数参数");
        } catch (ArithmeticException ae) {
            System.out.println("算术异常");
        } catch (Exception e) {
            System.out.println("未知异常");
        }
    }
}

// 如果运行该程序输入的参数不够,将会发生数组越界异常,用IndexOutOfBoundsException
// 如果运行该程序输入的参数不是数字,而是字母,将发生数字格式异常,用NumberFormatException
// 如果该程序输入的第二个参数是0,将发生除0异常,用ArithmeticException
// 如果出现其他异常,用Exception

牢记并掌握上门三种常见的运算异常。

捕获多个异常

package ch10;

/**
 * Created by Jiqing on 2016/11/30.
 */
public class MultiExceptionTest {
    // 同时捕获多个异常
    public static void main(String[] args) {
        try {
            int a = Integer.parseInt(args[0]);
            int b = Integer.parseInt(args[1]);
            int c = a/b;
            System.out.println("您输入的两个数相除的结果是:"+c);
        } catch (IndexOutOfBoundsException | NumberFormatException | ArithmeticException ie) {
                System.out.println("程序发生了数组越界、数字格式异常、算术异常之一");
                // 捕获多异常,异常变量有final修饰
        } catch (Exception e) {
                System.out.println("未知异常");
                // 捕获单异常,异常变量没有final修饰
        }
    }
}

抛出异常throws

package ch10;

import java.io.FileInputStream;
import java.io.IOException;

/**
 * Created by Jiqing on 2016/11/30.
 */
public class ThrowsTest {
    // 一旦使用throws抛出异常,程序就无法使用try catch来捕获该异常了
    public static void main(String[] args)
        throws IOException
    {
        FileInputStream fis = new FileInputStream("a.txt");
    }
}

自行抛出异常throw

package ch10;

/**
 * Created by Jiqing on 2016/12/1.
 */
public class ThrowTest {
    public static void main(String[] args)
    throws Exception // 抛出异常
    {
        // 自行抛出异常
        throw new Exception("异常了");
    }
}

Java异常跟踪栈

package ch10;

import ch6.Enum.SeasonEnum;

/**
 * Created by Jiqing on 2016/12/1.
 */
class SelfException extends RuntimeException {
    SelfException() {}
    SelfException(String msg) {
        super(msg);
    }
}

public class PrintStackTraceTest {
    // Java异常跟踪栈
    // 异常从发生异常的方法逐渐向外传播,首先是调用者,然后传给其调用者,直至main方法,如果main方法异常没有处理,JVM会中止该程序,并打印异常跟踪栈信息
    // 栈,队列  队列先进先出,栈先进后出

    public static void main(String[] args) {
        firstMethod();
    }

    public static void firstMethod() {
        secondMethod();
    }

    public static void secondMethod() {
        thirdMethod();
    }

    public static void thirdMethod() {
        throw new SelfException("自定义异常信息");
    }

//    Exception in thread "main" ch10.SelfException: 自定义异常信息
//    at ch10.PrintStackTraceTest.thirdMethod(PrintStackTraceTest.java:29)
//    at ch10.PrintStackTraceTest.secondMethod(PrintStackTraceTest.java:25)
//    at ch10.PrintStackTraceTest.firstMethod(PrintStackTraceTest.java:21)
//    at ch10.PrintStackTraceTest.main(PrintStackTraceTest.java:17)
}

posted @ 2016-11-30 23:34  TBHacker  阅读(232)  评论(0编辑  收藏  举报