throws和throw的区别以及应用,手动抛出异常

首先看一下throws和throw的区别:

throws是用来声明一个方法可能抛出的所有异常信息

throw则是指抛出的一个具体的异常类型。

通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。

throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;

throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛出。 

 

 

使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需继承Exception类即可。

在程序中使用自定义异常类,大体可分为以下几个步骤。

(1)创建自定义异常类。

(2)在方法中通过throw关键字抛出异常对象。

(3)如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。

(4)在出现异常方法的调用者中捕获并处理异常

例子程序:

 

package com.zcy.exception;

import java.util.*;

public class NewClass {
 //用throws声明这个方法可能抛出的所有异常信息
 static int avg(int number1, int number2) throws MyException {
  if (number1 < 0 || number2 < 0) {
   //用throw抛出一个具体的异常类型
   throw new MyException("不可以使用负数");
  }
  if (number1 > 100 || number2 > 100) {
   throw new MyException("数值太大了");
  }
  return (number1 + number2) / 2;
 }

 public static void main(String[] args) {
  System.out.println("求2个数的平均数!" + "请输入两个数,要求是都小于100的数:");
  Scanner in = new Scanner(System.in);
  int number1 = in.nextInt();
  int number2 = in.nextInt();
  try {
   int result = avg(number1, number2);
   System.out.println(result);
  } catch (MyException e) {
   System.out.println(e);
  }
  System.out.println("是否继续执行。。。。");
  /*

输出结果:
  求2个数的平均数!请输入两个数,要求是都小于100的数:
  200000
  1
  com.zcy.exception.MyException: 数值太大了
  是否继续执行。。。。

*/
 }


/* 

public static void main(String[] args) throws MyException {
  System.out.println("求2个数的平均数!" + "请输入两个数,要求是都小于100的数:");
  Scanner in = new Scanner(System.in);
  int number1 = in.nextInt();
  int number2 = in.nextInt();
  int result = avg(number1, number2);
  System.out.println(result);
  System.out.println("是否继续执行。。。。");
 }
 输入结果:
 求2个数的平均数!请输入两个数,要求是都小于100的数:
 200000
 1
 Exception in thread "main" com.zcy.exception.MyException: 数值太大了
  at com.zcy.exception.NewClass.avg(NewClass.java:13)
  at com.zcy.exception.NewClass.main(NewClass.java:36)

*/
}

//自定义一个异常类
class MyException extends Exception {
 MyException(String ErrorMessage) {
  super(ErrorMessage);
 }
}

可以看出,当用try..catch捕获后,程序是还是可以继续往下执行的,而如果不适用的话,继续就会中断,抛出异常信息

猜你喜欢

转载自blog.csdn.net/UncleTian/article/details/79896065