A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡建伟 中级黑马   /  2013-11-10 21:57  /  1265 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

throw和throws有何区别啊?{:soso_e134:}

  1. public class throwandthrows {
  2. public static int check(String strage) throws Exception{
  3. int age = Integer.parseInt(strage);
  4. if(age < 0){
  5. throw new Exception("年龄不能为负数!");
  6. }
  7. return age;
  8. }
  9. }
复制代码

11 个回复

倒序浏览
throws跟在方法名小括号的后面,用来声明某个或某些个异常,所声明的异常一般都是该方法中通过throw关键字抛出的异常或者是其父类。
throw是写在方法里面的,后面跟上异常对象,throw new 异常名称。而且只能跟一个异常对象。
用来抛出异常,将此异常交由上一级调用者进行处理。
回复 使用道具 举报
FFF 金牌黑马 2013-11-10 22:12:22
藤椅
throws是用来声明一个方法体可能抛出所有的信息。
throw则是抛出一个具体的异常信息。


通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。

throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后再将包装后的异常信息抛出。

对异常处理方式不同.throws对异常不处理,谁调用谁处理,throws的Exception的取值范围要大于方法内部异常的最大范围,而cathch的范围又要大于throws的Exception的范围;throw 主动抛出自定义异常类对象. throws抛出的是类,throw抛出的是对象.
回复 使用道具 举报
1.有throws的时候可以没有throw。
有throw的时候如果throw抛的异常时Exception体系,必须有throws在方法上声明。如果是RuntimeException则不用声明,为了让它在运行时出问题然后我们修改代码。
2throws用于方法的声明上,其后跟的是异常类名,后面可以跟多个异常类,之间用逗号隔开,throw用于方法体中,其后跟的是一个异常对象名。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
1.throws 用于抛出方法层次的异常,
并且直接由些方法调用异常处理类来处理该异常,
所以它常用在方法的后面。比如
public static void main(String[] args) throws SQLException

2.throw 用于方法块里面的代码,比throws的层次要低,比如try...catch ....语句块,表示它抛出异常,
但它不会处理它,
而是由方法块的throws Exception来调用异常处理类来处理。

throw用在程序中,明确表示这里抛出一个异常。   
throws用在方法声明的地方,表示这个方法可能会抛出某异常。

throw是抛出一个具体的异常类,产生一个异常。
throws则是在方法名后标出该方法会产生何种异常需要方法的使用者捕获并处理。



1、throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象。如下面例子所示:
public class Shoot {   创建类
static void pop() throws NegativeArraySizeException {
//定义方法并抛出NegativeArraySizeException异常
int [] arr = new int[-3];//创建数组
}
public static void main(String[] args) {//主方法
try {
pop(); //调用pop()方法
} catch (NegativeArraySizeException e) {
System.out.println("pop()方法抛出的异常");//输出异常信息
}
}
}

2、throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法声明中指明要跑出的异常;如果要捕捉throw抛出的异常,则必须使用try—catch语句。举例如下:
class MyException extends Exception { //创建自定义异常类
String message; //定义String类型变量
public MyException(String ErrorMessagr) {  //父类方法
       message = ErrorMessagr;
}
public String getMessage(){   //覆盖getMessage()方法
  return message;
}
}
public class Captor { //创建类
static int quotient(int x,int y) throws MyException{//定义方法抛出异常
if(y < 0){  //判断参数是否小于0
         throw new MyException("除数不能是负数");//异常信息
}
return x/y;//返回值
}
public static void main(String args[]){ //主方法
try{ //try语句包含可能发生异常的语句
                int result = quotient(3,-1);//调用方法quotient()
    }catch (MyException e) { //处理自定义异常
  System.out.println(e.getMessage()); //输出异常信息
  }
    catch (ArithmeticException e) {
                   //处理ArithmeticException异常
  System.out.println("除数不能为0");//输出提示信息
  }
   catch (Exception e) { //处理其他异常
  System.out.println("程序发生了其他的异常");
                  //输出提示信息
  }
}
}
回复 使用道具 举报
学习~~~学习~~~
回复 使用道具 举报
你这是黑马基础题吧
throws和throw的区别
         (1)throws关键字通常在声明类方法中使用,格式是类方法定义时在方法名后写throws<异常类>。
                 throw关键字通常是在方法体中使用,格式是在可能出现错误的模块中写throw <异常对象>。
         (2)throws:当调用方法时,如果发生异常,就会将异常抛给指定的异常对象。
                 throw:程序在执行到throw语句时立即停止,它后面的语句都不执行。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
throw是在方法中实现的,throw需要抛出一个具体的异常对象,抛出来给上级调用者处理。throws是写在方法名和类名后面的,表示的是我这个方法或者类有可能要抛出异常~~
回复 使用道具 举报
张鹏_2013 发表于 2013-11-10 22:32
1.有throws的时候可以没有throw。
有throw的时候如果throw抛的异常时Exception体系,必须有throws在方法上 ...

嗯嗯,懂了,3q
回复 使用道具 举报
本帖最后由 一个人旅行 于 2013-11-11 14:03 编辑

1.throws 用于抛出方法层次的异常,
并且直接由些方法调用异常处理类来处理该异常,
所以它常用在方法的后面

2.throw 用于方法块里面的代码,比throws的层次要低,比如try...catch ....语句块,表示它抛出异常,
但它不会处理它,
而是由方法块的throws Exception来调用异常处理类来处理。
回复 使用道具 举报
throw 是向外抛异常,当遇到编译时异常时则必须进行处理,要么 抛,要么 try catch。
如果想向外抛编译时异常则必须要在函数上用throws声明要抛出的异常,
如果抛的是运行时异常则不需要throws声明。
回复 使用道具 举报
默狼 中级黑马 2013-11-12 20:50:42
12#
1:throws用于抛出方法层次的异常.并且直接由些方法调用异常处理类来处理该异常,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马