java异常

java异常,第1张

java异常 Throwable

体系结构:

成员方法:

方法名说明public String getMessage()返回此throwable的详细信息字符串public String toString()返回此可抛出的简短描述public void printStackTrace()把异常的错误信息打印到控制台

代码示例:

public class ExceptionDemo02 {
    public static void main(String[] args) {
        int []arr={1,3,5};
        try{
            System.out.println(arr[3]);
        }catch (ArrayIndexOutOfBoundsException e){
            //什么也没输出
            System.out.println(e.getMessage());
            //输出java.lang.ArrayIndexOutOfBoundsException: 3
            System.out.println(  e.toString());
            //输出:java.lang.ArrayIndexOutOfBoundsException: 3
            // at org.example.Exception.ExceptionDemo02.main(ExceptionDemo02.java:14)
            e.printStackTrace();
        }
        System.out.println("程序运行结束");
    }

}
1.Exception

Error:严重问题,不需要处理,也处理不了.

Exception:异常类,表示程序本身可以处理的问题:

  • RuntimeException:运行时异常,在编译期是不检查的,出现问题后,需要检查代码,修改代码
  • 非RuntimeException:编译器必须处理的,否则程序不能编译,更无法执行
1.1 默认处理

JVM的默认处理方案:

如果程序出现问题,而我们又未做任何处理,JVM默认处理:

  • 将异常原因以及出现的位置等信息在控制台输出;
  • 程序停止运行

代码示例:

package org.example.Exception;


public class ExceptionDemo01 {
    public static void main(String[] args) {
        exceptionMethod();
    }
    public static void exceptionMethod(){
        int [] arr={1,3,5};
        System.out.println(arr[3]);
    }
}

运行结果:

1.2 try…catch…处理异常
try{
    可能出现异常的代码块
}catch(异常类名 变量名){
	异常处理代码
}

执行流程:

程序从try里面的代码开始执行,出现异常是,自动生成一个异常类对象,该异常类对象将被提交给java运行时系统

当java运行时系统接收到异常对象时,会到catch中去找匹配的异常类,找到后进行异常的处理;只想完毕后,程序可继续运行.

1.2.1 使用try…catch…处理

示例:

package org.example.Exception;


public class ExceptionDemo02 {
    public static void main(String[] args) {
        int []arr={1,3,5};
        try{
            System.out.println(arr[3]);
        }catch (ArrayIndexOutOfBoundsException e){
            e.printStackTrace();
        }
        System.out.println("程序运行结束");
    }

}

运行结果:

1.2.2不使用try…catch:
package org.example.Exception;


public class ExceptionDemo02 {
    public static void main(String[] args) {
        int []arr={1,3,5};
        System.out.println(arr[3]);
        System.out.println("程序运行结束");
    }

}

运行结果:

可以看到"程序运行结束"并没有在控制台输出

1.2.3 catch中设置的异常与抛出的异常不匹配

代码示例:

package org.example.Exception;

import java.io.FileNotFoundException;


public class ExceptionDemo02 {
    public static void main(String[] args) {
        int []arr={1,3,5};
        try{
            System.out.println(arr[3]);
        }catch (ArrayStoreException e){
            e.printStackTrace();
        }
        System.out.println("程序运行结束");
    }

}

抛出的异常应该为java.lang.ArrayIndexOutOfBoundsException,但是我设置要捕获的异常为ArrayStoreException ,结果如何?

实际运行结果:

没捕获到对应类型的异常,按照默认情况处理.

1.3 thows异常处理

异常处理也可以使用throws.

格式:throws 异常类名

是附加在方法括号后,方法体"{"前

然而说是处理异常,其实就是将异常抛给调用者,谁调用谁处理,可以层层往上抛(真会甩锅)

注意:

  • 编译时异常必需要进行处理,可try…catch…也可throws
  • 运行时异常可以不处理,也处理不了
1.4 自定义异常

格式:

public class 自定义异常类名 extends Exception{
    无参构造;
    有参构造;
}

示例:

package org.example.Exception;


public class UnknownException extends Exception{
    public UnknownException() {
    }

    public UnknownException(String message) {
        super(message);
    }
}
package org.example.Exception;


public class ExceptionDemo03 {
    public static void main(String[] args) {
        try {
            method();
        }catch (UnknownException e){
            e.printStackTrace();
        }

    }
    public static void method() throws UnknownException {
        int []arr={1,3,5};
        try{
            System.out.println(arr[3]);
        }catch (ArrayIndexOutOfBoundsException e){
            throw new UnknownException("俺也不知道出现了啥问题,程序就是不动");
        }

    }
}

运行结果:

**
**

1.5一些概念区别

编译时异常与运行时异常区别

Java中异常分为两大类:编译时异常(受检异常)和运行时异常(非受检异常).所有的RuntimeException类及其子类被称为运行时异常,其他的异常都是编译时异常

  • 编译时异常:必需显式处理,否则直接报错,无法编译
  • 运行时异常:无需显式处理,也可和编译时异常一样处理

throws和throw区别

throwsthrow用在方法声明后面用在方法体内表示抛出异常,有方法调用者处理表示抛出异常,由方法体内的语句处理表示出现异常的一种可能性,即异常可能会出现,也可能不出现执行thow,那一定是出现了异常

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5693563.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存