如何解决Java中的‘cannot find symbol method’错误?——Student类调用Subject类方法异常问题
问题分析与解决方案
我来帮你拆解代码里的问题,其实大部分错误都是简单的语法问题,导致后续连锁报错,和你猜测的“无法实例化Subject类”无关:
1. 核心语法错误:多余的星号
在Student类的setKorea方法中,你写了:
korea.setSubjectName*(name); //this part error
这里多了一个不必要的*符号,正确的写法应该是:
korea.setSubjectName(name);
这个语法错误会直接触发编译器报错,进而让后续调用setScore、getScore的代码也被标记为错误(因为编译器认为前面的代码已经破坏了语法结构,后续上下文无法正常解析)。
2. 确认Subject类的实例化逻辑
你在Student的构造方法里已经正确完成了Subject对象的实例化:
korea = new Subject(); math = new Subject();
这部分完全没问题——Subject是public类,且和Student在同一个school包下,实例化操作合法有效,所以你之前担心的“无法实例化Subject”并不是问题根源。
修正后的完整代码
Subject类(本身无问题,无需修改)
package school; public class Subject { String subjectName; int score; public String getSubjectName() { return subjectName; } public void setSubjectName(String subjectName) { this.subjectName = subjectName; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } }
修正后的Student类
package school; public class Student { int studentID; String studentName; Subject korea; Subject math; public Student(int id, String name){ studentID = id; studentName =name; korea = new Subject(); math = new Subject(); } public void setKorea(String name, int score){ korea.setSubjectName(name); // 移除了多余的星号 korea.setScore(score); } public void setMath(String name, int score){ math.setSubjectName(name); math.setScore(score); } public void showStudentInfo() { int total = korea.getScore() + math.getScore(); System.out.println("학생의 총점은"+ total+"입니다."); } }
测试代码(可选)
你可以写一个主类来验证功能是否正常:
package school; public class Main { public static void main(String[] args) { Student student = new Student(1001, "张三"); student.setKorea("韩语", 90); student.setMath("数学", 85); student.showStudentInfo(); } }
运行后会输出:학생의 총점은175입니다.
内容的提问来源于stack exchange,提问作者Joe-Black
相关产品推荐
相关产品推荐

