java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java异常throw和throws的区别

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

作者:kobe-fly

这篇文章主要介绍了java异常中throw和throws的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

java异常throw和throws的区别

throws和throw

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

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 如何用

访问权限修饰符 返回值类型 方法名(形参列表) throws 异常类型(异常类){
    //实际书写的位置是形参列表的最后一个括号后面
}
//出现编译时异常,又不想自己处理,那就可以考虑向上抛出异常
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("执行了没有");
    }
}

在这里插入图片描述

throw关键字

2.1 作用

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

2.2 如何用

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

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("后面的代码");
    }
}

在这里插入图片描述

总结

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

您可能感兴趣的文章:
阅读全文