java中throw和throws的区别

作者&投稿:中娅 (若有异议请与网页底部的电邮联系)
Java中throw和throws有什么区别?~

当然,你需要明白异常在Java中式以一个对象来看待。
并且所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,但是一般情况下Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行。
直接进入正题哈:
1.用户程序自定义的异常和应用程序特定的异常,必须借助于 throws 和 throw 语句来定义抛出异常。

1.1 throw是语句抛出一个异常。
语法:throw (异常对象);
throw e;

1.2 throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)
语法:[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{......}
public void doA(int a) throws Exception1,Exception3{......}

举例:

throws E1,E2,E3只是告诉程序这个方法可能会抛出这些异常,方法的调用者可能要处理这些异常,而这些异常E1,E2,E3可能是该函数体产生的。
throw则是明确了这个地方要抛出这个异常。

如: void doA(int a) throws IOException,{
try{
......

}catch(Exception1 e){
throw e;
}catch(Exception2 e){
System.out.println("出错了!");
}
if(a!=b)
throw new Exception3("自定义异常");
}

代码块中可能会产生3个异常,(Exception1,Exception2,Exception3)。
如果产生Exception1异常,则捕获之后再抛出,由该方法的调用者去处理。

果产生Exception2异常,则该方法自己处理了(即System.out.println("出错了!");)。所以该方法就不会再向外抛出
Exception2异常了,void doA() throws Exception1,Exception3
里面的Exception2也就不用写了。
而Exception3异常是该方法的某段逻辑出错,程序员自己做了处理,在该段逻辑错误的情况下抛出异常Exception3,则该方法的调用者也要处理此异常。

throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。
throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。

throws主要是声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常。
throw是具体向外抛异常的动作,所以它是抛出一个异常实例。

throws说明你有那个可能,倾向。
throw的话,那就是你把那个倾向变成真实的了。

同时:
1、throws出现在方法函数头;而throw出现在函数体。
2、throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常。
3、两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

1.throw:(针对对象的做法)
抛出一个异常,可以是系统定义的,也可以是自己定义的。下面举两个例子:
抛出Java中的一个系统异常:
public class One {
public void yichang(){
NumberFormatException e = new NumberFormatException();
throw e;
}
public static void main(String[] args){
One test = new One();
try{
test.yichang();
}catch(NumberFormatException e){
System.out.println(e.getMessage());
}
}
}
抛出一个自定义的异常:

public class People {
public static int check(String strage) throws MyException{
int age = Integer.parseInt(strage);
if(age < 0){
throw new MyException("年龄不能为负数!");
}
return age;
}
public static void main(String[] args){
try{
int myage = check("-101");
System.out.println(myage);
}catch(NumberFormatException e){
System.out.println("数据格式错误");
System.out.println("原因:" + e.getMessage());
}catch(MyException e){
System.out.println("数据逻辑错误");
System.out.println("原因:" + e.getMessage());
}
}
}
public class MyException extends Exception{
private static final long serialVersionUID = 1L;
private String name;
public MyException(String name){
this.name = name;
}
public String getMessage(){
return this.name;
}
}
2.throws:(针对一个方法抛出的异常)
抛出一个异常,可以是系统定义的,也可以是自己定义的。
抛出java中的一个系统异常:
public class One {
public void yichang() throws NumberFormatException{
int a = Integer.parseInt("10L");
}
public static void main(String[] args){
One test = new One();
try{
test.yichang();
}catch(NumberFormatException e){
System.out.println(e.getMessage());
}
}
}
抛出一个自定义异常:
public class People {
public static int check(String strage) throws MyException{
int age = Integer.parseInt(strage);
if(age < 0){
throw new MyException("年龄不能为负数!");
}
return age;
}
public static void main(String[] args){
try{
int myage = check("-101");
System.out.println(myage);
}catch(NumberFormatException e){
System.out.println("数据格式错误");
System.out.println("原因:" + e.getMessage());
}catch(MyException e){
System.out.println("数据逻辑错误");
System.out.println("原因:" + e.getMessage());
}
}
}
public class MyException extends Exception{
private static final long serialVersionUID = 1L;
private String name;
public MyException(String name){
this.name = name;
}
public String getMessage(){
return this.name;
}
}

楼主您好
借用答案

这两者虽然看起来只有一个s的区别,但是作用完全不一样
/////java处理异常方式///////////////////////////////
在java代码中如果发生异常的话,jvm会抛出异常对象,导致程序代码中断,这个时候jvm在做的操作就是:创建异常对象,然后抛出,比如:

int i= 1;
int j = 0;
int res = 0;
res = i/j;//除0错误
System.out.println(res);

这5句代码运行到第四句会中断,因为jvm抛出了异常

////throw的作用/////////////////////////////////////////
手动抛出异常

但是有时候有些错误在jvm看来不是错误,比如说
int age = 0;
age = -100;
System.out.println(age);
很正常的整形变量赋值,但是在我们眼中看来就不正常,谁的年龄会是负的呢。
所以我们需要自己手动引发异常,这就是throw的作用
int age = 0;
age = -100;
if(age<0)
{
Exception e = new Exception();//创建异常对象
throw e;//抛出异常
}
System.out.println(age);

////throws的作用///////////////////////////////////
声明方法可能回避的异常

有异常被抛出了,就要做处理,所以java中有try-catch
可是有时候一个方法中产生了异常,但是不知道该怎么处理它,那么就放着不管,当有异常抛出时会中断该方法,而异常被抛到这个方法的调用者那里。这个有点像下属处理不了的问题就交到上司手里一样,这种情况称为回避异常
但是这使得调用这个方法就有了危险,因为谁也不知道这个方法什么时候会丢一个什么样的异常给调用者,所以在定义方法时,就需要在方法头部分使用throws来声明这个方法可能回避的异常
void fun()throws IOException,SQLException
{
...
}
这表示 fun方法可能会丢两个异常出来,那么在调用fun的时候就会做好准备,比如可以这样
try
{
fun();
}catch(IOException e)
{
}catch(SQLException e)
{
}

我说个简单点儿的:
throw是出现在方法中的一个行为 意思是说 “走到这儿我要抛出一个异常了!”
一版是自定义抛异常的时候做的

throws是出现在方法定义的中的 意思是说“这个方法可能会抛出某些异常,调用这个方法的时候得做异常处理!”


Java里throw与throws关键字有什么区别?
throw e;\/\/抛出异常 } System.out.println(age);\/\/\/throws的作用\/\/\/ 声明方法可能回避的异常 有异常被抛出了,就要做处理,所以java中有try-catch 可是有时候一个方法中产生了异常,但是不知道该怎么处理它,那么就放着不管,当有异常抛出时会中断该方法,而异常被抛到这个方法的调用者那里。这个...

