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中Base64和File之间互转代码示例

    Java中Base64和File之间互转代码示例

    这篇文章主要给大家介绍了关于Java中Base64和File之间互转的相关资料,Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法,需要的朋友可以参考下
    2023-08-08
  • 详谈异步log4j2中的location信息打印问题

    详谈异步log4j2中的location信息打印问题

    这篇文章主要介绍了详谈异步log4j2中的location信息打印问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • JDK14的新特性:instanceof模式匹配的使用

    JDK14的新特性:instanceof模式匹配的使用

    这篇文章主要介绍了JDK 14的新特性:instanceof模式匹配的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • IDEA之翻译器的使用Translation

    IDEA之翻译器的使用Translation

    这篇文章主要介绍了IDEA之翻译器的使用Translation,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • java ThreadPoolExecutor 并发调用实例详解

    java ThreadPoolExecutor 并发调用实例详解

    这篇文章主要介绍了java ThreadPoolExecutor 并发调用实例详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • SpringBoot整合Milvus的实现

    SpringBoot整合Milvus的实现

    本文主要介绍了SpringBoot整合Milvus的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 详解Spring Cloud Zuul 服务网关

    详解Spring Cloud Zuul 服务网关

    本篇文章主要介绍了详解Spring Cloud Zuul 服务网关,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • XSS攻击以及java应对xss攻击的解决方案

    XSS攻击以及java应对xss攻击的解决方案

    XSS是跨站脚本攻击Cross Site Scripting的缩写,为了和层叠样式表CSS加以区分,因此将跨站脚本攻击缩写为XSS,这篇文章主要给大家介绍了关于XSS攻击以及java应对xss攻击的解决方案,需要的朋友可以参考下
    2024-02-02
  • SpringBoot实现多端口监听的代码示例

    SpringBoot实现多端口监听的代码示例

    当你需要在同一个Spring Boot应用中,通过不同的端口来提供不同的服务或功能时,就需要实现多端口监听,所以本文给大家介绍了SpringBoot实现多端口监听的方法示例,并有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-09-09
  • Spring-cloud 注册服务提供者搭建方法

    Spring-cloud 注册服务提供者搭建方法

    本篇文章主要介绍了Spring-cloud 注册服务提供者搭建方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04

最新评论