JAVA高级基础(24)---throw抛出异常及Throw和Throws的区别和自定义异常

版权声明:如需转载请标明出处 https://blog.csdn.net/yj201711/article/details/84836001

当异常发生时,获取异常信息

    1、e.printStackTrace();打印异常的堆栈信息
                    java.lang.ArithmeticException: / by zero(by zero就是它的字符串信息)
                    at org.lanqiao.exception.demo.FinallyDemo.main(FinallyDemo.java:10)
    2、e.getMessage();返回异常的信息字符串  / by zero

异常的分类

  1. 编译期异常都是Exception的直接子类
  2. 运行时异常都是RuntimeException的子类

主动抛出异常

在方法内部,throw new 异常();

  • new Exception ("异常信息的描述")就称为主动抛出一个编译期异常
  • new RuntimeException("异常信息的描述")    就称为主动抛出一个运行时异常

Throws 和Throw的区别:(面试题)

  1. 从声明的位置:Throws 声明抛出一个异常  在方法上;Throw  声明抛出一个异常  在方法内
  2. 抛的目标:Throws 抛出的是异常的类型;Throw 抛出的是异常的对象
  3. 抛出的异常数量:Throws 可以抛出多种类型的异常,不同的异常类型间,使用逗号分割;Throw 以此只能抛出一个异常对象
  4. 异常的发生:Throws 表示方法有可能存在一下异常,但实际并不一定回发生; Throw 表示抛出一个异常对象,所以在执行该方法的时候,就一定会抛出异常

异常的处理策略

    对于编译期异常必须进行处理,如果不处理,程序会报错,无法执行。

如何处理:
            如果自己很清楚该异常的处理,则自己处理,就不需要将异常暴露出来
            如果你自己不清楚该异常如何处理,并且你需要让方法的调用者清楚当前方法存在异常。那么就不需要自己处理,直接将异常抛出给方法的调用者,有方法的调用者来决定处理的方式。

自定义异常

举例:输入学生年龄的时候,0--100 如果不在该范围之内,则表示输入的年龄是一种异常。

自定义编译期异常:
 

        public class MyException extends Exception{
            public MyException() {
                super();
            }
            public MyException(String message) {
                super(message);
                
            }
            
        }    

自定义运行时异常 :  

    public class MyRuntimeException extends RuntimeException{    
        public MyRuntimeException() {
            super();
            
        }
        public MyRuntimeException(String message) {
            
            super(message);
        }
    }        

  

猜你喜欢

转载自blog.csdn.net/yj201711/article/details/84836001