为何无法在main方法中定义静态字符串数组?报illegal start of expression错误
为什么不能在Java的main方法中定义静态字符串数组?
咱们先拆解下你遇到的这个编译错误:error: illegal start of expression static String[] str={"one","two"};
这个问题的核心很简单:static修饰符只能用来修饰类级别的成员(比如类的字段、方法、内部类等),绝对不能用于方法内部的局部变量。
你在main方法里定义的str是局部变量,它的作用域只局限在main方法内部,而static是用来标记属于类本身而非实例的成员,这两者的作用域和语义完全不搭,所以编译器直接报错了。
两种可行的修正方案:
方案1:把数组移到类级别,作为静态字段
把数组定义放在HelloWorld类的内部、main方法的外面,这样它就变成了类的静态成员,整个类都可以访问:
import java.util.*; public class HelloWorld{ // 类级别的静态数组 static String[] str={"one","two"}; public static void main(String []args){ Date date =new Date(); Calendar cal = Calendar.getInstance(); String year = "2018"; String month ="4"; int day =10; cal.set(Integer.parseInt(year),Integer.parseInt(month),day); System.out.println(cal.get(Calendar.DAY_OF_WEEK)); // etc. } }
方案2:去掉static修饰符,作为main方法的局部变量
如果你只需要在main方法里使用这个数组,直接去掉static,把它当成普通的局部变量就好:
import java.util.*; public class HelloWorld{ public static void main(String []args){ // 局部变量,不需要static String[] str={"one","two"}; Date date =new Date(); Calendar cal = Calendar.getInstance(); String year = "2018"; String month ="4"; int day =10; cal.set(Integer.parseInt(year),Integer.parseInt(month),day); System.out.println(cal.get(Calendar.DAY_OF_WEEK)); // etc. } }
另外顺便提一句:你的代码里还有个小细节需要注意——Calendar的月份是从0开始计数的(0代表1月,11代表12月),所以你设置的month="4"实际对应的是5月,如果想设置4月的话,应该把月份减1,改成Integer.parseInt(month)-1哦。
内容的提问来源于stack exchange,提问作者mohit
相关产品推荐
相关产品推荐

