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

Java使用Getter/Setter访问私有变量时出现NoSuchMethodError错误

Java中Getter/Setter调用出现NoSuchMethodError的解决方法

问题现象

调用Employee类的setName()、getId()等方法时,主类抛出错误:

Exception in thread "main" java.lang.NoSuchMethodError: 'void Employee.setName(java.lang.String)'
at getterssetters_41.main(getterssetters_41.java:5)

可能原因及解决步骤

1. 编译字节码不一致

最常见的原因是Employee类的修改未重新编译,主类调用的还是旧版本的字节码文件:

  • 手动编译时,先编译Employee类:javac Employee.java,再编译主类javac getterssetters_41.java,最后运行java getterssetters_41。
  • 使用IDE的话,执行「Clean Project」清除旧字节码,再重新构建项目。

2. 类与方法的访问权限问题

  • 你的Employee类是默认包访问权限(无public修饰),如果主类和Employee类不在同一个包下,需要给Employee类加上public修饰符:
public class Employee {
    // ... 原有代码
}
  • 确保Getter/Setter方法都是public修饰,你的代码里已符合要求,但如果方法权限被误改为private/default,也会导致无法调用。

3. 方法签名拼写错误

开发中容易出现大小写错误(比如setname而非setName)、参数类型不匹配(比如把String写成int)。仔细核对方法名、参数类型,确保和调用处完全一致。

你的代码参考

主类代码:

public class getterssetters_41 {
    public static void main(String args[]) {
        Employee emp1 = new Employee();
        String anurag="Anurag";
        emp1.setName(anurag);
        System.out.println(emp1.getName());
        emp1.setId(1);
        System.out.println(emp1.getId());
   }
}

Employee类代码:

class Employee {
    private int id;
    private String name;
    public String getName(){
        return this.name;
    }
    public void setName(String n){
        name = n;
    }
    public void setId(int i){
        id = i;
    }    
    public int getId(){
        return this.id;
    }
}

内容的提问来源于stack exchange,提问作者Anurag Shirvatkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:45:08