我们也可以自己定义异常——>即 自定义异常
    自定义异常一般不算在异常的分支体系中 通常要么是 运行时异常 要么是 编译时异常
    步骤:
    1.自己描述一个异常类 比如ArrayBoxOutOfBoundsException
    2.让我们自己的类继承
    若继承的是RunTime——>运行时异常(不需要必须添加处理手段)
    若继承的是Exception——>编译时异常(必须添加处理手段)
    3.创建一个当前自定义异常类的现象
    通过throw关键字(注意不是throws) 主动产生异常
    4.当我们设计方法时 之前没有相关的异常能描述我的问题时
    才会用到自定义异常

    继承RuntimeException 运行时异常:

    1. public class TestMyException extends RuntimeException{
    2. //自定义一个异常类
    3. //继承RuntimeException就是运行时异常
    4. public TestMyException(){}
    5. public TestMyException(String msg){
    6. super(msg);//若想说明自己的异常原因 可以这样设置
    7. }
    8. }
    1. public void testMyException(){
    2. System.out.println("测试自定义方法执行了");
    3. if(3>2){
    4. throw new TestMyException("说明异常情况");
    5. }
    6. }
    7. public static void main(String[] args) {//主方法也可以抛出异常 但是通常不这么做 因为异常只能抛给虚拟机了 都没人处理
    8. Test t = new Test();
    9. t.testMyException();
    10. }

    继承Exception 编译时异常:

    1. public class TestMyException extends Exception{
    2. //自定义一个异常类
    3. //继承Exception就是编译时异常
    4. public TestMyException(){}
    5. public TestMyException(String msg){
    6. super(msg);//若想说明自己的异常原因 可以这样设置
    7. }
    8. }
    1. public void testMyException() throws TestMyException{
    2. System.out.println("测试自定义方法执行了");
    3. if(3>2){
    4. throw new TestMyException("说明异常情况");
    5. //如果是编译时异常 光抛出还不行 还要处理异常
    6. }
    7. }
    8. public static void main(String[] args) {//主方法也可以抛出异常 但是通常不这么做 因为异常只能抛给虚拟机了 都没人处理
    9. Test t = new Test();
    10. try{
    11. t.testMyException();//如果这里不捕获 会冒红线
    12. }catch (Exception e){
    13. e.printStackTrace();
    14. }
    15. }