java通过反射调用私有变量和私有方法

</pre><pre name="code" class="java">package com.test;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectDemo {
	public static void main(String[] args) throws Exception {
		Class clazz = PackageClazz.class;
//		for (Method method : clazz.getDeclaredMethods()) {
//			if ("privilegedMethod".equals(method.getName())) {
//				method.setAccessible(true);
//				method.invoke(clazz.newInstance(), "ajaxfan", "hah");
//				break;
//			}
//		}
		// 访问私有方法
		Method method = clazz.getDeclaredMethod("privilegedMethod", String.class, String.class);
		method.setAccessible(true);//设置不做安全检查,这样才能访问private属性
		method.invoke(clazz.newInstance(), "I'm","Louis");
//		method.invoke(new PackageClazz(), "I'm","Louis");
		
		// 访问私有变量
		Field field = clazz.getDeclaredField("privilegeField");
		field.setAccessible(true);
		System.out.println(field.getInt(new PackageClazz()));
	}
}

class PackageClazz {
	private int privilegeField = 2;
	private void privilegedMethod(String a,String b) {
		System.out.println(a + "===" + b);
	}
}


在面向对象编程中,私有方法(也称为“受保护”或“内部”方法)通常设计用于类的内部处理,而私有变量(也称作“字段”或“成员变量”)仅能被该类内的方法访问。由于它们的特性,你不能直接从类的外部或公有方法中直接调用私有变量。但是,你可以通过以下几种方式间接访问: 1. **构造函数**:当创建一个新的对象实例时,可以在构造函数中设置私有变量的值。 ```java public class MyClass { private String myPrivateVar; // 构造函数 public MyClass(String value) { this.myPrivateVar = value; } // 私有方法可以在这里访问myPrivateVar private void someInternalMethod() { System.out.println("Value of myPrivateVar: " + myPrivateVar); } } ``` 2. **公共辅助方法**: 可以提供一个公共的辅助方法,将对私有变量的操作封装起来供其他方法使用。 ```java public class MyClass { private String myPrivateVar; public void setMyPrivateVar(String value) { this.myPrivateVar = value; } // 公共方法调用私有变量 public void somePublicMethod() { setMyPrivateVar("Some value"); someInternalMethod(); // 调用内部方法 } private void someInternalMethod() { System.out.println("Value of myPrivateVar: " + myPrivateVar); } } ``` 3. **getter和setter方法**:虽然这不是严格意义上的“调用”,但这是常见的模式,通过getter和setter方法来获取或修改私有变量。 ```java public class MyClass { private String myPrivateVar; public String getMyPrivateVar() { return myPrivateVar; } public void setMyPrivateVar(String value) { this.myPrivateVar = value; } // 内部方法可以通过getMyPrivateVar来访问私有变量 private void someInternalMethod() { System.out.println("Value of myPrivateVar: " + getMyPrivateVar()); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值