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

    Java异常

    什么是异常

    Exception:软件程序在运行过程中遇到的各种问题。

    文件找不到,网络连接失败,非法参数;

    检查型异常:用户错误或者问题引起。在编译时不能简单的被忽略。

    运行时异常:肯恶搞被避免,在编译时被忽略。

    错误(error):错误不是异常,是脱离程序员控制的问题,例如栈溢出。是爱编译的时候无法检查到的。

    异常体系结构

    Java把异常当作对象来处理。定义了一个基类:java.lang.Throwable作为所有异常的超类。

    Error类对象是由Java虚拟机生成并抛出,与执行操作无关。

    例如:Java虚拟机运行错误,当JVM没有内存资源,会出现OutOfMemoryError错误,此时会终止线程。

    再如:类定义错误(NoClassDefFoundError)连接错误(LinkageError)错误不可查。

    Error和Exception的区别:Error是灾难性的错误,是程序无法控制和处理的,Exception是可以被程序处理的。

    Java异常处理机制

    抛出异常:

    捕获异常

    处理异常

    五个关键字:

    try、catch、finally、throw、throws

    idea快捷键:ctrl+alt+t

    throw主动抛出异常:一般在方法使用:

    public static void main(String[] args) {
        new Oop02().test(2,0);
    }
    public void test(int a,int b){
        if(b==0){
            throw new ArithmeticException();//主动抛出异常
        }else{
            System.out.println(a/b);
        }
    }
    

    输出结果:

    Exception in thread "main" java.lang.ArithmeticException
    at javademo.Oop02.test(Oop02.java:9)
    at javademo.Oop02.main(Oop02.java:5)

    Process finished with exit code 1

    throws:方法处理不了这个异常,在方法抛出异常。

    public static void main(String[] args) {
        try {
            new Oop02().test(2,0);
        } catch (ArithmeticException e) {
            e.printStackTrace();
        } 
    }
    public void test(int a,int b)throws ArithmeticException{
        if(b==0){
            throw new ArithmeticException();//主动抛出异常
        }else{
            System.out.println(a/b);
        }
    }
    

    输出结果:

    java.lang.ArithmeticException
    at javademo.Oop02.test(Oop02.java:13)
    at javademo.Oop02.main(Oop02.java:6)

    Process finished with exit code 0

    自定义异常

    其实大多数异常不需要自定义。

    用户自定义异常类,需要继承Exception类

    步骤:

    1、创建自定义异常类;

    2、在方法中通过throw关键字抛出异常对象;

    3、如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续下一步;

    4、在出现方法的调用这种捕获并处理异常。

    public class Oop02 extends Exception {
        private int del;
    
        public Oop02(int del) {
            this.del = del;
        }
    
        @Override
        public String toString() {
            return "Oop02{" +
                    "del=" + del +
                    '}';
        }
    
        public static void main(String[] args) {
           a(1);
        }
        static  void a(int b){
                if(b>10){
                    try {
                        throw new  Oop02(b);
                    } catch (Oop02 oop02) {
                        oop02.printStackTrace();
                    }
                }else {
                    System.out.println("111");
                }
            }
        }
    

    总结

    1、处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理。

    2、在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常。

    3、对于不确定的代码,也可以加上try-catch,处理潜在的异常。

    4、尽量去处理异常,切忌只是简单的调用printStackTrace()去打印。

    5、具体如何去处理异常,要根据不同的业务需求和异常类型去决定。

    6、尽量添加finally语句去释放占用的资源。

  • 相关阅读:
    mysql 索引
    redis持久化
    redis发布订阅
    django 信号
    paramiko模块
    23种设计模式python实现
    几种浏览器存储数据的方式
    关于传参
    对字符串里的四则运算进行计算2020/10/12
    动手动脑2020/10/9
  • 原文地址:https://www.cnblogs.com/yunxiaoqian/p/13911079.html
Copyright © 2011-2022 走看看