Java异常解决

温故确实可以知新
ArithmeticException异常:一个整数“除以零”时
public class Test1 { public static void main(String[] args) { int b=0; System.out.println(1/b);// } } //当我们定义的被除数为整型时(short、int、long)会抛出此异常,被除数为整型时不可为零。
执行结果如图:
解决如上异常:
public class Test1 { public static void main(String[] args) { int b=0; if(b!=0){ System.out.println(1/b); } } }
NullPointerException空指针异常:访问外界传进来为null
public class Test2 { public static void main(String[] args) { String str = null; System.out.println(str.charAt(0)); } }
执行结果如图:
解决如上异常:
public class Test2 { public static void main(String[] args) { String str=null; if(str!=null){ System.out.println(str.charAt(0)); } } }
ClassCastException类型转换异常
class Animal { } class Dog extends Animal { } class Cat extends Animal { } public class Test3 { public static void main(String[] args) { Animal a = new Dog(); Cat c = (Cat) a;//子类转子类产生异常 } }
执行结果如图:
解决如上异常:
public class Test3 { public static void main(String[] args) { Animal a = new Dog(); if (a instanceof Cat) { //引用类型转换异常用关键字判断 Cat c = (Cat) a; } }
ArrayIndexOutOfBoundsException数组下标越界异常
public class Test4 { public static void main(String[] args) { int[] arr = new int[5]; System.out.println(arr[5]); } }
解决如上异常:
public class Test4 { public static void main(String[] args) { int[] arr = new int[5]; int a = 5; if (a < arr.length) { //增加关于边界的判断 System.out.println(arr[a]); } } }
NumberFormatException数字格式化异常
public class Test5 { public static void main(String[] args) { String str = "1234abcf"; System.out.println(Integer.parseInt(str)); } }
解决如上异常:
public class Test5 { public static void main(String[] args) { String str = "1234abcf"; Pattern p = Pattern.compile("^\\d+$"); //使用正则表达式解决 Matcher m = p.matcher(str); if (m.matches()) { // 如果str匹配代表数字的正则表达式,才会转换 System.out.println(Integer.parseInt(str)); } } }
总结:健壮的代码都要做判断,避免异常