异常(下)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 代码块。多余的 catch 代码块(本意用于反馈并处理异常,但是画蛇添足) 会使进程进行多余的判断,增加CPU的运行压力,浪费系统资源。

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


总结

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

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵果森森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值