尝试使用Java中的Catch Block

Tyl*_*ler 2 java exception try-catch

所以我给了这个代码,我必须创建一个Exception,然后用一个Try/CatchBlock来捕获它.我已经在代码的底部制作了Exception.但我以前从未使用过Try/CatchBlock,也不确定如何实现它.

例外情况enum是输入未列在其下的排名.我也需要使用toString带有被捕获的异常,但我很确定我可以找出那个.

package pracapp4;

import java.util.Scanner;

public class Staff extends Employee
{

  enum Title
  {
    DEPARTMENT_HEAD, DIRECTOR, DEAN, VICE_CHANCELLOR, CHANCELLOR
  }

  private Title title;

  public Staff()
  {
    super();
    title = Title.DEPARTMENT_HEAD;
  }

  public Staff(String firstName, String lastName, int salary, Title title)
  {
    super(firstName, lastName, salary);
    this.title = title;

  }

  @Override
  public String toString()
  {
    return super.toString() + "\n\tTitle: " + title;
  }


  @Override
  public void display()
  {

    System.out.println("<<Staff>>" + this);

  }

  @Override
  public void input(Scanner in)
  {
    super.input(in);

    if (in.hasNext())
    {
      this.title = Enum.valueOf(Title.class, in.next());
    }
  }

  class InvalidRankException extends Exception
  {
      public InvalidRankException()
      {
       super ("Unknown Rank Name: ");

      }   
  }
}
Run Code Online (Sandbox Code Playgroud)

duf*_*ymo 5

你不需要那个例外.当你将Title枚举添加为传递给Staff构造函数的类型时,就不可能提供不在枚举中的值.你永远不会得到无效的头衔.这就是枚举的全部要点.

更新:一个小代码审查是这里的一个订单.

  1. 你的默认构造函数相当奇怪.你可以成为没有名字或工资的部门负责人吗?这里调用"this"是合适的,并且更好的默认值是有序的.
  2. 整数只用于薪水 - 好的.没单位?美元?欧元?
  3. 薪水可以是负数吗?那有意义吗?(自我注意:不要在那里工作.)
  4. 为什么你需要toString和display?什么是显示覆盖?我建议放弃显示并坚持使用toString.
  5. 你的输入法没有任何意义.
  6. 为什么Exception是一个内部类?