Java 菜鸟教程

Java 流程控制

Java 数组

Java 面向对象(I)

Java 面向对象(II)

Java 面向对象(III)

Java 异常处理

Java 列表(List)

Java Queue(队列)

Java Map集合

Java Set集合

Java 输入输出(I/O)

Java Reader/Writer

Java 其他主题

Java 程序访问类的私有成员

Java 实例大全

在此示例中,我们将学习访问Java中类的私有方法和属性。

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

示例1:使用getter和setter方法访问私有属性

class Test {

  //私有变量
  private int age;
  private String name;

  // 初始化 age
  public void setAge(int age) {
    this.age = age;
  }

  // 初始化 name
  public void setName(String name) {
    this.name = name;
  }

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

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

}

class Main {
  public static void main(String[] args) {
    //创建一个Test对象
    Test test = new Test();

    // 设置私有变量的值
    test.setAge(24);
    test.setName("nhooo");

    //获取私有变量的值
    System.out.println("Age: " + test.getAge());
    System.out.println("Name: " + test.getName());
  }
}

输出结果

Age: 24
Name: nhooo

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

我们已经使用getter和setter方法访问私有变量。这里,

  • setter方法 - setAge() 和 setName()初始化私有变量

  • getter方法 - getAge() 和 getName()返回私有变量的值

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

import java.lang.reflect.*;

class Test {

  //私有变量
  private String name;

  //私有方法
  private void display() {
    System.out.println("The name is " + name);
  }

}

class Main {
  public static void main(String[] args) {
    try {
      //创建一个Test对象
      Test test = new Test();

      //创建名为 obj 的对象
      Class obj = test.getClass();

      //访问私有变量
      Field field = obj.getDeclaredField("name");
      // 使私有字段可访问
      field.setAccessible(true);

      //设置字段的值
      field.set(test, "nhooo");

      //获取字段的值
      //并将其转换为字符串
      String value = (String)field.get(test);
      System.out.println("Name: " + value);

      //访问私有方法
      Method[] methods = obj.getDeclaredMethods();
      System.out.println("方法名称: " + methods[0].getName());
      int modifier = methods[0].getModifiers();
      System.out.println("访问修饰符: " + Modifier.toString(modifier));

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

输出结果

Name: nhooo
方法名称: display    
访问修饰符: private

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

要了解反射,请访问Java Reflection(反射)

Java 实例大全