java中的常见异常及处理方式

java.lang.IllegalStateException: Duplicate key 张三

异常报错示例:
Exception in thread "main" java.lang.IllegalStateException: Duplicate key 张三
	at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
	at java.util.HashMap.merge(HashMap.java:1253)
	at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
	at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)

报错代码示例:
        AChang a = new AChang();
        a.setId(2);
        a.setClassName("张三");
        a.setAge(18);

        AChang b = new AChang();
        b.setId(4);
        b.setClassName("李四");
        b.setAge(20);

        AChang c = new AChang();
        c.setId(2);
        c.setClassName("王五");
        c.setAge(22);

        List<AChang>  myList= new ArrayList<>();
        myList.add(a);
        myList.add(b);
        myList.add(c);
       

        Map<Long, String> entityMap = myList.stream().collect(Collectors.toMap(AChang::getId, AChang::getClassName));
报错原因分析:

直接使用java8的stream方式,报错也很清楚,就是key重复 [a.setId(2)和c.setId(2) 两个值重复],也就是说在使用toMap方法时,有重复的key值导致了这个报错

报错解决方法:

java8中转换成map时,提供了第三个参数,代表的是重复key的值该如何存放。
比如 下面代码:当出现重复时,存放最后一次的value,

        Map<Long, String> entityMap = myList.stream().collect(Collectors.toMap(AChang::getId, AChang::getClassName,(oldValue,newValue) -> newValue));

java.lang.NumberFormatException: For input string: “张三”

异常报错示例:
Exception in thread "main" java.lang.NumberFormatException: For input string: "张三"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.valueOf(Integer.java:766)

报错代码示例:
String str = "张三";
System.out.println(Integer.valueOf(str));
报错原因分析:

数字格式异常。当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常。

java.lang.ArrayIndexOutOfBoundsException: 5

异常报错示例:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
	at com.example.chang.controller.SS.main(SS.java:62)
报错代码示例:
int[] arr = {1,2,3};
System.out.println(arr[5]);
报错原因分析:

数组索引越界异常。数组的下标是从0开始的;当对数组的索引值为负数或大于等于数组大小时抛出。

java.lang.IndexOutOfBoundsException: Index: 3, Size: 2

异常报错示例:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 2
	at java.util.ArrayList.rangeCheck(ArrayList.java:653)
	at java.util.ArrayList.get(ArrayList.java:429)
	at com.example.chang.controller.SS.main(SS.java:67)
报错代码示例:
        List<String> listStr = new ArrayList<>();
        listStr.add("张三");
        listStr.add("李四");
        System.out.println(listStr.get(3));
报错原因分析:

索引越界异常。列表的下标是从0开始的;当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。

java.lang.StringIndexOutOfBoundsException: String index out of range: 9

异常报错示例:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 9
	at java.lang.String.substring(String.java:1963)
报错代码示例:
String str1 = "abcdefg";
System.out.println(str1.substring(5,9));
报错原因分析:

字符串索引越界异常。当使用索引值访问某个字符串中的字符,而该索引值小于0或大于等于序列大小时,抛出该异常。

java.lang.ArithmeticException: / by zero

异常报错示例:
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.example.chang.controller.SS.main(SS.java:73)
报错代码示例:
        int i = 5;
        int y = 0;
        System.out.println(i/y);
报错原因分析:

算术条件异常。例如:整数除零等

java.lang.ClassNotFoundException: AA

异常报错示例:
Exception in thread "main" java.lang.ClassNotFoundException: AA
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:264)
报错代码示例:
Class a1 = Class.forName("AA");
AChang a2 =  (AChang) a1.newInstance();
报错原因分析:

找不到类而报异常。AA.java类没有找到 ,当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。

java.lang.InstantiationException: com.example.chang.controller.AInterface

异常报错示例:
Exception in thread "main" java.lang.InstantiationException: com.example.chang.controller.AInterface
	at java.lang.Class.newInstance(Class.java:427)
	at com.example.chang.controller.SS.main(SS.java:76)

报错代码示例:
Class a1 = Class.forName("com.example.chang.controller.AInterface");
AInterface a2 =  (AInterface) a1.newInstance();
报错原因分析:

实例化异常。AInterface是一个接口类;当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常。

java.lang.ClassCastException:

异常报错示例:
Exception in thread "main" java.lang.ClassCastException: com.example.chang.controller.AChang cannot be cast to com.example.chang.controller.BankBo
	at com.example.chang.controller.SS.main(SS.java:82)
报错代码示例:
Class a1 = Class.forName("com.example.chang.controller.AChang");
BankBo a2 =  (BankBo) a1.newInstance();
报错原因分析:

类造型异常。假设有类AChang和BankBo (AChang不是BankBo 的父类或子类),a1是AChang的实例,那么当强制将a1构造为类BankBo 的实例时抛出该异常。该异常经常被称为强制类型转换异常。

java.lang.NoSuchFieldException

报错原因分析:

属性不存在异常。当访问某个类的不存在的属性时抛出该异常。一般你一个类中引用其他lib包,当lib包版本不同时类某个属性可能不存在。

java.lang.NoSuchMethodException

报错原因分析:

方法不存在异常。当访问某个类的不存在的方法时抛出该异常。一般你一个类中引用其他lib包,当lib包版本不同时类某个方法可能不存在。

java.lang.IllegalAccessError:

报错原因分析:

违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。在应用系统启动时报错,看看引用的包版本是否有冲突。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值