Java中println在类内非方法非块位置报错是什么原因
illegal start of type 错误含义 这个错误直译是类型声明起始非法,是Java编译器的语法校验报错:编译器在类体位置预期只能读取类成员的定义内容,却遇到了不符合成员定义规则的可执行语句,因此判定当前语法逻辑不合法。
问题产生原因
Java语法规范对可执行语句的存放位置有严格约束:所有需要运行的逻辑语句(比如输出语句、运算语句、流程控制语句等)只能存放在以下4种场景中:
- 普通方法/静态方法内部(你代码中main方法内的line2符合规则,因此可以正常运行)
- 静态代码块(被
static {}包裹的代码段,类加载时自动执行) - 实例构造代码块(被
{}直接包裹的代码段,类实例化时自动执行) - 类构造器内部
你代码中的System.out.println("Error in this line");直接放在类的主体中,不属于上述任何一种允许存放可执行语句的场景,编译器会把这行语句当成非法的类成员定义处理,因此抛出该报错。
如果需要这行输出逻辑在类加载阶段运行,可以把它放到静态代码块中,修改后的合法代码如下:
public class Main { static { System.out.println("Now this line runs normally"); //line 1 } public static void main(String[] args) { System.out.println("Executed succesfully"); //line 2 } }
内容的提问来源于stack exchange,提问作者dev_coders
相关产品推荐
相关产品推荐

