zoukankan      html  css  js  c++  java
  • java学习笔记12--异常处理

    java学习笔记系列:

    java学习笔记11--集合总结

    java学习笔记10--泛型总结 

    java学习笔记9--内部类总结

    java学习笔记8--接口总结

    java学习笔记7--抽象类与抽象方法

    java学习笔记6--类的继承、Object类

    java学习笔记5--类的方法 

    java学习笔记4--对象的初始化与回收

    java学习笔记3--类与对象的基础 

    java学习笔记2--数据类型、数组

    java学习笔记1--开发环境平台总结

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note12.html,转载请注明源地址。

    1、异常处理概述

    从一个读取两个整数并显示商的例子:

    public static void main(String args[])
    {
        Scanner input = new Scanner(System.in);  
        System.out.print("Enter two integers: ");
        int number1 = input.nextInt();
        int number2 = input.nextInt(); 
        System.out.println(number1 + " / " + number2 + " is " + (number1 / number2));
     }

    Enter two integers: 3 0

    Exception in thread "main" java.lang.ArithmeticException: / by zero
    at Main.main(Main.java:18)

    解决的一个简单的办法是添加一个if语句来测试第二个数字:

    public class Main
    {
        public static void main(String args[])
        {
            Scanner input = new Scanner(System.in);
            
            System.out.print("Enter two integers: ");
            int number1 = input.nextInt();
            int number2 = input.nextInt();
            if(number2 != 0)
                System.out.println(number1 + " / " + number2 + " is " + (number1 / number2));
            else
                System.out.println("Divisor cannot be zero ");
        }
    }

    为了演示异常处理的概念,包括如何创建、抛出、捕获以及处理异常,继续改写上面的程序如下:

    public class Main
    {
        public static void main(String args[])
        {
            Scanner input = new Scanner(System.in);
            
            System.out.print("Enter two integers: ");
            int number1 = input.nextInt();
            int number2 = input.nextInt();
            try {
                if(number2 == 0)
                    throw new ArithmeticException("Divisor cannot be zero");
                System.out.println(number1 + " / " + number2 + " is " + (number1 / number2));
            }
            catch(ArithmeticException ex) {
                System.out.println("Exception: an integer " + "cannot be divided by zero ");
            }
            System.out.println("Execution continues ...");
        }
    }

    2、异常处理的优势

    改用方法来计算商:

    public class Main
    {
        public static int quotient(int number1, int number2) {
            if(number2 == 0)
                throw new ArithmeticException("Divisor cannot be zero");
            return number1 / number2;
        }
        
        public static void main(String args[])
        {
            Scanner input = new Scanner(System.in);
            
            System.out.print("Enter two integers: ");
            int number1 = input.nextInt();
            int number2 = input.nextInt();
            try {
                int result = quotient(number1, number2);
                System.out.println(number1 + " / " + number2 + " is " + result);
            }
            catch(ArithmeticException ex) {
                System.out.println("Exception: an integer " + "cannot be divided by zero ");
            }
            System.out.println("Execution continues ...");
        }
    }

    异常处理的优势就是将检测错误从处理错误中分离出来。

    3、异常类型

     4、关于异常处理的更多知识

    java的异常处理模型基于三种操作:声明一个异常、抛出一个异常、捕获一个异常

    声明异常

    在方法中声明异常,就是在方法头中使用关键字throws,如下所示:

    public void myMethod throws Exception1,Exception2,……,ExceptionN

    抛出异常

    检测一个错误的程序可以创建一个正确的异常类型的实例并抛出它

    实例:

    IllegalArgumentException ex = new IllegalArgumentException("Worng Argument");
    throw ex;

    或者直接:

    throw new IllegalArgumentException("Worng Argument");

    捕获异常

    当抛出一个异常时,可以在try-catch中捕获和处理它:

    try {
        statements;
    } catch (exception1 ex1){
        handler for exception1;
    } catch (exception1 ex2){
        handler for exception2;
    } 
    ……
    catch (exception1 exN){
        handler for exceptionN;
    }
        

    从异常中获取信息

    可以采用Throwable类中的方法获取异常的信息

    public class test {
        public static void main(String[] args) {
            try {
                System.out.println(sum(new int[]{1,2,3,4,5}));
            } catch(Exception ex) {
                ex.printStackTrace();
                System.out.println(ex.getMessage());
                System.out.println(ex.toString());
                System.out.println("Trace Info Obtained from getBackTrace");
                StackTraceElement[] traceElements = ex.getStackTrace();
                for(int i = 0; i < traceElements.length; i++) {
                    System.out.print("monthod " + traceElements[i].getMethodName());
                    System.out.println("(" + traceElements[i].getClassName());
                    System.out.println(traceElements[i].getLineNumber() + ")");
                }
            }
        }
        
        private static int sum(int[] list) {
            int sum = 0;
            for(int i = 0; i <= list.length; i++) {
                sum += list[i];
            }
            return sum;
        }
    }

    finally语句

    无论异常是否出现,都希望执行某些代码,这时可以采取finally子句:

    public class test {
        public static void main(String[] args) {
            PrintWriter output = null;
            try {
                output = new PrintWriter("wu.txt");
                output.println("wlecome tio java");
            } catch(IOException ex) {
                ex.printStackTrace();
            } finally {
                if(output != null)
                    output.close();
            }
            System.out.println("End of the program");
        }
    }
  • 相关阅读:
    LeetCode 123. Best Time to Buy and Sell Stock III (stock problem)
    精帖转载(关于stock problem)
    LeetCode 122. Best Time to Buy and Sell Stock II (stock problem)
    LeetCode 121. Best Time to Buy and Sell Stock (stock problem)
    LeetCode 120. Triangle
    基于docker 搭建Elasticsearch5.6.4 分布式集群
    从零开始构建一个centos+jdk7+tomcat7的docker镜像文件
    Harbor实现容器镜像仓库的管理和运维
    docker中制作自己的JDK+tomcat镜像
    docker镜像制作---jdk7+tomcat7基础镜像
  • 原文地址:https://www.cnblogs.com/wuyudong/p/java-study-note12.html
Copyright © 2011-2022 走看看