JAVA的throw和throws怎么用!
throw是语句抛出一个异常;语法:throw(异常对象);throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常) ;语法:[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{...} 当某个方法可能会抛出某种异常时用于throws 声明可能抛出的异常,然后交给上层调用...

Java语言如何进行异常处理,关键字:throws,throw,try,catch,finally_百度...
java异常的一个简单例子,比如我有一个除法方法 public int divide(int a, int b) { return a \/ b;} 但是这就有一个问题,当b是0时,程序会报错。如果引入异常,改成这样 public int divide(int a, int b) throws Exception { if (b == 0) { throw new Exception("b = 0");} ret...

java程序中的throws是干什么用的?
throw用于向调用方抛出异常。在这个例子中,main方法要从屏幕(system.in)中读入字符,在java中,凡是跟IO(输入、输出)相关的操作都有可能出现IO异常错误(当然异常还有很多很多种),必须对异常进行处理,有两种方法:1) 在方法signature后面加throws,意思是把异常的处理工作交给调用该方法的程序。如...

java异常 throw和try-catch的关系
throw是把当前方法中出现的异常抛出去,自己不处理,处理异常交给要调用它的方法;try-catch是成对出现的,意思是在try中捕获的异常马上交给catch去处理

Java中throw和throws的区别
throw,用在函数体中,用于抛出一个异常对象。throws用在函数名的后面,是函数签名的一部分,表示将函数内部抛出的异常抛给函数调用栈的上一级函数。

在Java中,throw与throws有什么区别?他们各自用在什么地方?
上面的已经解释很详细了 我就补充两点吧 一,throws用在函数上,后面跟异常类名,用于标示函数的异常,如果有多个异常类,用逗号隔开;二,throw 用在函数内,后面跟跟异常对象,通常情况是这样的:函数用throw抛出异常对象,函数上必须用throws标示 ...

Java中throws和throw的区别讲解
throws就是声明我这个方法会出现什么异常,调用者需要对这些异常进行处理 例如在method1()方法中throws exception 在method2中调用的时候就需要对他进行异常处理。throw就是手动触发一个异常,可以让触发异常的方法在声明异常,或者直接进行try catch异常处理。

java中的Throws关键字是什么意思呀???求回答叻!!
throws抛出系统异常,将异常转移给上一级函数去处理;throw是在方法内抛出自己定义的异常。如常常会有这样写:public static void main(String asd[]) throws Exception 就是让java机制去处理这个异常。

8.java中throw和throws的区别
throw是语句抛出一个异常。语法:throw (异常对象);throw e;throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)语法:[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{...} public void doA(int a) throws Exception1,Exception3{...} ...

刚察县18531488725: Java中throw和throws的区别 -
姬纯佐宁: 都是关键字 throw用于代码当中抛出异常;throws用于方法名结尾定义方法抛出的异常类型. 例如 int a = 1; throw new Exception(); system.out.println("a");在throw这行控制台会报Exception异常,如果你new的是NullPointException就会报空指...

刚察县18531488725: Java中throws和throw的区别讲解 -
姬纯佐宁: throw和throws的区别:1、throw代表动作,表示抛出一个异常的动作;throws代表一种状态,代表方法可能有异常抛出2、throw用在方法实现中,而throws用在方法声明中3、throw只能用于抛出一种异常,而throws可以抛出多个异常

刚察县18531488725: 请教java中throw和throws的用法与区别 -
姬纯佐宁: throws 是抛出异常,throw是创建异常 例如 throw new UserException(msg); public void Regist(User user) throws UserException

刚察县18531488725: 在java中,throw与throws有什么区别 -
姬纯佐宁: 作用不同;throw用于在程序中抛出异常,throws用于声明在该方法内抛出了异常.使用位置不同:throw位于方法体内部,可以作为单独语句是用,throws必须跟在方法参数列表后面,不能单独使用.内容不同:throw抛出一个异常对象,而且只能是一个,throws后面跟异常类,可以有多个

刚察县18531488725: java中throw和throws的区别
姬纯佐宁: throws是用来声明一个方法可能抛出的所有异常信息 throw则是指抛出的一个具体的异常类型. 通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息. throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法; throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛

刚察县18531488725: java里面关键字throws和throw有什么区别 -
姬纯佐宁: 你好,区别如下: 这两者虽然看起来只有一个s的区别,但是作用完全不一样 /////java处理异常方式/////////////////////////////// 在java代码中如果发生异常的话,jvm会抛出异常对象,导致程序代码中断,这个时候jvm在做的操作就是:创建异常对象,然后...

刚察县18531488725: java中抛出异常throw和throws有什么区别 -
姬纯佐宁: 1.throws 用于抛出方法层次的异常, 并且直接由些方法调用异常处理类来处理该异常, 所以它常用在方法的后面.比如 public static void main(String[] args) throws SQLException 2.throw 用于方法块里面的代码,比throws的层次要低,比如try...catch ....语句块,表示它抛出异常, 但它不会处理它, 而是由方法块的throws Exception来调用异常处理类来处理.

刚察县18531488725: java语言中throw与throws的区别
姬纯佐宁: throw是抛出一个具体的异常 而throws是抛出可能出现的异常种类

刚察县18531488725: throw和throws有什么区别 -
姬纯佐宁: throw 读音:英 [θrəʊ] 美 [θroʊ] 不及物动词:丢;抛;投掷 名词:丢;投掷的距离 及物动词.:抛;掷(色子);猛动(头、臂、腿);使处于,使限于;例如:He spent hours throwing a tennis ball against a wall 他好几个小时都对着一堵墙掷网球.throws 读音英 [θrəʊz] 美 [θroʊz] 动词:扔;抛;掷;投( throw的第三人称单数 );例如:Sophia jumps up and throws down her knitting 索菲娅跳起身来,扔下正在织的毛衣.

刚察县18531488725: throws和throw有什么区别 -
姬纯佐宁: throw则是指抛出的一个具体的异常类型. 通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息. throws通常不用...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网