认识异常
异常Exception,是指程序运行时, 由于输入错误、网络、程序逻辑等原因导致运行时出现的问题。出现异常时,程序会暂时中断执行,并根据产生异常的原因,创建对应异常类型的异常对象,并抛出给JVM捕获处理。
Java中的常见异常:
1.NullPointerException:空指针异常
2.ClassNotFoundException:类无法找到异常
3.NumberFormatException:数字格式化异常
4.IndexOutOfBoundsException:下标越界异常
5.IllegalArgumentException:不合法参数异常
6.ClassCastException:类型转换异常
7.SQLException:SQL异常
8.NoSuchMethodException:方法不存在异常
Error:代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,sun公司会把这些问题封装成Error对象,Error是给sun公司自己用的,因此开发人员不用管它。
Exception:类型的异常是可以在应用程序中进行捕获并处理的,通常遇到这种错误,应对其进行处理,使应用程序可以继续正常运行。
- 运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)
- 编译时异常:编译阶段就会出现错误提醒的。 (如:日期解析异常)
异常处理
- 第一种:使用throws在方法上声明
public class ExceptionTest {
public static void main(String[] args) throws ParseException{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse("2028-11-11 10:24");
System.out.println(d);
}
}
- 第二种:使用try...catch语句块异常进行处理
public class ExceptionTest {
public static void main(String[] args) throws ParseException{
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse("2028-11-11 10:24");
System.out.println(d);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
自定义异常
先写一个异常类
public class MyException extends Exception{
public MyException () {
}
public MyException (String message) {
super(message);
}
}
再写一个测试类,在测试类中定义一个saveAge(int age)方法,对age判断如果年龄不在0~100之间,就抛出一个MyException 异常对象给调用者。
public class ExceptionTest {
public static void main(String[] args) {
try {
saveAge(225);
} catch (AgeIllegalException e) {
e.printStackTrace();
}
}
public static void saveAge(int age){
if(age > 0 && age < 100){
System.out.println("年龄被成功保存:" + age);
}else {
throw new MyException("年龄不在范围内");
}
}
}
自定义异常可能是编译时异常,也可以是运行时异常
1.如果自定义异常类继承Excpetion,则是编译时异常。
特点:方法中抛出的是编译时异常,必须在方法上使用throws声明,强制调用者处理。
2.如果自定义异常类继承RuntimeException,则运行时异常。
特点:方法中抛出的是运行时异常,不需要在方法上用throws声明。