[200分]关于throws和throw和try{}catch(){}的区别和联系,书本上也说的迷迷糊糊,他们中的三种不知什么时候该使用!详细如下:

zhangsq 2005-07-20 09:51:03
不知什么时候该使用throws,什么时候使用throw,什么时候需要用try{}catch(){),他们之间的怎样联系的!他们分别有什么优缺点!! 、
还有我感觉throw就没什么用!为什么java要产生个throw,不懂!!
望高手给些具体分别使用throws、throw、try{}catch(){}的例子,最好能运行看到效果!
先谢谢!!!
...全文
1360 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
huhumyjava 2005-07-21
  • 打赏
  • 举报
回复
果然不错,收
nitc 2005-07-21
  • 打赏
  • 举报
回复
来晚了,,没分了,,555555
shaoyadong 2005-07-20
  • 打赏
  • 举报
回复
帮忙顶了.............
interhanchi 2005-07-20
  • 打赏
  • 举报
回复
import java.io.*;
public class MainException{
public static void main(String[] args) throws Exception{
FileInputStream File = new FileInputStream("MainException.java");
File.close();
}
}
这样的话,就把异常传递给控制台,就不必些try-catch了.
interhanchi 2005-07-20
  • 打赏
  • 举报
回复
没有throws 语句的话就表示这个方法不会抛出任何异常(^_^,但是除了RuntimeException它可以不用声明!)
如果没有throw 语句只有throws语句的话,你下面的 catch语句就无法捕捉到异常!
RuntimeException代表的是编程错误:
1.无法预料的错误
2.作为程序员,应该在代码中进行检查的错误.比如数组脚标越界 !
interhanchi 2005-07-20
  • 打赏
  • 举报
回复
你可以尝试着注释掉throws或throw这一句看一下.就明白了!
class SimpleException extends Exception{}
public class SimpleExceptionDemo{
public void f() throws SimpleException{
System.out.println("Throw SimpleException from f()");
throw new SimpleException();
}
public static void main(String[] args){
SimpleExceptionDemo sed = new SimpleExceptionDemo();
try{
sed.f();
} catch(SimpleException e){
System.err.println("Caught it!");
}
}
}
cocomei 2005-07-20
  • 打赏
  • 举报
回复
It's so easy
zhangsq 2005-07-20
  • 打赏
  • 举报
回复
谢谢各位的回答:
能否给个具体实例分别对比来说明这三个不同的用法!
如果可以马上给分!!
onray 2005-07-20
  • 打赏
  • 举报
回复
信誉82 bs
simon0512 2005-07-20
  • 打赏
  • 举报
回复
cdwei80 2005-07-20
  • 打赏
  • 举报
回复
现在楼主应该很清楚了, 呵呵,。。。
多给点分, 小弟穷!
ll42002 2005-07-20
  • 打赏
  • 举报
回复
来晚了。
帮你顶
llyemail 2005-07-20
  • 打赏
  • 举报
回复
简单来说throws 是定义方法时定义预先设定的方法中可能抛出的异常,而try{}catch{}是在try程序块中捕捉可能出现的异常并在catch块中作处理,而throw一般是在程序体运行过程中一定的条件下抛出自定义或java定义的异常。
littlerainsnow 2005-07-20
  • 打赏
  • 举报
回复
glorywine 2005-07-20
  • 打赏
  • 举报
回复
学到不少
顶!
tom_you 2005-07-20
  • 打赏
  • 举报
回复
throws用于在方法中抛出异常,throw用于在程序中某处抛出异常,try{}catch{}用于对某程序块如果发生异常时进行处理。事例如下:
1.
public void method throws Exception {
...
}
在该方法中只抛出异常但该不进行处理。
2.
public void method throws Exception {
...
throw RuntimeException;
}
在该方法中只抛出运行时异常但不进行处理。
3.
public void method throws Exception {
try {
throw RuntimeException;
} catch {
System.out.println("Error!");
}
}
在该方法中只抛出运行时异常而且进行处理。
bevin1010 2005-07-20
  • 打赏
  • 举报
回复
throws抛出一种异常,多写在方法定义后面!
try{}catch{}在方法体中具体捕获某种异常并进行处理。
throw是在方法体中抛出具体异常!这个异常可以是自定义的!
huzzy 2005-07-20
  • 打赏
  • 举报
回复
其实很简单
异常有两种Error和Exception
我们一般说的异常指Exception,有两种--检查异常和未检查异常
在程序块中如果需要手动抛出一个"检查"异常用throw,
例如,throw new Exception("异常");
或者在一个try块中捕获了异常,但是在当前方法中还不想处理该异常,可以再次抛出可以用throw
throws是检查方法中的可能抛出的"未检查"异常,在写了throws的方法中可以不用去处理异常,但是在调用方法中,至少有一级是处理这种异常的.
例如
void a()throws Exception{
System.out.println(1/0);
}

void b(){
try{
a();
}catch(Exception e){
//处理异常的或者再次抛出
throw e;
}
}

void c(){
try {
b()
}catch(Exception e){
//如果在b()中再次抛出异常,可以在这里处理异常
}
}
interhanchi 2005-07-20
  • 打赏
  • 举报
回复
去看thinking in java,里面讲的很清楚 !
hoho1979 2005-07-20
  • 打赏
  • 举报
回复
异常处理关键字
Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally。JB的在线帮助中对这几个关键字是这样解释的:

Throws: Lists the exceptions a method could throw.

Throw: Transfers control of the method to the exception handler.

Try: Opening exception-handling statement.

Catch: Captures the exception.

Finally: Runs its code before terminating the program.

2.3.1 try语句 
try语句用大括号{}指定了一段代码,该段代码可能会抛弃一个或多个例外。

2.3.2 catch语句 
catch语句的参数类似于方法的声明,包括一个例外类型和一个例外对象。例外类型必须为Throwable类的子类,它指明了catch语句所处理的例外类型,例外对象则由运行时系统在try所指定的代码块中生成并被捕获,大括号中包含对象的处理,其中可以调用对象的方法。

catch语句可以有多个,分别处理不同类的例外。Java运行时系统从上到下分别对每个catch语句处理的例外类型进行检测,直到找到类型相匹配的catch语句为止。这里,类型匹配指catch所处理的例外类型与生成的例外对象的类型完全一致或者是它的父类,因此,catch语句的排列顺序应该是从特殊到一般。



也可以用一个catch语句处理多个例外类型,这时它的例外类型参数应该是这多个例外类型的父类,程序设计中要根据具体的情况来选择catch语句的例外处理类型。 

2.3.3 finally语句 
try所限定的代码中,当抛弃一个例外时,其后的代码不会被执行。通过finally语句可以指定一块代码。无论try所指定的程序块中抛弃或不抛弃例外,也无论catch语句的例外类型是否与所抛弃的例外的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。通常在finally语句中可以进行资源的清除工作。如关闭打开的文件等。

2.3.4 throws语句 
throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型。如果异常的类型是Error或 RuntimeException, 或它们的子类,这个规则不起作用, 因为这在程序的正常部分中是不期待出现的。 如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。

2.3.5 throw语句 
throw总是出现在函数体中,用来抛出一个异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。





加载更多回复(8)

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