这段Java代码编译报错:for (Integer it : arr)提示非法类型起始,原因是什么?
解决Java编译错误:"illegal start of type"
嘿,我来帮你拆解这个编译错误的问题!
为什么会报错?
Java对类的结构有严格要求:类的顶层区域只能定义成员变量、方法、构造函数、静态/实例代码块,像for循环、System.out.println()这种实际执行的代码,不能直接扔在类的字段定义后面,必须放在方法、构造函数或者代码块里面才行。
你写的代码里,for (Integer it : arr)这个循环还有里面的语句,直接搁在了st和arr这两个字段的下面,属于类的"顶层区域",完全没在任何可执行的代码容器里,编译器当然会懵,直接给你抛出"illegal start of type"的错误啦。
怎么修正?
把这些执行代码挪到合适的地方就行,给你两种常用的修正方案:
方案1:把逻辑移到main方法里
毕竟main方法是程序的入口,把循环放这里很合理:
import java.util.*; class Test { Set<Integer> st = new HashSet<Integer>(); Integer arr[]={1,1,2,2,4,8}; public static void main(String ar[]){ System.out.println("Main"); // 先创建Test类的实例,才能访问非静态的st和arr Test testInstance = new Test(); for (Integer it : testInstance.arr) { testInstance.st.add(it); System.out.println(testInstance.st); } } }
方案2:用实例初始化块
如果希望创建Test对象的时候自动执行这段逻辑,可以用实例初始化块:
import java.util.*; class Test { Set<Integer> st = new HashSet<Integer>(); Integer arr[]={1,1,2,2,4,8}; // 实例初始化块,每次new对象都会执行 { for (Integer it : arr) { st.add(it); System.out.println(st); } } public static void main(String ar[]){ System.out.println("Main"); new Test(); // 创建对象时触发初始化块的代码 } }
小补充
要是你的st和arr不需要绑定到每个Test实例,也可以给它们加上static关键字,这样在main方法里不用创建实例就能直接用,不过这得看你的实际需求来决定哦~
内容的提问来源于stack exchange,提问作者Sachin Soni
相关产品推荐
相关产品推荐

