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 示例代码运行截图

在这里插入图片描述

总结

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

相关文章

  • 在Maven下代理服务器设定的方式

    在Maven下代理服务器设定的方式

    今天小编就为大家分享一篇关于在Maven下代理服务器设定的方式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Java并发编程之同步容器与并发容器详解

    Java并发编程之同步容器与并发容器详解

    今天给大家带来的文章是Java并发编程的相关知识,文中对java同步容器与并发容器做了非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • JDK源码分析之String、StringBuilder和StringBuffer

    JDK源码分析之String、StringBuilder和StringBuffer

    这篇文章主要给大家介绍了关于JDK源码分析之String、StringBuilder和StringBuffer的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用jdk具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • 使用Java将Excel转换为Text的实现方法

    使用Java将Excel转换为Text的实现方法

    在日常的数据处理和系统集成中,我们经常会遇到需要将Excel文件中的数据提取出来,并以纯文本格式进行处理的场景,将Excel转换为Text是一项基础而重要的任务,本文将向您介绍如何利用强大的 Spire.XLS for Java 库,在Java应用程序中轻松实现Excel到Text的转换
    2025-10-10
  • idea导入module的正确实现方法

    idea导入module的正确实现方法

    文章介绍了在IntelliJ IDEA中正确导入Spring Cloud项目module的方法:通过File→New→Module from Existing Sources选择路径并点击OK,随后右击pom.xml添加为Maven项目,最后运行Maven Install生命周期完成编译,强调操作步骤的重要性,避免因失误导致问题
    2025-07-07
  • ClassLoader类加载源码解析

    ClassLoader类加载源码解析

    这篇文章主要为大家详细解析了ClassLoader类加载源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • Java集合中获取数据前驱和后继元素的实现

    Java集合中获取数据前驱和后继元素的实现

    使用一致性hash时,如何找到一个hash值对应的临近节点,可以使用集合中获取数据的前驱和后继元素实现,所以本文给大家介绍了Java集合中获取数据前驱和后继元素的实现,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-05-05
  • SpringBoot多数据源切换实现代码(Mybaitis)

    SpringBoot多数据源切换实现代码(Mybaitis)

    实际工作中我们会遇到springboot项目初始化启动时候,不能指定具体连接哪个数据源的时候,不同的接口连接不同的数据源或者前端页面指定连接某个数据源等等情况,就会遇到动态数据源切换的问题,需要的朋友可以参考下
    2022-04-04
  • Java 中的进制转换与编码机制详解

    Java 中的进制转换与编码机制详解

    在 Java 编程领域,进制转换是一项极为基础且重要的技能,下面给大家介绍Java 中的进制转换与编码机制,感兴趣的朋友一起看看吧
    2025-04-04
  • Java泛型类型擦除

    Java泛型类型擦除

    这篇文章主要为大家详细介绍了Java泛型类型擦除,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03

最新评论