为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

https://img1.sycdn.imooc.com//5b0bef0000019e7109230612.jpg

正在回答

4 回答

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异常,你也可以打印“数字格式异常”,也可以打印异常跟踪栈信息,看你如何处理

1 回复 有任何疑惑可以回复我~
#1

如果我是DJ我是DJ我是DJ我是DJ 提问者

非常感谢!
2018-06-11 回复 有任何疑惑可以回复我~

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("找不到这本书,请重新输入书名");

}

}


0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

如果我是DJ我是DJ我是DJ我是DJ 提问者

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

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不合法");

            }


0 回复 有任何疑惑可以回复我~
#1

如果我是DJ我是DJ我是DJ我是DJ 提问者

原来是这样 throw 是定义异常 throws 是含有异常的方法抛出异常 可是抛出了异常的方法一旦调用就会报错啊,为什么不直接放到try catch中呢 还有就是抛出的异常 类型不一样 处理方式也不一样吗?
2018-05-29 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第三季
  • 参与学习       409792    人
  • 解答问题       4340    个

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

进入课程

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信