java中throw和throws的区别

时间:2020-02-23 14:34:07  来源:igfitidea点击:

在本教程中,我们将在Java中看到throw和throws之间的区别。

throw:

throw关键字用于抛出任何自定义异常或者预定义异常。
例如:让我们说,当员工年龄小于18时,我们想投掷InvalidageException。
创建一个如下员工类。

package org.arpit.theitroad;
 
public class Employee {
 
 String name;
 int age;
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public int getAge() {
 return age;
 }
 public void setAge(int age) {
 if(age < 18)
 try {
 throw new InvalidAgeException("Employee's age can not be less than 18");
 } catch (InvalidAgeException e) {
 e.printStackTrace();
 }
 this.age = age;
 }
 
}

创建InvallyGeException类如下所示

package org.arpit.theitroad;
 
public class InvalidAgeException extends Exception{
 
 String message;
 
 InvalidAgeException(String message)
 {
  super(message);
  this.message=message;
 }
}

现在创建一个名为EmployeeExceptionTest.java的主类。

package org.arpit.theitroad;
 
public class EmployeeExceptionTest {
 public static void main(String[] args) {
  Employee e1 = new Employee();
  e1.setName("John");
  e1.setAge(25);
 
  Employee e2 = new Employee();
  e2.setName("Martin");
  e2.setAge(17);
 }
}

运行上面的程序时,我们将得到以下输出:

org.arpit.theitroad.comvalidAgeException: Employee's age can not be less than 18
 at org.arpit.theitroad.Employee.setAge(Employee.java:19)
 at org.arpit.theitroad.ExceptionTest.main(ExceptionTest.java:14)

throws:

throws关键字用于声明所有异常的列表,方法可能会抛出哪种方法。
它代表责任处理调用方法的例外。
例如:假设当员工年龄小于18时,我们希望在Setage()方法中声明InvalidageException,并且应该以主要方法处理InvalidAgeException异常。
创建如下员工类。

package org.arpit.theitroad;
 
public class Employee {
 
 String name;
 int age;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) throws InvalidAgeException{
 if(age < 18)
  throw new InvalidAgeException("Employee's age can not be less than 18"); 
         this.age = age;
 }
 
}

创建InvallyGeException类如下所示

package org.arpit.theitroad;
 
public class InvalidAgeException extends Exception{
 
 String message;
 
 InvalidAgeException(String message)
 {
  super(message);
  this.message=message;
 }
}

现在创建一个名为EmployeeExceptionTest.java的主类。

package org.arpit.theitroad;
 
public class EmployeeExceptionTest {
 public static void main(String[] args) {
  try {
   Employee e1 = new Employee();
   e1.setName("John");
   e1.setAge(25);
 
   Employee e2 = new Employee();
   e2.setName("Martin");
   e2.setAge(17);
  } catch (InvalidAgeException e) {
   e.printStackTrace();
  }
 }
}

运行上面的程序时,我们将得到以下输出:

org.arpit.theitroad.comvalidAgeException: Employee's age can not be less than 18
 at org.arpit.theitroad.Employee.setAge(Employee.java:19)
 at org.arpit.theitroad.ExceptionTest.main(ExceptionTest.java:14)

如果我们注意到,我们已使用员工的Setage方法中的抛出关键字而不是处理InvalidageException。

public void setAge(int age) throws InvalidAgeException{
 if(age < 18)
  throw new InvalidAgeException("Employee's age can not be less than 18"); 
         this.age = age;
 }

现在我们在main方法中使用了try catch块来处理InvalidageException。