疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java 学习笔记throw和throws的区别


 

        Java 创建用户异常类、将异常一直向上抛、 throw和throws的区别

  如果java提供的系统异常类型不能满足程序设计的需求,那么可以设计自己的异常类型。

  从java异常类的结构层次可以看出,java类型的公共父类为Throwable.在程序运行中可能出现俩种问题:一种是由硬件系统或JVM导致的故障,java定义该故障为Error,这类问题是用户程序不能够处理的;另外一种问题是程序运行错误,java定义为Exception,这种情况下,可以通过程序设计调整来实现异常处理。

  因此,用户定义的异常类型必须是Throwable的直接或间接子类。我推荐大家的异常类型以Exception为直接父类。下面开始我们的自定义异常类之旅...

  1、首先定义自己的异常类AgeOutOfBound

  1

  2

  3 /**

  4 * 自定义异常类

  5 * */

  6 public class AgeOutOfBound extends Exception {

  7

  8 public AgeOutOfBound() {

  9 System.out.print("Sorry,age out of bound !");

  10 }

  11 }

  2、定义一个类,根据参数值判断是否抛出异常

  1 /**

  2 * 定义一个方法,根据参数值决定是否抛出异常

  3 * */

  4 public class AgeInput {

  5 public static void checkAage(int age)throws AgeOutOfBound{ //用关键字throws指明调用此方法可能抛出的异常

  6 if(age>0 && age<200){

  7 System.out.print("right!");

  8 }else{

  9 System.out.println("---------------");

  10 throw new AgeOutOfBound(); //抛出异常用关键字throw

  11 }

  12 }

  13 }

  3、

  1 /**

  2 * 测试类,如果有异常场则捕获

  3 * */

  4 public class Demo {

  5

  6 public static void main(String[] args) {

  7 int age = 100;

  8 try {

  9 AgeInput.checkAage(age);

  10 } catch (AgeOutOfBound e) {

  11 System.out.println("Are you rellly :" + age + " years old?");

  12 }

  13 }

  14

  15 }

  运行结果:当age=100,输入right

  当age = 300,输出

  ---------------

  Sorry,age out of bound !Are you rellly :300 years old?

  如有哪里不懂,可以到这里下载项目代码

  http://download.csdn.net/detail/gaojiecaiandroid/6525621

  补充:

  下面说说throw和throws的区别

  throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象。如下面例子所示:

  public class Shoot { 创建类

  static void pop() throws NegativeArraySizeException {

  //定义方法并抛出NegativeArraySizeException异常

  int [] arr = new int[-3];//创建数组

  }

  public static void main(String[] args) {//主方法

  try {

  pop(); //调用pop()方法

  } catch (NegativeArraySizeException e) {

  System.out.println("pop()方法抛出的异常");//输出异常信息

  }

  }

  }

  2、throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法声明中指明要跑出的异常;如果要捕捉throw抛出的异常,则必须使用try—catch语句。举例如下:

  class MyException extends Exception { //创建自定义异常类

  String message; //定义String类型变量

  public MyException(String ErrorMessagr) { //父类方法

  message = ErrorMessagr;

  }

  public String getMessage(){ //覆盖getMessage()方法

  return message;

  }

  }

  public class Captor { //创建类

  static int quotient(int x,int y) throws MyException{//定义方法抛出异常

  if(y < 0){ //判断参数是否小于0

  throw new MyException("除数不能是负数");//异常信息

  }

  return x/y;//返回值

  }

  public static void main(String args[]){ //主方法

  try{ //try语句包含可能发生异常的语句

  int result = quotient(3,-1);//调用方法quotient()

  }catch (MyException e) { //处理自定义异常

  System.out.println(e.getMessage()); //输出异常信息

  }

  catch (ArithmeticException e) {

  //处理ArithmeticException异常

  System.out.println("除数不能为0");//输出提示信息

  }

  catch (Exception e) { //处理其他异常

  System.out.println("程序发生了其他的异常");

  //输出提示信息

  }

  }

  }