温故确实可以知新
1.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);
}
}
}
2.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));
}
}
}
3.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;
}
4.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]);
}
}
}
5.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));
}
}
}
总结:健壮的代码都要做判断,避免异常