跳到主要内容

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("Programiz");

// 获取私有变量的值
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 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();

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

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

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

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

// 访问私有方法
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 反射