在非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
相关产品推荐
相关产品推荐

