zoukankan      html  css  js  c++  java
  • Java异常

    Java异常

    1.Java异常类

    超类Throwable被Error(错误)类和Exception(异常)类继承。

    Throwable
    常用方法:

    //1.返回异常发生时的详细信息(简略描述信息)
    public string getMessage();
    //空指针异常
    
    //2.返回异常发生时的简要描述(异常类和简略描述信息)
    public string toString(); 
    //java.lang.NullPointerException: 空指针异常
    
    //3.在控制台上打印Throwable对象封装的异常信息(详细信息)
    public void printStackTrace();
    //java.lang.NullPointerException: 空指针异常
    //at com.cwstd.exception.ExceptionTest.getnum(ExceptionTest.java:10)
    //at com.cwstd.exception.ExceptionTest.main(ExceptionTest.java:17)
    
    
    

    Error:无法通过程序进行纠正,必须通过修改源码解决错误。
    Exception:异常后可以通过代码进行纠正,使程序能够继续运行。
    注意:Exception有一个子类 RuntimeException或者RuntimeException的子类,指的是程序运行期的异常,可以不进行处理,默认可以交给JVM处理,其他编译期的异常类,需要进行处理(抛出异常交给方法调用者处理或者自己捕获异常

    2.Throw关键字

    Throw关键字:在指定方法中抛出指定异常(根据实际情况选择异常类,如果Java没有自带该异常类可以自定义)
    写法: throw new xxxException("异常产生的原因");
    getNum方法
    创建一个返回数组指定位置元素的类,如果传入数组为null,抛出空指针异常

    public static int getNum(int[]arr,int index)
        {
            if(arr==null)
            {
                throw new NullPointerException("空指针异常");
            }
            return arr[index];
        }
     public static void main(String[] args) {
            int [] arr=null;
            getNum(arr,0);
        }
    

    因为 NullPointerException是运行期异常,所以不需要继续抛出异常或者捕获异常,默认交给JVM处理。

    3.处理异常的两种方法

    3.1抛出异常

    不处理异常,把异常抛给调用方法者

    public static void openFile(String path) throws FileNotFoundException {//抛出异常调用该方法的main方法
            if(!path.equals("C://123.txt"))
            {
                throw new FileNotFoundException();
            }
        }
        public static void main(String[] args) throws Exception  {//抛出异常给JVM
            int [] arr=null;
            openFile("D://123.txt");
        }
    

    FileNotFoundException()是编译期异常,所以必须要抛出异常或者捕获。
    注意

    • throws必须写在声明处
    • throws必须是Exception或者Exception的子类
    • 如果抛出的多个异常,他们是子类和父类的关系,可以只用抛出父类

    3.2捕获异常

    写法:

    try{
                可能产生异常的代码
            }catch (定义异常类变量,接收抛出的异常类){
                处理异常代码,通常把异常写入到日志
            }
            finally{
                不管是否有异常都会执行的代码,通常做资源的释放
            }
    

    注意:

    • try中可以抛出多个异常,可以使用多个catch进行捕获
    • try中如果抛出父类和子类异常,子类异常要先catch,不然都会被父类捕获报错,或者只写一个父类捕获

    4.子父类的异常

    父类异常是什么样,子类异常就是什么样

    • 子类重写父类的方法时候,抛出异常可以是父类异常的子类,或者不抛出异常
    • 父类没有异常,子类也不能有,如果方法内有,只能用try...catch捕获

    5.自定义异常

    自定义 SumException
    判断两数的和是否正确,不正确抛出异常

    package com.cwstd.exception;
    
    public class SumException extends Exception{
        /**
         * 空参构造方法
         */
        public SumException()
        {
    
        }
    
        /**
         * 带异常信息,交给父类处理
         * @param s
         */
        public SumException(String s)
        {
            super(s);
        }
    
    }
    
    

    mian方法

        public static void sumTest(int a,int b,int sum) throws SumException {
            if(a+b!=sum)
            {
                throw new SumException("和错误");
            }
        }
        public static void main(String[] args) throws Exception  {
    
            sumTest(1,2,1);
    
        }
        
    

    输出:Exception in thread "main" com.cwstd.exception.SumException: 和错误
    at com.cwstd.exception.ExceptionTest.sumTest(ExceptionTest.java:25)
    at com.cwstd.exception.ExceptionTest.main(ExceptionTest.java:30)

    6.异常处理流程总结

  • 相关阅读:
    CodeForces 650C Table Compression
    HDU 5632 Rikka with Array [想法题]
    HDU 4352 XHXJ's LIS
    HDU 5634 Rikka with Phi
    HDU 4763 Theme Section
    LightOJ 1342 Aladdin and the Magical Sticks [想法题]
    HDU 4578 Transformation
    POJ 1177 Picture
    HDU 4614 Vases and Flowers
    SPOJ AEROLITE
  • 原文地址:https://www.cnblogs.com/cwstd/p/14742574.html
Copyright © 2011-2022 走看看