异常(下)Java常见异常,异常的使用原则

简介: 异常(下)Java常见异常,异常的使用原则

前言

       该文介绍了Java的一些常见异常,并给出对应的例子进行解释。介绍异常的使用原则,即创建,抛出异常的编程规范。

一、Java常见异常

        前要:Java API中提供了一些异常类,这些异常类用来在控制台中,反馈出经常发生的BUG。这些异常中,一些是Java虚拟机自动进行捕获处理的,一些需要程序员进行捕获处理或声明抛出。

1.常见异常

异常类 说明
ArithmeticException 算术异常
ArrayIndexOutOfBoundsException 数组下标越界异常
ArrayStoreException 数组中包含不兼容的值抛出的异常
ClassCastException 类型转换异常
ClassNotFoundException 未找到相应类异常
NullPointerException 空指针异常
NoSuchFieldException 字段未能找到异常
NegativeArrarySizeException 数组长度为负异常
IllegalArgumentException 非法参数异常
SQLException 操作数据库异常
SecurityException 安全性异常

2.实例展示        

        (1)ArithmeticException

               算数异常:即运算中与运算逻辑不相符的错误运算。

               实例:

public class Demo {
  public static void main(String[] args) {
    int a = 1;
    int b = a/0;
    //此处发生了算数异常,除法运算中,除数不能为零
  }
}

 输出结果:

       (2)ArrayIndexOutOfBoundsException

               数组下标越界异常:即赋值或调用数组时,数组的索引位置超出了创建该数组的范围。

               实例:                

public class Demo {
  public static void main(String[] args) {
    int a[] = new int[100];
    //创建了一个 a[]数组,容量范围为 0-99
    a[100] = 1;
        //此处发生了数组下标越界异常,a[]数组的索引范围为 0 ≤ x < 100 ,所以100超出索引范围    
  }
}

   输出结果:

       (3)ArrayStoreException

               数组中包含不兼容的值异常:即给数组赋值时,此赋值的数据类型与创建时该数组的数据类型不相符。

                实例:

public class Demo {
  public static void main(String[] args) {
    // 创建一个整数数组
    Object arr[] = new Integer[5];
    // 尝试将一个字符串对象存储到整数数组中
    arr[0] = "Hello";
    //此处发生了数组中包含不兼容的值异常,arr[]数组 数据类型为 整数,arr[0] 数据类型为 String
  }
}

        输出结果:

       (4)ClassCastException

               类型转换异常:即在赋值或运算过程中,转换数据的类型前后不对应(即使进行了强转换)。

               实例:

public class Demo {
  public static void main(String[] args) {
    //创建了一个 Integer 整数类型的 obj 对象
    Object obj = new Integer(10);
    //尝试将 Integer类型的obj 转换为 String类型
    String str = (String) obj; 
    //这里发生了类型转换异常,整数类型转换为了String类型,不能转换
  }
}

    输出结果:        

       (5)ClassNotFoundException

                未找到相应类异常即调用了一个不存在的类,或者调用路径错误,拼写错误,导致不存在。

              实例:

public class Demo {
  public static void main(String[] args) {
    try {
            //该类的路径不存在此类
        Class.forName("com.example.NonExistentClass");
            //发生了异常
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
  }
}

    输出结果:

       (6)NullPointerException

               空指针异常:即引用对象为null,没有指向一个具体的数据,相关的操作指令无法进行。

               实例:

public class Demo {
  public static void main(String[] args) {
    String str = null;
    int length = str.length(); 
    //这里会抛出空指针异常,因为str为null
  }
}

(7)NegativeArrarySizeException

               数组长度为负异常:即创建的一个数组时,其索引范围为一个负数,使x<0,与0≤x相违背。

               实例:

public class Demo {
  public static void main(String[] args) {
    try {
            int[] arr = new int[-5];
            // 尝试创建一个具有负数大小的数组,发生异常
        } catch (NegativeArraySizeException e) {
            e.printStackTrace();
        }   
  }
}

