不知什么时候该使用throws,什么时候使用throw,什么时候需要用try{}catch(){),他们之间的怎样联系的!他们分别有什么优缺点!! 、
还有我感觉throw就没什么用!为什么java要产生个throw,不懂!!
望高手给些具体分别使用throws、throw、try{}catch(){}的例子,最好能运行看到效果!
先谢谢!!!
还有我感觉throw就没什么用!为什么java要产生个throw,不懂!!
望高手给些具体分别使用throws、throw、try{}catch(){}的例子,最好能运行看到效果!
先谢谢!!!
异常有两种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()中再次抛出异常,可以在这里处理异常
}
}
try{}catch{}在方法体中具体捕获某种异常并进行处理。
throw是在方法体中抛出具体异常!这个异常可以是自定义的!
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!");
}
}
在该方法中只抛出运行时异常而且进行处理。
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!");
}
}
}
如果没有throw 语句只有throws语句的话,你下面的 catch语句就无法捕捉到异常!
RuntimeException代表的是编程错误:
1.无法预料的错误
2.作为程序员,应该在代码中进行检查的错误.比如数组脚标越界 !
public class MainException{
public static void main(String[] args) throws Exception{
FileInputStream File = new FileInputStream("MainException.java");
File.close();
}
}
这样的话,就把异常传递给控制台,就不必些try-catch了.
try{} 表示该大括号名括的语句有可能抛出异常,如果捕捉到的异常,则由catch(...)进行识别并处理
catch(){} 识别try抛出的异常并进行处理
finally(){} 有无异常均会执行这里的语句,用于释放异常情况下未释放的资源操作等
方法里面是throw
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块。