throw和throws的区别是啥,各自有什么用处啊?

来源:1-9 经验总结

如果我是DJ我是DJ我是DJ我是DJ

2018-05-28 19:59

这是自己写的这个模拟借书软件的代码  希望可以帮到大家

https://img.mukewang.com/5b0bef0000019e7109230612.jpg

写回答 关注

4回答

  • RaymondSH
    2018-05-30 09:16:03
    已采纳

    throw是抛出一个异常类的对象(是一个实例),throws抛出异常类

    在Java中,把程序的业务实现代码放在try块中定义,所有的异常处理逻辑放在catch块中完成。如果执行try块中的代码出现异常,系统就会自动生成一个异常对象,该异常对象被提交给Java运行时环境,这个过程被称为抛出异常。当Java运行时环境收到异常对象时,会寻找能处理该异常对象的catch块,如果找到合适的catch块,则将该异常对象交给该catch块处理,这个过程称为捕获异常,如果Java运行时环境找不到捕获异常的catch,就会传给该方法的调用者。如,main方法调用A方法,A方法调用B方法,B方法调用C方法。。。。,如果在C方法中发生异常,只要抛出了异常没有被捕获,或者捕获异常处理后又重新抛出了异常,那么异常就会传给该方法的调用者(B方法),B方法又传给A方法,A方法传给main方法,如果main方法依然没有处理该异常,JVM会终止该程序,并打印异常的跟踪栈信息

    如果抛出IndexOutBoundsException异常,你可以打印一句话“数组越界”,也可以打印异常跟踪栈信息,同样,如果抛出NumberFormatException异常,你也可以打印“数字格式异常”,也可以打印异常跟踪栈信息,看你如何处理

    如果我是DJ...

    非常感谢!

    2018-06-11 17:45:45

    共 1 条回复 >

  • 如果我是DJ我是DJ我是DJ我是DJ
    2018-06-11 18:07:47

    if (scanner.hasNextInt()) {

    int id = scanner.nextInt();

    if (id>ss.length) {

    System.out.println("您输入的书号有误,请重新输入");

    }else{

    System.out.println("寻找完毕:《"+ss[id-1]+"》的书号是"+id);

    }

    }else{

    boolean b = false;

    String name = scanner.next();

    for(int i = 1;i<=ss.length; i++){

    if (ss[i-1].equals(name)) {

    System.out.println("寻找完毕:《"+ss[i-1]+"》的书号是"+(i));

    b = true;

    break;

    }

    }

    if(!b) {

    System.out.println("找不到这本书,请重新输入书名");

    }

    }


  • 一轮温柔月
    2018-06-07 17:07:36

     问个问题。 你拿name 和数组里面的名字比较时  为什么是 i=1开始.  而且还是SS[i+1]?

    如果我是DJ...

    这个 我得回头捋一捋 我忘了我的思路了 嘿嘿 因为书号是从1开始的 比如书的下标是2 那么他的书号就是3 ss是数组名 ss[i+1] 就是数组里,下标为几的书号+1 比如我输入4 , 那他就输出 3+1 i最大是三 后半部分是我的失误,有错误和BUG 谢谢提醒

    2018-06-11 17:54:51

    共 1 条回复 >

  • RaymondSH
    2018-05-28 21:15:44

    throws用于声明方法中可能抛出的异常 

    example:public static void main(String[]  args) throws Exception

    throw用于抛出一个具体的异常类对象,可以单独作为语句使用

    如果throw语句抛出的异常是Checked异常,则该throw语句要么处于try块处理,显式捕获该异常,要么放在一个带throws声明抛出的方法中(将该异常交给该方法的调用者处理)

    如果throw语句抛出的是Runtime异常,则该语句可以不用放在try块中,也不用放在带throws声明抛出的方法中,程序可以使用try。。catch来捕获处理异常,也可以不用理会该异常,把该异常交给该方法的调用者处理

    example: 

    public class ThrowExamp

    {      

            public static void main(String[] args)

            {

                    try

                    {       

                            throwChecked(-3);  

                      }

                     catch(Exception e)

                     {

                             System.out.println(e.getMessage());

                      }

                      throwRuntime(3);

    }

    public static void throwChecked(int a) throws Exception

    {        

                if(a>0)

                {

                        //自行抛出Exception异常,必须处于try块中,或带throws声明的方法中

                        throw new Exeption("a 不合法");

                }

    }

    public static void throwRuntime(int a)

    {    

                if(a>0)

                {

                        //自行抛出Runtime异常,既可以显示捕获该异常,也可以不用理会该异常,交给方法调用者处理

                        throw new RuntimeException("a不合法");

                }


    如果我是DJ...

    原来是这样 throw 是定义异常 throws 是含有异常的方法抛出异常 可是抛出了异常的方法一旦调用就会报错啊,为什么不直接放到try catch中呢 还有就是抛出的异常 类型不一样 处理方式也不一样吗?

    2018-05-29 21:21:31

    共 1 条回复 >

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题