throw和throws的区别

在学习两者区别前,先了解一下什么是throw,什么是throws吧,有需要的小伙伴可以赋值代码自己去尝试。

throw

throw关键字用于显式抛出异常,抛出的时候是抛出的是一个异常类的实 例化对象。

在异常处理中,try语句要捕获的是一个异常对象,那么此异常对象也可以自己抛出。

		public static void main(String[] args) {
            //System.out.println(10/0);//由虚拟机在运行时出现异常,抛出一个此类的对象
            /*
            Exception in thread "main" java.lang.ArithmeticException: / by zero
	           at com.ff.javaexception.day2.ExceptionDemo5.main(ExceptionDemo5.java:7)
             */

            try {
                  subFileType(null);
            } catch (Exception e) {
                  e.printStackTrace();
                  System.out.println(e.getMessage());
            }

       }


      public static String subFileType(String fileName){
            if(fileName==null){
                //在方法体中,主动显示的抛出一个对用的异常对象,告知(通知)方法调用处,传入的数据有问题
               throw new NullPointerException("文件名为null了");
            }
         return fileName.substring(fileName.lastIndexOf(".")+1);
      }

throws

throws,定义一个方法的时候可以使用throws关键字声明,表示此方法不处理异常,而交给方法调用处进行处理。

任何方法都可以使用throws关键字声明异常类型,包括抽象方法。

子类重写父类中的方法,子类方法不能声明抛出比父类类型更大的异常(针对编译期异常)。

public abstract class ExceptionDemo4 {
      
      abstract void eat() throws Exception;

}

public class Demo extends ExceptionDemo4 {

    /*
      方法重写父类方法
       返回值,方法名,参数必须一样
       访问权限修饰符 大于等于父类方法权限
       声明的异常必须小于或等于父类声明的异常
     */
    @Override
    public void eat() throws UnsupportedEncodingException,Exception {

    }
}

使用了throws的方法,调用时必须处理声明的异常,要么使用try-catch,要么继续使用throws声明。

        public static void main(String[] args) {
        try {
            test1();
        } catch (UnsupportedEncodingException e) {
            System.out.println("编码不支持");
        }catch (ParseException p){
            System.out.println("日期解析异常");
        }catch (NullPointerException n){
            System.out.println("对象为空");
        }
        System.out.println("aaaaa");
    }

    public  static void test1() throws UnsupportedEncodingException, ParseException {
        test2();
    }

    public  static void test2() throws UnsupportedEncodingException, ParseException {
        test3();
    }

    /*
    throws NullPointerException 运行时异常 声明为运行时异常,方法调用处可以处理也可以不处理
           UnsupportedEncodingException 声明为编译期异常,那么调用在编译期间必须处理
           一般情况下,throws后面一般都声明的是编译期异常明抛出
           一般情况下,位于底层的方法都选择向上声
     */
    public  static void test3() throws NullPointerException, UnsupportedEncodingException, ParseException {
           String s = "中国";
           s.getBytes("gbk");

        SimpleDateFormat sdf = new SimpleDateFormat("");
        sdf.parse("");
    }

throw和throws的区别

throw用于方法体中,用来抛出一个实际的异常对象,使用throw后,要么使用try catch捕获异常,要么使用throws声明异常 。

throws用于方法声明处,用来声明该方法可能发生的异常类型,可以是

多个异常类型,用来强制调用该方法时处理这些异常。

抽象方法也可以使用throws。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值