我们也可以自己定义异常——>即 自定义异常
自定义异常一般不算在异常的分支体系中 通常要么是 运行时异常 要么是 编译时异常
步骤:
1.自己描述一个异常类 比如ArrayBoxOutOfBoundsException
2.让我们自己的类继承
若继承的是RunTime——>运行时异常(不需要必须添加处理手段)
若继承的是Exception——>编译时异常(必须添加处理手段)
3.创建一个当前自定义异常类的现象
通过throw关键字(注意不是throws) 主动产生异常
4.当我们设计方法时 之前没有相关的异常能描述我的问题时
才会用到自定义异常
继承RuntimeException 运行时异常:
public class TestMyException extends RuntimeException{
//自定义一个异常类
//继承RuntimeException就是运行时异常
public TestMyException(){}
public TestMyException(String msg){
super(msg);//若想说明自己的异常原因 可以这样设置
}
}
public void testMyException(){
System.out.println("测试自定义方法执行了");
if(3>2){
throw new TestMyException("说明异常情况");
}
}
public static void main(String[] args) {//主方法也可以抛出异常 但是通常不这么做 因为异常只能抛给虚拟机了 都没人处理
Test t = new Test();
t.testMyException();
}
继承Exception 编译时异常:
public class TestMyException extends Exception{
//自定义一个异常类
//继承Exception就是编译时异常
public TestMyException(){}
public TestMyException(String msg){
super(msg);//若想说明自己的异常原因 可以这样设置
}
}
public void testMyException() throws TestMyException{
System.out.println("测试自定义方法执行了");
if(3>2){
throw new TestMyException("说明异常情况");
//如果是编译时异常 光抛出还不行 还要处理异常
}
}
public static void main(String[] args) {//主方法也可以抛出异常 但是通常不这么做 因为异常只能抛给虚拟机了 都没人处理
Test t = new Test();
try{
t.testMyException();//如果这里不捕获 会冒红线
}catch (Exception e){
e.printStackTrace();
}
}