java异常中throw和throws的区别及说明

 更新时间:2023年08月01日 14:14:14   作者:kobe-fly  
这篇文章主要介绍了java异常中throw和throws的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

java异常throw和throws的区别

throws和throw

throws:用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用我我就抛给谁。

  • 用在方法声明后面,跟的是异常类名
  • 可以跟多个异常类名,用逗号隔开
  • 表示抛出异常,由该方法的调用者来处理
  • throws表示出现异常的一种可能性,并不一定会发生这些异常

throw:则是用来抛出一个具体的异常类型。

  • 用在方法体内,跟的是异常对象名
  • 只能抛出一个异常对象名
  • 表示抛出异常,由方法体内的语句处理
  • throw则是抛出了异常,执行throw则一定抛出了某种异常  

分别介绍

throws在方法后边声明异常,其实就是自己不想对异常做出任何的处理,告诉别人自己可能出现的异常,交给别人处理,然别人处理

package com.xinkaipu.Exception;
class Math{
    public int div(int i,int j) throws Exception{
        int t=i/j;
        return t;
    }
}
public class ThrowsDemo {
    public static void main(String args[]) throws Exception{
        Math m=new Math();
   }
}

throw:就是自己处理一个异常,有两种方式要么是自己捕获异常try...catch代码块,要么是抛出一个异常(throws 异常)

package com.xinkaipu.Exception;
public class TestThrow
{
    public static void main(String[] args) 
    {
        try
        {
            //调用带throws声明的方法,必须显式捕获该异常
            //否则,必须在main方法中再次声明抛出
            throwChecked(-3);            
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
        //调用抛出Runtime异常的方法既可以显式捕获该异常,
        //也可不理会该异常
        throwRuntime(3);
    }
    public static void throwChecked(int a)throws Exception
    {
        if (a > 0)
        {
            //自行抛出Exception异常
            //该代码必须处于try块里,或处于带throws声明的方法中
            throw new Exception("a的值大于0,不符合要求");
        }
    }
    public static void throwRuntime(int a)
    {
        if (a > 0)
        {
            //自行抛出RuntimeException异常,既可以显式捕获该异常
            //也可完全不理会该异常,把该异常交给该方法调用者处理
            throw new RuntimeException("a的值大于0,不符合要求");
        }
    }
}

解析java中的throw和throws关键字

throws关键字

1.1 作用

向上抛异常,把异常交给调用处处理,实际上自身并没有处理异常

1.2 原理

一旦方法体出现异常,仍会在异常代码出生成一个异常类的对象,当此对象满足throws后的异常类型时,就会被抛出,异常代码后续的代码,均不执行。

1.3 如何用

  • 1.3.1 语法
访问权限修饰符 返回值类型 方法名(形参列表) throws 异常类型(异常类){
    //实际书写的位置是形参列表的最后一个括号后面
}
//出现编译时异常,又不想自己处理,那就可以考虑向上抛出异常
  • 1.3.2 示例代码
package Work;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class TestDog {
    public static void main(String[] args) {
        try {
            f1();
        } catch (Exception e) {
            System.out.println("处理了");
            System.out.println(e.getMessage());
        }
        System.out.println("后面的代码");
    }
    public static void f1() throws FileNotFoundException {
        FileOutputStream fileOutputStream=new FileOutputStream("d:\\bc.md");
        //只要处理了异常,后面的代码都会顺利执行
        System.out.println("执行了没有");
    }
}
  • 1.3.3 示例代码运行截图

在这里插入图片描述

throw关键字

2.1 作用

手动制造一个异常,不符合条件的时候我们可以考虑去抛出一个异常,在调用处对异常进行逻辑的处理

2.2 如何用

  • 2.2.1 语法
访问权限修饰符 返回值类型 方法名(形参列表) {
    throw new Exception("展示的异常信息");
}
  • 2.2.3 示例代码

Dog类

package Work;
public class Dog {
    private String name;
    //名字
    private String type;
    //类型
    private int age;
    //年龄
    public Dog() {
    }
    public Dog(String name, String type, int age) throws Exception{
        this.name = name;
        this.type = type;
        setAge(age);
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) throws Exception{
        if(age<0||age>10){
            throw new Exception("年龄非法");
        }
        this.age = age;
    }
}

Test类

package Work;
public class Test{
    public static void main(String[] args) {
        try {
            Dog d1=new Dog("旺财","哈士奇",-9);
        } catch (Exception e) {
            //输入有误就打印异常信息
            System.out.println(e.getMessage());
        }
        System.out.println("后面的代码");
    }
}
  • 2.2.4 示例代码运行截图

在这里插入图片描述

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java中接口的多态详解

    Java中接口的多态详解

    大家好,本篇文章主要讲的是Java中接口的多态详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • 使用spring aop统一处理异常和打印日志方式

    使用spring aop统一处理异常和打印日志方式

    这篇文章主要介绍了使用spring aop统一处理异常和打印日志方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • maven springboot如何将jar包打包到指定目录

    maven springboot如何将jar包打包到指定目录

    这篇文章主要介绍了maven springboot如何将jar包打包到指定目录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • java+io+swing实现学生信息管理系统

    java+io+swing实现学生信息管理系统

    这篇文章主要为大家详细介绍了java+io+swing实现学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • java静态工具类注入service出现NullPointerException异常处理

    java静态工具类注入service出现NullPointerException异常处理

    如果我们要在我们自己封装的Utils工具类中或者非controller普通类中使用@Autowired注解注入Service或者Mapper接口,直接注入是报错的,因Utils用了静态方法,我们无法直接用非静态接口的,遇到这问题,我们要想法解决,下面小编就简单介绍解决办法,需要的朋友可参考下
    2021-09-09
  • java如何读取超大文件

    java如何读取超大文件

    这篇文章主要为大家详细介绍了java如何读取超大文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Java简单统计字符串中汉字,英文字母及数字数量的方法

    Java简单统计字符串中汉字,英文字母及数字数量的方法

    这篇文章主要介绍了Java简单统计字符串中汉字,英文字母及数字数量的方法,涉及java针对字符串的遍历、编码转换、判断等相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • JAVA使用hutool工具实现查询树结构数据(省市区)

    JAVA使用hutool工具实现查询树结构数据(省市区)

    今天通过本文给大家分享JAVA使用hutool工具实现查询树结构数据(省市区),代码分为表结构和数据结构,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-08-08
  • 浅谈spring中用到的设计模式及应用场景

    浅谈spring中用到的设计模式及应用场景

    下面小编就为大家带来一篇浅谈spring中用到的设计模式及应用场景。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • java自定义ClassLoader加载指定的class文件操作

    java自定义ClassLoader加载指定的class文件操作

    这篇文章主要介绍了java自定义ClassLoader加载指定的class文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02

最新评论