Java 我在哪里编写代码来处理我的异常?

Java 我在哪里编写代码来处理我的异常?,java,exception,throws,Java,Exception,Throws,好的。所以我有一个叫做“PayrollDemo”的类,它使用一个叫做“Payroll”的类。我已经建立了几个异常类来管理某些异常,现在我只需要弄清楚如何抛出这些异常 我想,我应该通过一系列if语句来检查输入的每个字段是否符合正确的标准。问题是,由于异常处理在与我工作的类不同的类中,我不确定如何抛出它 所以在这里,我要确保名称字符串不是空的,如果它是空的,它应该会导致一个名为“InvalidNameException”的异常,并将其抛出到一个“InvalidNameException”类中,该类与

好的。所以我有一个叫做“PayrollDemo”的类,它使用一个叫做“Payroll”的类。我已经建立了几个异常类来管理某些异常,现在我只需要弄清楚如何抛出这些异常

我想,我应该通过一系列if语句来检查输入的每个字段是否符合正确的标准。问题是,由于异常处理在与我工作的类不同的类中,我不确定如何抛出它

所以在这里,我要确保名称字符串不是空的,如果它是空的,它应该会导致一个名为“InvalidNameException”的异常,并将其抛出到一个“InvalidNameException”类中,该类与我的“PayrollDemo”类位于同一文件夹中

这是InvalidNameException

public class InvalidNameException extends Exception
{
/**
    No-arg constructor
*/

public InvalidNameException()
 {
    super("Invalid name");
 }
}

您正确地抛出了异常。但是,您可以从
main()
中抛出它。因此,它将导致
main()
的执行立即终止,并出现异常,这意味着程序将打印堆栈跟踪并退出,除非用
try
块括起来

您需要编写一个具有
try
块的方法,并调用另一个包含您发布的代码的方法(可能在不同的类上)。在
try
块的末尾,您捕获InvalidNameException并执行一些操作(例如再次将用户发送回数据条目)

编辑:
异常类InvalidNameException不处理该异常。这是个例外。您在此类上编写的唯一代码将是描述异常条件所需的代码-例如,您可以为它指定一个属性,该属性是名称的实际值。

您非常接近。警告:以下代码未经测试,它只是您要执行的操作的要点

您可以做的一件事是创建一个处理用户输入的类。此类读取输入,验证输入,并引发任何不同类型的异常:

public class UserInput{
    private Scanner keyboard;

    public UserInput(Scanner keyboard){

       this.keyboard = keyboard;
    }

    public String getName() throws InvalidNameException{
        System.out.print("Please enter a name: ");
        String newName = keyboard.nextLine();
        if(/*some bad condition*/){
            throw new InvalidNameException();
        }else{
            return newName;
        }
    }
}
然后,您的主要方法将执行以下操作:

 UserInput inputReader = new UserInput(new Scanner(System.in));
 String name;
 try{
     name = inputReader.getName();
 }
 catch(InvalidNameException e){
     //do some thing with e
 }

在这里,您将在try-catch块中封装抛出异常的方法,并捕获各种不同类型的异常。希望这有帮助

也许是我,但我不清楚你的问题到底是什么。你能澄清一下你到底在问什么吗?这些处理异常的类是什么样子的?
string==”
永远不会是true@HovercraftFullOfEels-我想知道如何向另一个类抛出异常。比如我的残疾名字例外。这是我和PayrollDemo在同一文件夹中的另一个类。我想让它做的是检查用户输入的名称是否为空字符串,如果是,则意味着将此异常抛出给将处理它的exception类。如果一切正常,它将继续正常运行。@WillTroll
=
表示对象标识,而不是相等。您可以有两个单独的字符串对象,长度均为零,这样
string1==string2
为false,而
string1.equals(string2)
为true
 UserInput inputReader = new UserInput(new Scanner(System.in));
 String name;
 try{
     name = inputReader.getName();
 }
 catch(InvalidNameException e){
     //do some thing with e
 }