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

在非main类中使用System.out.println报Cannot find symbol错误(多IDE)

问题分析与解决方案

嘿,我一眼就看出问题啦!你在NewClass里把System.out.println("Hi");直接写在了类的根作用域里,这在Java里是不允许的——可执行语句只能放在方法、构造器、初始化块这些代码执行的上下文里,不能直接作为类的成员存在。

为什么main类没问题?

因为你的main类里的System.out.println是放在main方法里的,方法是Java中执行代码的合法容器,所以能正常运行。而NewClass里的语句没有被包裹在任何可执行的代码块里,编译器自然会报"Cannot find symbol"这类语法错误。

修正后的代码示例

你可以把这段输出语句放到构造器里,或者新增一个方法:

方案1:放到构造器中

package javaapplication3;
public class NewClass {
    // 构造器,创建类实例时会自动执行
    public NewClass() {
        System.out.println("Hi");
    }
}

方案2:放到自定义方法中

package javaapplication3;
public class NewClass {
    // 自定义方法,需要主动调用才会执行
    public void printHi() {
        System.out.println("Hi");
    }
}

如果要让这段代码在程序启动时自动运行,你可以在main方法里创建NewClass的实例(对应方案1),或者实例化后调用printHi方法(对应方案2):

// 修改后的main类
package javaapplication3;
public class JavaApplication3 {
    public static void main(String[] args) {
        System.out.println("Hi");
        // 方案1:创建实例触发构造器执行
        new NewClass();
        // 方案2:调用自定义方法
        // NewClass nc = new NewClass();
        // nc.printHi();
    }
}

额外说明

你之前尝试的"Invalidated caches"操作其实和这个问题无关,因为这是基础语法错误,不是IDE缓存导致的。只要把语句放到合法的执行上下文里,不管是NetBeans、IntelliJ还是Eclipse,都能正常编译运行啦。

内容的提问来源于stack exchange,提问作者Kyasuki Sato

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:11:45