You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:10:09