Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中创建自己的异常_Java_Exception - Fatal编程技术网

在Java中创建自己的异常

在Java中创建自己的异常,java,exception,Java,Exception,此代码不起作用。错误:找不到符号。这是Head First Java书籍中的示例 如果我们将类的名称从TestExceptions更改为ScaryException,那么它工作正常。为什么会这样? 是否需要将类名与我们在自定义异常情况下引发的异常相同 是否有必要将类名与我们所处的异常相同 在自定义异常情况下引发 是的,这是必要的 如果您想使用TestException,则更改此行throw new TestException() 你可以从中得到更多的例子。看来你的假设是正确的。要么应该有一个名为

此代码不起作用。错误:找不到符号。这是Head First Java书籍中的示例

如果我们将类的名称从TestExceptions更改为ScaryException,那么它工作正常。为什么会这样? 是否需要将类名与我们在自定义异常情况下引发的异常相同

是否有必要将类名与我们所处的异常相同 在自定义异常情况下引发

是的,这是必要的

如果您想使用
TestException
,则更改此行
throw new TestException()


你可以从

中得到更多的例子。看来你的假设是正确的。要么应该有一个名为ScaryException的单独异常类,您没有添加该类,要么名称应该是ScaryException而不是TestExceptions。因为TestExceptions正在扩展Exception,所以后者就是这样

ScaryException.java

public class TestExceptions extends Exception {
    public static void main(String[] args)
    {
        String test = "no";
        try {
            System.out.println("start try");
            doRisky("no");
            System.out.println("end try");
        } catch( ScaryException se) {
            System.out.println("scaryexception");
        } finally {
            System.out.println( "finally") ;
        }

        System.out.println("end of main");
    }
    static void doRisky(String test) throws ScaryException {
        System.out.println("start risky");
        if ("yes".equals(test)) {
            throw new ScaryException();
        }
        System.out.println("end risky");
        return;
    }
}
Main.java

public class ScaryException extends Exception {

        public ScaryException(String exceptionMsg){     
            System.out.println("in ScrayException: " +exceptionMsg);
        }
    }
也许这个例子会让你明白


是的,自定义异常类和java文件的名称应该相同。通过编写扩展异常,您正在创建一个自定义异常。因此,在您的示例中,您创建了TestException,但试图抛出不存在的ScaryException

是的,这是必要的。如果您想使用
TestException
,那么更改此行
抛出新的TestException()这是什么:ScaryException在JDK中?必须使用相同的名称来定义类以及在何处使用它。这并不是特例。这是编程的基础,有更新吗?
public class Main {

    public static void main(String[] args) {
    String test = "no";  
    try  {  
        System.out.println("start try");  
        doRisky("yes"); 
        System.out.println("end try"); 
        } 
    catch( ScaryException se)  {        
        System.out.println("in catch");  
        }  
    finally  {  
        System.out.println( "finally") ; 
        } 
    System.out.println("end of main");

    }

    static void doRisky(String test) throws ScaryException  {  
        System.out.println("start risky");  
        if ("yes".equals(test))  { 
            throw new ScaryException("Scary Exception thrown from doRisky"); 
            }  
        System.out.println("end risky"); 
        return;  
}

}