Java IllegalAccessError问题:同目录类命令行调用方法报错
问题分析与解决
问题根源
- 方法权限不足:
Student类的getStudtName()方法未指定访问修饰符,默认是包私有权限。虽然同一目录下的类默认同属一个包,但命令行特殊的类加载机制会触发权限校验失败。 - 类加载器隔离:当使用
java main.java这种单文件直接运行方式时,main类和依赖的Student类会被不同类加载器加载,导致JVM认为跨类加载器访问包私有方法是非法操作,抛出IllegalAccessError。
解决方法
1. 修正方法访问权限
给getStudtName()方法添加public修饰符,确保跨类加载器可访问:
public class Student { String name="xdxd"; int studentNo; String classes; String course1; String course2; String course3; double stuAvg; boolean isPassed; // 添加public修饰符 public void getStudtName(){ System.out.println(this.name); } }
2. 使用标准编译运行流程
避免单文件直接运行,先编译所有类再执行:
- 编译两个类:
javac Student.java main.java - 运行主类:
java main
可选规范调整
按照Java编码规范,主类名应使用大驼峰命名,将main类重命名为Main,文件名改为Main.java,后续命令调整为:
javac Student.java Main.java java Main
内容的提问来源于stack exchange,提问作者Begems
相关产品推荐
相关产品推荐

