Java 程序未编译,因为它需要{before throw in public constructor()抛出异常
在Java分配中,我被要求使用抛出异常,但我得到一个奇怪的错误:Java 程序未编译,因为它需要{before throw in public constructor()抛出异常,java,class,exception,Java,Class,Exception,在Java分配中,我被要求使用抛出异常,但我得到一个奇怪的错误: Controller.java:13: error: ';' expected 公共控制器抛出异常{ ^ 守则如下: import java.awt.*; import java.lang.*; public class Controller { private Canvas can; private Arrow arr; public static void main(String[] args){ new
Controller.java:13: error: ';' expected
公共控制器抛出异常{
^
守则如下:
import java.awt.*;
import java.lang.*;
public class Controller {
private Canvas can;
private Arrow arr;
public static void main(String[] args){
new Controller();
}
public Controller() throws Exception {
can = new Canvas("Animation", 300, 700);
arr = new Arrow(can);
arr.draw();
Thread.currentThread().sleep(100);
for (int i = 1; i <= 10; i++){
arr.erase();
arr.moveUp();
arr.draw();
Thread.currentThread().sleep(100);
}
}
}
整个语法似乎都是正确的,Stackoverflow上这种类型的大多数错误都是打字错误造成的,但我似乎没有任何错误。
我编辑了代码中较小的错误,但仍然在构造函数中得到错误。类不能抛出异常
import java.awt.*;
import java.lang.*;
public class Controller {
private Canvas can;
private Arrow arr;
public static void main(String[] args){
try {
new Controller();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
public Controller() throws InterruptedException {
can = new Canvas("Animation", 300, 700);
arr = new Arrow(can);
arr.draw();
Thread.currentThread().sleep(100);
for (int i = 1; i >= 10; i++){
arr.erase();
arr.moveUp();
arr.draw();
Thread.currentThread().sleep(100);
}
}
}
}您有三个“{”和四个“}”。更正大括号,代码将顺利运行。当方法或构造函数引发异常时,调用方必须再次处理或引发异常 所以你可以这样再扔一次
public static void main(String[] args) throws Exception {
或者使用try catch来处理
try {
new Controller();
} catch (Exception e) {
e.printStackTrace();
}
首先,抛出java.lang.Exception是一种不好的做法,正如@Andy Turner所说,抛出一个更具体的one InterruptedException,或者通过扩展java.lang.Exception来创建适当的域异常,因为当项目变得更大时,它肯定会使项目更易于维护 当您抛出java.lang.exception或其自身的选中异常子类时,调用方必须将其转发给下一个调用方,如下所示,使用throwCheckedException方法前面的抛出将其转发给main方法,依此类推:
public class HelloWorld {
public static void main(String... args) throws SpecificExcpetion {
throwCheckedException();
}
public static void throwCheckedException() throws SpecificExcpetion {
throw new SpecificExcpetion("i'm a specific exception");
}
}
class SpecificExcpetion extends Exception {
public SpecificExcpetion(String message) {
super(message);
}
}
或捕获它并记录异常原因以进行监视:
public class HelloWorld {
public static void main(String... args){
try {
throwCheckedException();
} catch (SpecificExcpetion specificExcpetion) {
// log the exception with a logger
}
}
public static void throwCheckedException() throws SpecificExcpetion {
throw new SpecificExcpetion("i'm a specific exception");
}
}
class SpecificExcpetion extends Exception {
public SpecificExcpetion(String message) {
super(message);
}
}
顺便说一句,还有一句话:
默认情况下,java.lang包中的所有类都是导入的,因此您不需要导入java.lang.*;要使用Thread类…类不会抛出异常,方法和构造函数会抛出异常。请注意,抛出异常很少是一个好主意,即使您将其放在方法或构造函数的正确位置类型,以便调用方可以明智地处理它。在这种情况下,抛出InterruptedException更合适。在代码中,它是可能发生InterruptedException的构造函数控制器。因此,如果您不想处理该异常,构造函数必须抛出它,因此调用方必须处理它。请查看:另外,您这并不意味着我>=10,因为这个循环将永远不会执行。欢迎来到StackOverflow——除了帮助您处理代码片段之外:如果您正确格式化代码,人们更可能阅读您的代码并帮助您。如果您说类不能引发异常,为什么您更新的类会声明它引发异常?-这就是投票失败的原因之一。Th另一个是缺乏解释。哈哈,我在复制和粘贴时忘了删除它。除此之外:因为类不抛出异常,构造函数抛出异常。这应该标记为答案
public class HelloWorld {
public static void main(String... args){
try {
throwCheckedException();
} catch (SpecificExcpetion specificExcpetion) {
// log the exception with a logger
}
}
public static void throwCheckedException() throws SpecificExcpetion {
throw new SpecificExcpetion("i'm a specific exception");
}
}
class SpecificExcpetion extends Exception {
public SpecificExcpetion(String message) {
super(message);
}
}