如何使用反射访问类的private域和方法?非常简单,由于Field和Method均继承AccessibleObject,只需要调用AccessibleObject的public void setAccessible(boolean flag) throws SecurityException 方法设置为setAccessible(true)即可。具体见下列代码
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectTest {
public static void main(String[] args) throws Exception {
PrivateClass pri = (PrivateClass) Class.forName("PrivateClass")
.newInstance();
Field field = Class.forName("PrivateClass")
.getDeclaredField("priField");
try {
field.set(pri, "youareprivate?");
pri.getPriField();
} catch (Exception e) {
System.out.println(e.getMessage());
}
field.setAccessible(true);
field.set(pri, "youareprivate?");
pri.getPriField();
Method method = Class.forName("PrivateClass").getDeclaredMethod(
"priMethod", new Class[] {});
try {
method.invoke(pri, new Object[] {});
} catch (Exception e) {
System.out.println(e.getMessage());
}
method.setAccessible(true);
method.invoke(pri, new Object[] {});
}
}
class PrivateClass {
private String priField = "priField ";
public void getPriField() {
System.out.println(" the value of priField is " + priField);
}
private void priMethod() {
System.out.println("call the private method!");
}
}
结果:
Class ReflectTest can not access a member of class PrivateClass with modifiers "private"
the value of priField is youareprivate?
Class ReflectTest can not access a member of class PrivateClass with modifiers "private"
call the private method!
分享到:
相关推荐
以下是一个简单的例子,展示如何使用反射访问私有字段: ```java public class PrivateMemberExample { private String secret = "这是私有变量"; // ... } public class HackUtils { public static void main...
然后,你可以遍历这个列表,打印出每个方法的SEL(选择器)和方法名。 在Swift中,可以使用`@_silgen_name`属性来访问私有方法,但这通常被视为非公开API,可能会在未来的Swift版本中改变。因此,尽管这种方法可能...
2. 作用域 public, protected, private, 以及不写时的区别:public 表示公开访问,protected 表示保护访问,private 表示私有访问,而不写时默认为包访问。 3. 编程输出图形:可以使用 Java 的画图库来实现图形的...
- 派生子类可以继承所有非 private 的属性和方法作为自己的成员。 - 覆盖是指子类重新定义父类已有的方法,与父类完全相同的方法名、返回值和参数类型列表。 - 重载与方法覆盖不同的是,重载不要求参数类型列表...
2. 作用域public, protected, private, 以及不写时的区别:public 表示公共的,protected 表示保护的,private 表示私有的,不写时默认为包访问权限。 3. 编程输出图形:Java 提供了多种方式来输出图形,例如使用 ...
- 成员访问:通过反射访问类的属性和方法。 - 构造器的反射调用:动态创建对象。 这套Java基础课件全面覆盖了Java编程的基础知识,通过系统学习,读者将能够掌握Java编程的基本技能,为更深入的Java开发打下坚实...
内部类的优点是可以访问外部类的成员变量和方法。 重写与重载: Java语言的重写和重载是方法的两种形式。重写是指子类重写父类的方法,重载是指方法的多个定义。构造器是否可被重写是一个常见的问题。 对象相等...
2. 作用域public, protected, private,以及不写时的区别:public 为公共访问权限,protected 为保护访问权限,private 为私有访问权限,不写时默认为default访问权限。 3. 编程输出图形:可以使用 Java 的图形库或 ...
反射机制是指在运行时动态获取类的信息和调用类的方法或访问类的属性的能力。 19. 类的反射机制中的包及核心类? 在Java中,核心类是java.lang.Class,它代表正在运行的Java应用程序中的类和接口。 20. 得到Class的...
同时,Java 中有两种实现同步的方法,一种是使用 synchronized 关键字,另一种是使用 wait 和 notify 方法。 5. 继承时候类的执行顺序问题 在 Java 中,当我们使用继承时,父类的构造方法会在子类的构造方法之前被...
- 动态实例化与调用方法:通过反射实现对象的动态创建和方法的动态调用。 9. **Java EE相关** - Servlet:学习Servlet的生命周期,以及doGet和doPost方法的处理请求。 - JSP:理解JSP的脚本元素,以及EL和JSTL的...
- 反射机制的理解,如何通过反射动态访问类、方法和属性。 - 注解的使用和自定义注解。 10. **设计模式** - 常见的设计模式:单例模式、工厂模式、观察者模式、装饰者模式、适配器模式等。 - 设计模式在实际...
1、作用域:Java中的访问修饰符public、private、protected和默认(friendly)的区别在于它们决定了类的成员(变量、方法)可被哪些类访问。public可以被任何类访问,private仅限于同一类,protected允许同一包内的...
作用域决定了变量的可见性,public是公有的,protected是受保护的,private是私有的,在类中不写访问修饰符则默认为默认访问权限,相当于包私有,只对同一包内的类可见。 编程输出特定图形是考察Java基础的编程能力...
- **区别于域和方法**:属性既不像域那样直接对应存储位置,也不像方法那样需要使用圆括号来调用。 #### 总结 通过以上内容的学习,我们可以了解到在C#中,面向对象编程的核心要素之一就是如何有效地管理类的内部...
静态变量和方法是类级别的,由所有对象共享,而this关键字用于引用当前对象实例,避免隐藏同名的局部变量或数据域。构造方法用于初始化对象,如果类是final或包含private构造方法,则无法创建类的实例。 数组是Java...
- **访问和修改私有属性和方法**:使用反射实现对私有成员的访问和修改。 10. **枚举和注解** - **枚举类型**:创建枚举类,枚举常量的使用。 - **注解**:自定义注解,元注解的使用,以及使用反射处理注解。 ...
- 构造器的使用和作用。 - 继承、多态性和封装的概念及实现方式。 - 接口和抽象类的区别。 3. **异常处理** - 异常的分类:检查型异常和运行时异常。 - try-catch-finally语句块的使用。 - throws和throw...
2. 构造器与方法的反射:通过反射调用构造器和方法。 3. 注解处理:理解注解的元注解,以及如何自定义和使用注解。 十、JVM内存模型 1. 堆内存:对象的生命周期,新生代与老年代,以及垃圾回收机制。 2. 方法区:...