文章目录
敲代码总报错??一运行就有异常??满屏红字心里慌??学会下面经典异常处理,妈妈再也不怕我一杯茶一根烟,一个bug找一天!!
一、异常是什么?
示例:总体来说,分为两大类Error和Exception
又细分为以下三种:
(1)编译错误:是因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置。
(2)运行时错误:是因为程序在执行时,运行环境发现了不能执行的操作。
(3)逻辑错误:是因为程序没有按照预期的逻辑顺序执行。
二、异常案例
1.java.util.InputMismatchException
输入类型不匹配异常
代码如下(示例):
private static void fun9() {
Scanner sc = new Scanner(System.in);
sc.nextInt();
System.out.println("如果用户输入字符串就会报错");
}
Scanner的.nextInt()方法只能接收int类型的值
2.java.lang.StackOverflowError
内存空间溢出错误,方法递归调用中,经常发生
代码如下(示例):
private static void fun8() {
System.out.println("我调我自己");
fun8();
}
错误不是异常,就像这个案例,自己调自己的死循环,造成的内存空间溢出
3.java.lang.NumberFormatException
数字格式化异常
代码如下(示例):
private static void fun7() {
double a=12.5;
System.out.printf("我叫小周,今年%d岁了",a);
}
%d 只能引用整数类型的变量
4.java.lang.ArrayIndexOutOfBoundsException
数组下标越界
代码如下(示例):
private static void fun6() {
int[] arr= new int[1];
arr[0]=1;
arr[1]=2;
}
常见的数组下标越界,遍历的时候也经常遇见。下标超出了数组的长度
5.java.lang.ArithmeticException
数学运算异常
代码如下(示例):
private static void fun5() {
int c=6/0;
System.out.println(c);
}
基本的数学法则,0不能当分母
6.OutOfMemoryError
内存溢出错误
代码如下(示例):
private static void fun4() {
ArrayList list = new ArrayList();
list.add("曹操");
list.add("貂蝉");
for (int i = 0; i < list.size(); i++) {
list.add("吕布");
}
System.out.println(list);
}
经典的list原理,添加一个元素的时候,list会自己增加一个长度,这就导致了i永远小于list.size(),造成死循环,最后导致内存溢出
7.java.lang.NullPointerException
空指针异常:对象为空,并且调用相应方法。
代码如下(示例):
private static void fun3() {
String s =null;
System.out.println(s.equals("hello"));
//输出为null,所以对象为空不一定出现异常,但是调用方法会出现异常
ArrayList list = null;
System.out.println(list);
}
8.java.text.ParseException
时间格式化异常,SimpleDateFormart中经常发生
代码如下(示例):
private static void fun2() {
//时间格式化异常 与设定的类型不匹配 "-""/"
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//String -->Date
Date d = null;
try {
d = s.parse("2020-12/20 00:00:01");
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(d);
//Date -->String
String s1 = s.format(new Date());
System.out.println(s1);
}
定义的是yyyy-MM-dd,输入的是2020-12/20,-和/不匹配
9.java.lang.ClassCastException
类型转换异常,向下转型中经常发生
代码如下(示例):
private static void fun() {
//TreeSet 使用add添加方法 添加的不是基本数据类型 没有比较器 出现的类型转换异常
TreeSet<Dog> set = new TreeSet<>();
set.add(new Dog());
System.out.println(set);
}
基本类型可以用自带的自然排序,而对象无法比较,出现的类型转换错误。
总结
报错或者出现异常时,根据提示的行数和报错出现的异常类。找到自己写错的地方,传值时的类型不匹配,还是没有初始化就调用了方法。没有解决不了的bug,还是解决不了就面向百度编程。