Throwable 是java语言中所有错误或异常的超类
错误--Error 普通类,是一个大问题
一般是语法格式写错了,类找不到了,或者内存溢出等,会产生Error
异常--Exception 普通类,相对是一个小问题
一般是逻辑有问题会产生该异常
--非RuntimeException (编译时期异常)
其中之一是 ParseException ...
--RuntimeException (运行时期异常)
--ClassCastException 向下转型时报的异常
--NullPointerException 空转异常
--IndexOutOfBoundsException
--ArrayIndexOutOfBoundsException 数组索引异常
--StringIndexOutOfBoundsException 字符串索引异常
如何处理异常?
针对编译时期异常(非 RuntimeException ) 的处理
1. 捕获 :
try{
出现红线的代码
} catch(异常类名 对象名(变量名)){
//可以写Exception
处理方案
} finally {
释放资源代码
}
点 try/catch 就会自动生成
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public static void main(String[] args) {
try {
String s = "2022/04/20";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date date = sdf.parse(s);
System.out.println(date);
} catch(ParseException a) {//可以写Exception
System.out.println("打球吗");
}
System.out.println("不去");
}
2.主动刨
格式;thorw 异常对象
写在上面位置;写在方法中
public static void main(String[] args) throws Exception {
Person p = new Person();
p.eat("大白菜");
//p.eat("澳洲肥牛肉");
}
class Person{
public void eat(String food) throws Exception{
if(food.endsWith("肉")) {
System.out.println("我喜欢吃" + food);
} else {
//主动抛异常
//Exception a = new Exception();
//throws e
throw new Exception("我只喜欢吃肉");
}
}
}
输出我喜欢吃澳洲肥牛肉
编译异常需要抛,运行异常不用
3.被动刨:
点 add thorws declaratin
格式;thorws 异常类名
写在方法的声明上
在子父类中,如果父亲没有抛,子类重写方法也不能抛。
而且就算父亲抛异常了,子类抛的异常的类只能是父亲异常的子类或者本身·
public static void main(String[] args) throws ParseException {
String s = "2022/04/20";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date date = sdf.parse(s);
4.自定义异常
//自定义异常类
public class Myexception extends Exception{
public Myexception() {}
public Myexception(String message) {
super(message);
}
}
public class Myexception extends Exception{
public class Demo04 {
//使用自定义异常类
public static void main(String[] args) throws Myexception {
Person p = new Person();
p.eat("大白菜"); //使用自定义异常类
//p.eat("澳洲肥牛肉");
}
}
class Person{
//使用自定义异常类
public void eat(String food) throws Myexception {
if(food.endsWith("肉")) {
System.out.println("我喜欢吃" + food);
} else {
//主动抛异常
//Exception a = new Exception();
//throws e
//throw new RuntimeException("我只喜欢吃肉");
//使用自定义异常类
throw new Myexception("我只喜欢吃肉");
}
}
}
输出Exception in thread "main" Exception.Myexception: 我只喜欢吃肉
自定义异常类要是 RuntimeException类型的