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.异常处理流程总结

  • 相关阅读:
    《C# to IL》第一章 IL入门
    multiple users to one ec2 instance setup
    Route53 health check与 Cloudwatch alarm 没法绑定
    rsync aws ec2 pem
    通过jvm 查看死锁
    wait, notify 使用清晰讲解
    for aws associate exam
    docker 容器不能联网
    本地运行aws lambda credential 配置 (missing credential config error)
    Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
  • 原文地址:https://www.cnblogs.com/cwstd/p/14742574.html
Copyright © 2011-2022 走看看