提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、什么是异常?
异常是程序在“编译”或者“执行”的过程中可能出现的问题,注意:语法错误不算在异常体系中。
比如:数组索引越界、空指针异常、日期格式化异常,等等。
一、学习异常的意义
(1)异常一旦出现,如果没有提前处理,程序就会退出JVM虚拟机而终止。
(2)研究异常并且避免异常,然后提前处理异常,体现的是程序的安全,健壮性。
二、异常分类
Exception: java.lang包下,称为异常类,它表示程序本身可以处理的问题。
RuntimeException及其子类:运行时异常,编译阶段不会报错。(空指针异常,数组索引越界异常)
除RuntimeException之外所有的异常︰编译时异常,编译期必须处理的,否则程序不能通过编译。(日期格式化异常)。
(黑马程序员网课截图)
1.常见运行时异常
代码如下(数组越界异常):
public class test1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int [] a= {1,2,3}; //数组越界
System.out.println(a[3]);
}
}
结果:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
at demo3.test1.main(test1.java:8)
代码如下(空指针异常):
public class test1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
String str=null;
System.out.println(str.length());
}
}
结果:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null
at demo3.test1.main(test1.java:8)
代码如下(数学操作异常):
public class test1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int a=2/0;
System.out.println(a);
}
}
结果:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at demo3.test1.main(test1.java:7)
代码如下(类型转换异常):
public class test1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Object o=23;
String str=(String)o;
System.out.println(str);
}
}
结果:
Exception in thread "main" java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String (java.lang.Integer and java.lang.String are in module java.base of loader 'bootstrap')
at demo3.test1.main(test1.java:8)
代码如下(数字转换异常):
public class test1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
String str="23ac";
Integer a=Integer.valueOf(str);
System.out.println(a);
}
}
结果
Exception in thread "main" java.lang.NumberFormatException: For input string: "23ac"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:660)
at java.base/java.lang.Integer.valueOf(Integer.java:991)
at demo3.test1.main(test1.java:8)
2.常见编译时异常
代码如下(示例):
import java.sql.Date;
import java.text.SimpleDateFormat;
public class test1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
String date="1912-10-11 23:17:00";
SimpleDateFormat sim=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date da=sim.parse(date);
}
}
更改后:
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class test1{
public static void main(String[] args) throws ParseException {
// TODO 自动生成的方法存根
String date="1912-10-11 23:17:00";
SimpleDateFormat sim=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date da=sim.parse(date);
System.out.println(da);
}
}
结果:
Fri Oct 11 23:17:00 CST 1912