Java 我如何定制例外?
首先,我只想说,我知道通过使用if-else配置或while循环,这个程序可以更容易地完成,但是我想知道如何使用exception类来完成它。我猜我需要利用try-catch块使用定制的异常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而不是异常,但可以通过对现有异常类进行子类化来创建自定义异常。通常,您将为声明的异常子类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);
}
}