📌  相关文章
📜  Java程序访问类的私有成员

📅  最后修改于: 2020-09-26 17:32:55             🧑  作者: Mango

在此示例中,我们将学习访问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 Reflection。