throws和throw抛出异常的使用规则

一直对java中的throws和throw不太理解。最近一直在查这两个方面的资料,算是能明白一点吧。若是我下面的观点哪有不对,但愿指出来,我加以改进。java

    
   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抛出该方法可能抛出的异常,不然编译会报错。
相关文章
相关标签/搜索