Java 程序未编译,因为它需要{before throw in public constructor()抛出异常

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

在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();   
 }

  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);
    }
}