Java 程序:访问类的私有成员

要理解此示例,您应了解以下Java编程主题


示例 1:使用getter和setter方法访问私有字段

class Test {

  // private variables
  private int age;
  private String name;

  // initialize age
  public void setAge(int age) {
    this.age = age;
  }

  // initialize name
  public void setName(String name) {
    this.name = name;
  }

  // access age
  public int getAge() {
    return this.age;
  }

  // access name
  public String getName() {
    return this.name;
  }

}

class Main {
  public static void main(String[] args) {
    // create an object of Test
    Test test = new Test();

    // set value of private variables
    test.setAge(24);
    test.setName("Programiz");

    // get value of private variables
    System.out.println("Age: " + test.getAge());
    System.out.println("Name: " + test.getName());
  }
}

输出

Age: 24
Name: Programiz

在上面的示例中,我们有私有 变量,名为 agename。在这里,我们尝试从名为 Main 的其他类访问私有变量。

我们使用了getter和setter方法来访问私有变量。在这里,

  • setter方法 setAge()setName() 初始化私有变量
  • getter方法 getAge()getName() 返回私有变量的值

示例 2:使用反射访问私有字段和方法

import java.lang.reflect.*;

class Test {

  // private variables
  private String name;

  // private method
  private void display() {
    System.out.println("The name is " + name);
  }

}

class Main {
  public static void main(String[] args) {
    try {
      // create an object of Test
      Test test = new Test();

      // create an object of the class named Class
      Class obj = test.getClass();

      // access the private variable
      Field field = obj.getDeclaredField("name");
      // make private field accessible
      field.setAccessible(true);

      // set value of field
      field.set(test, "Programiz");

      // get value of field
      // and convert it in string
      String value = (String)field.get(test);
      System.out.println("Name: " + value);

      // access the private method
      Method[] methods = obj.getDeclaredMethods();
      System.out.println("Method Name: " + methods[0].getName());
      int modifier = methods[0].getModifiers();
      System.out.println("Access Modifier: " + Modifier.toString(modifier));

    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
}

输出

Name: Programiz
Method Name: display    
Access Modifier: private

在这个示例中,我们有一个名为 name 的私有字段和一个名为 display() 的私有方法。在这里,我们使用反射来访问 Test 类的私有字段和方法。

要了解反射,请访问 Java反射

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战