  输出结果:

       (8)IllegalArgumentException

               非法参数异常:即我们调用方法时, 传递了无效、不合法或不符合预期的参数值。

              实例:

public class Demo {
  public static void main(String[] args) {
    try {
            int age = -5;
            if (age < 0) {
                throw new IllegalArgumentException("age 是一个不符合预期的参数:年龄不能小于零");
            }
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }   
  }
}

  输出结果:                      

二、异常的使用原则

       (1)发生异常尽量不要抛出,尽量直接处理掉。

       (2)不能忽略抛出的异常,并且一定要使用 try-catch 代码块反馈报错。

       (3)不要将过于庞大的代码套入 try-catch 代码块。此操作会增加异常产生的可能性,更难识别出异常的性质。尽可能是代码中的一小部分套入 try-catch 代码块。

       (4)不要过度使用 catch 代码块。多余的 catc代码块(本意用于反馈并处理异常,但是画蛇添足) 会使进程进行多余的判断,增加CPU的运行压力,浪费系统资源。

       (5)子类抛出的异常不能比父类更高级。(特例:RuntimeException 异常及其子类不受此原则的约束)。

总结

       以上就是对Java异常的一些常见API中异常的总结,异常的使用规范的补充内容。如果对该文有补充或指正的内容,欢迎在评论区中留言。博主会及时进行反馈的。

相关文章
|
1月前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
66 1
|
1月前
|
Java API 调度
如何避免 Java 中的 TimeoutException 异常
在Java中,`TimeoutException`通常发生在执行操作超过预设时间时。要避免此异常,可以优化代码逻辑,减少不必要的等待;合理设置超时时间,确保其足够完成正常操作;使用异步处理或线程池管理任务,提高程序响应性。
75 12
|
1月前
|
Java
在 Java 中,如何自定义`NumberFormatException`异常
在Java中,自定义`NumberFormatException`异常可以通过继承`IllegalArgumentException`类并重写其构造方法来实现。自定义异常类可以添加额外的错误信息或行为,以便更精确地处理特定的数字格式转换错误。
39 1
|
1月前
|
IDE 前端开发 Java
怎样避免 Java 中的 NoSuchFieldError 异常
在Java中避免NoSuchFieldError异常的关键在于确保类路径下没有不同版本的类文件冲突,避免反射时使用不存在的字段,以及确保所有依赖库版本兼容。编译和运行时使用的类版本应保持一致。
76 7
|
1月前
|
Java 编译器
如何避免在 Java 中出现 NoSuchElementException 异常
在Java中,`NoSuchElementException`通常发生在使用迭代器、枚举或流等遍历集合时,尝试访问不存在的元素。为了避免该异常,可以在访问前检查是否有下一个元素(如使用`hasNext()`方法),或者使用`Optional`类处理可能为空的情况。正确管理集合边界和条件判断是关键。
81 6
|
1月前
|
Java
Java异常捕捉处理和错误处理
Java异常捕捉处理和错误处理
68 1
|
1月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
76 2
|
1月前
|
Java
如何在 Java 中处理“Broken Pipe”异常
在Java中处理“Broken Pipe”异常,通常发生在网络通信中,如Socket编程时。该异常表示写入操作的另一端已关闭连接。解决方法包括:检查网络连接、设置超时、使用try-catch捕获异常并进行重试或关闭资源。
117 5
|
1月前
|
存储 安全 Java
如何避免 Java 中的“ArrayStoreException”异常
在Java中,ArrayStoreException异常通常发生在尝试将不兼容的对象存储到泛型数组中时。为了避免这种异常,确保在操作数组时遵循以下几点:1. 使用泛型确保类型安全;2. 避免生类型(raw types)的使用;3. 在添加元素前进行类型检查。通过这些方法,可以有效防止 ArrayStoreException 的发生。
45 3
|
2月前
|
人工智能 Oracle Java
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
45 2