在此示例中,我们将学习访问Java中类的私有方法和属性。
要理解此示例,您应该了解以下Java编程主题:
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()返回私有变量的值
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(反射)。