$ javac TestExceptions.java
TestExceptions.java:11: cannot find symbol
symbol : class test
location: class TestExceptions
throw new TestExceptions.test("If you see me, exceptions work!");
^
1 error
代码
import java.util.*;
import java.io.*;
public class TestExceptions {
static void test(String message) throws java.lang.Error{
System.out.println(message);
}
public static void main(String[] args){
try {
// Why does it not access TestExceptions.test-method in the class?
throw new TestExceptions.test("If you see me, exceptions work!");
}catch(java.lang.Error a){
System.out.println("Working Status: " + a.getMessage() );
}
}
}
答案 0 :(得分:5)
TestExceptions.test
会返回void
类型,因此您无法throw
。为此,它需要返回一个扩展Throwable
的类型的对象。
一个例子可能是:
static Exception test(String message) {
return new Exception(message);
}
然而,这不是很干净。更好的模式是定义TestException
类,其扩展为Exception
或RuntimeException
或Throwable
,然后只有throw
。
class TestException extends Exception {
public TestException(String message) {
super(message);
}
}
// somewhere else
public static void main(String[] args) throws TestException{
try {
throw new TestException("If you see me, exceptions work!");
}catch(Exception a){
System.out.println("Working Status: " + a.getMessage() );
}
}
(另请注意,包java.lang
中的所有类都可以通过其类名而不是完全限定名来引用。也就是说,您不需要编写java.lang
。)
答案 1 :(得分:3)
工作代码
试试这个:
public class TestExceptions extends Exception {
public TestExceptions( String s ) {
super(s);
}
public static void main(String[] args) throws TestExceptions{
try {
throw new TestExceptions("If you see me, exceptions work!");
}
catch( Exception a ) {
System.out.println("Working Status: " + a.getMessage() );
}
}
}
<强>问题强>
您发布的代码存在许多问题,包括:
Error
代替Exception
Exception
Exception
的超类构造函数
发布的代码可以解决这些问题并显示您的期望。