JAVA中throws和throw有什么区别
一直对java中的throws和throw不太领略。最近一直在查这两个方面的资料,算是能大白一点吧。假如我下面的概念哪有差池,但愿指出来,我加以改造。
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;
}
}
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;
}
}
那么下面我要说毕竟什么时候用哪种:
假如是系统异常的话可以什么都不消做,也可以针对要领抛出一个异常,因为系统异常是可以被系统自动捕捉的,所以这个异常毕竟是要在要领内部办理照旧友给上层函数去办理其实结果是一样的。可是我查了许多资料,纵然会抛出异常能被系统所捕捉的话照旧发起针对要领写一个throws,因为这样在完成一个大型任务的时候可以让此外措施员知道这里会呈现什么异常。
假如是本身界说的异常,则必需要用throws抛出该要领大概抛出的异常,不然编译会报错。
来历:http://blog.chinaunix.net/uid-26359455-id-3130427.html