异常
异常框架顶点是:Throwable,分为Error,Exception
- 检查型异常(Exception:如语法错误):必须处理
- 运行时异常(RuntimeException)
- 程序已经跑起来之后,抛出的异常.如空指针,类型转换异常等:可以不处理
- 错误(Error:JVM内部抛出,不是你现在应该操作的,和系统有关.如内存不够等):
- 也可以不处理,因为程序可能直接崩掉
java的方法不能单独调用,必须使用类或对象来调用.默认this.
public void aVoid(){
/*this.*/bVoid();
//throw new Error("This is a Error");//没有用
//throw new RuntimeException();
}
public void bVoid(){
aVoid();
}
throw主动抛出异常
idea快捷键:ctrl + alt + t = 快速try/catch
public static void main(String[] args) {
try {
new Demo01().aVoid();
//throw new Error("hello");//没有用
throw new Exception();
}catch(Exception e){
e.printStackTrace();
}catch (Throwable e) {
e.printStackTrace();
} finally {
}
}
自定义异常
继承Throwable,Exception和RuntimeException其中任意一个,都可以变成自定义异常类
自定义提示信息的方法有两种:重写toString() 或 传参给父类
重写toString方法:自定义提示信息
public class MyException extends RuntimeException/*RuntimeException*/{
private double number;
public MyException(){
//调不调用父类结果一样:打印类的全路径
super();
}
public MyException(double number){
this.number = number;
}
//--------------------------------------------------------------
//重写toString()后就不会打印类路径了,只打印返回的字符串
public String toString(){
return "MyException" + this.number;
}
}
实现构造方法,传参给父类:父类会打印message
public class MyExceptions extends Exception{
public MyExceptions(){}
//异常打印时会在类全路径的:后加上你你传进来的信息(message)
public MyExceptions(String message){
super(message);
}
}
catch是捕获块
- 对待异常不要偷懒
- 尽量处理异常,不要只是打印
public class Test {
public static void main(String[] args) {
try {
test(11);
} catch (MyExceptions/*MyExceptions*/ e) {
//自动调用toString方法
System.out.println(e);
}
}
/**
* 参数大于10就抛出异常
*/
static void test(double num) throws MyExceptions/*,MyException*/{
if(num > 10){
//throw new MyException(num);
throw new MyExceptions("自定义异常");
}
System.out.println("ok");
}
}