Java调用Thread.currentThread()报找不到符号编译错误如何解决
错误原因
你自定义的公开类名Thread和JDK内置的核心类java.lang.Thread重名了。Java编译器解析类名时,会优先匹配当前源文件中定义的类,你自己写的Thread类里并没有定义currentThread()静态方法,编译器自然会抛出「找不到符号」的编译错误,不会自动加载JDK自带的Thread类。
修复方案
- 方案1(推荐):修改自定义类的类名,避开和JDK核心类重名,这是日常开发需要遵守的基本命名规范。比如把类名改成
ThreadTest,修改后可正常运行的代码如下:
public class ThreadTest { public static void main(String[] args){ System.out.println(Thread.currentThread().getName()); } }
编译运行后会正常输出主线程名称:main。
- 方案2:如果一定要保留
Thread作为类名,调用JDK内置Thread类的方法时,必须写全限定类名显式指定目标类,避免编译器匹配到你自定义的类,代码示例如下:
public class Thread{ public static void main(String[] args){ // 全限定名指定调用JDK内置的java.lang.Thread类 System.out.println(java.lang.Thread.currentThread().getName()); } }
提示:非特殊场景不建议使用方案2,自定义类和JDK核心类重名会带来大量不必要的歧义、编译和运行异常,属于需要刻意规避的不良命名习惯。
内容的提问来源于stack exchange,提问作者Viren Bhagyesh Mandalia
相关产品推荐
相关产品推荐

