Java 我如何定制例外?

Java 我如何定制例外?,java,exception,exception-handling,Java,Exception,Exception Handling,首先,我只想说,我知道通过使用if-else配置或while循环,这个程序可以更容易地完成,但是我想知道如何使用exception类来完成它。我猜我需要利用try-catch块使用定制的异常 虽然我不确定为什么不使用if-else而不是异常,但可以通过对现有异常类进行子类化来创建自定义异常。通常,您将为声明的异常子类Exception,为您不想捕获的异常子类RuntimeException。在您的情况下,您可以将Exception子类化,如: public MyException extends

首先,我只想说,我知道通过使用if-else配置或while循环,这个程序可以更容易地完成,但是我想知道如何使用exception类来完成它。我猜我需要利用try-catch块使用定制的异常


虽然我不确定为什么不使用if-else而不是异常,但可以通过对现有异常类进行子类化来创建自定义异常。通常,您将为声明的异常子类Exception,为您不想捕获的异常子类RuntimeException。在您的情况下,您可以将Exception子类化,如:

public MyException extends Exception
{
}
如果发现射程问题,则抛出:

throw new MyException();
然后通过捕获异常(如您所做的)或MyException来捕获它:

catch(MyException exp) ...

还要注意的是,每次使用完扫描仪后,都需要关闭它。在finally块中执行此类清理通常很有用,因此我在本例中将其放在这里。

您可以创建自己的实例。如果要触发catch块,需要从try中抛出异常:


你可能还想考虑一下是什么引起了这个问题。

抛出异常?@JigarJoshi如果年龄超出范围,他想抛出异常。阅读下面一行的评论,试试看。这是我的问题;我不知道如何触发挡块。如果我能这样做,我的问题就已经解决了。@thynoob看一看我链接到你的教程。正如您已经观察到的,这里应该使用if-else语句,而不是try-catch语句。抛出和捕获异常比简单的if-else要耗费大量的资源。我只是假设如果使用catch-Exception e,那么它将按catch块打印try块中检测到的错误/异常。@thynoob仅当您调用时。因此本质上,如果使用用户定义的catch异常e,则需要使用e.printStackTrace?我猜这会自动为您检测错误,并且仅当您执行系统的tr catch块时,才可以执行“常规”方法:尝试{//code}catch异常e{system.out.println您不能这样做。+e;}@wannabeprogrammer更正了“private static final long serialVersionUID=1340715735048104509L”的用途?@thynoob:Throwable哪个异常扩展实现了Serializable接口-强烈建议所有Serializable类显式声明serialVersionUID值,由于默认的serialVersionUID计算对类详细信息高度敏感,这些详细信息可能因编译器实现的不同而不同,因此在反序列化过程中可能会导致意外的InvalidClassException。所以如果我没有包含那么长的代码,那么即使没有错误,编译器也有可能随机抛出错误?基本上
public class yourExcetionActivity extends Exception 
{
    public yourExcetionActivity() { }
    public yourExcetionActivity(String string) {
        super(string);
    }
}
package example.stackoverflow;

import java.util.Scanner;

public class AgeChecker
{
    public static final int MIN_AGE = 0;
    public static final int MAX_AGE = 125;

    static class InvalidAgeException extends Exception
    {
        private static final long serialVersionUID = 1340715735048104509L;

        public InvalidAgeException()
        { }

        public InvalidAgeException(String message)
        {
            super(message);
        }

        public InvalidAgeException(String message, Throwable cause)
        {
            super(message, cause);
        }
    }

    public static void main(String[] args)
    {
        Scanner inputdata = new Scanner(System.in);
        System.out.print("Enter your name: ");
        String name = inputdata.nextLine();
        System.out.print(name+", enter your age: ");
        int age = inputdata.nextInt();
        try
        {
            System.out.println("You entered: "+age);
            // Assuming age limits are non-inclusive
            if( (age <= MIN_AGE) || (age >= MAX_AGE) )
            {
                throw new InvalidAgeException("Out of range error! (must be between ages 0 and 125)");
            }
        }
        catch(InvalidAgeException e)
        {
            e.printStackTrace();
        }
        finally
        {
            System.out.println("Age Checking Complete.");
            if(inputdata != null)
            {
                inputdata.close();
            }
        }
    }
}
try {
    System.out.println("Enter your age: ");
    int age = scanner.nextInt();
    if(isInvalid(age)) {
        throw new Exception("Age is invalid!");
    }
} catch (Exception e) {
    // etc
}
public class yourExcetionActivity extends Exception 
{
    public yourExcetionActivity() { }
    public yourExcetionActivity(String string) {
        super(string);
    }
}