java语言 百分网手机站

JAVA中throws和throw有什么区别

时间:2020-09-18 11:41:12 java语言 我要投稿

JAVA中throws和throw有什么区别

  一直对java中的throws和throw不太理解。你知道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抛出该方法可能抛出的异常,否则编译会报错


【JAVA中throws和throw有什么区别】相关文章:

Java编程中throw和throws子句的使用方法11-26

Unix和Linux有什么区别08-07

成教和自考有什么区别06-28

java的String=a; a==null和a.equals(null)这两个判断有什么区别11-23

java中String和StringBuffer的区别10-02

OA软件和ERP软件有什么区别09-20

关于java中堆和栈的区别11-27

java中i++和++i的区别11-24

Java中对象和引用的具体区别10-05

CPU双核和四核有什么区别10-02