java反射方式调用私有方法

以下内容转自:http://blog.youkuaiyun.com/sunyujia/article/details/2501709

 

 

package com.syj.util.reflect;

import java.lang.reflect.Method;

/**
 * <p>
 * Title: 私有方法调用工具类
 * </p>
 * 
 * <p>
 * Description:利用java反射调用类的的私有方法
 * </p>
 * 
 * <p>
 * Copyright: Copyright (c) 2007
 * </p>
 * 
 * @author 孙钰佳
 * @main sunyujia@yahoo.cn
 * @date Jun 1, 2008 10:18:58 PM
 */
public class PrivateUtil {
	/**
	 * 利用递归找一个类的指定方法,如果找不到,去父亲里面找直到最上层Object对象为止。
	 * 
	 * @param clazz
	 *            目标类
	 * @param methodName
	 *            方法名
	 * @param classes
	 *            方法参数类型数组
	 * @return 方法对象
	 * @throws Exception
	 */
	public static Method getMethod(Class clazz, String methodName,
			final Class[] classes) throws Exception {
		Method method = null;
		try {
			method = clazz.getDeclaredMethod(methodName, classes);
		} catch (NoSuchMethodException e) {
			try {
				method = clazz.getMethod(methodName, classes);
			} catch (NoSuchMethodException ex) {
				if (clazz.getSuperclass() == null) {
					return method;
				} else {
					method = getMethod(clazz.getSuperclass(), methodName,
							classes);
				}
			}
		}
		return method;
	}

	/**
	 * 
	 * @param obj
	 *            调整方法的对象
	 * @param methodName
	 *            方法名
	 * @param classes
	 *            参数类型数组
	 * @param objects
	 *            参数数组
	 * @return 方法的返回值
	 */
	public static Object invoke(final Object obj, final String methodName,
			final Class[] classes, final Object[] objects) {
		try {
			Method method = getMethod(obj.getClass(), methodName, classes);
			method.setAccessible(true);// 调用private方法的关键一句话
			return method.invoke(obj, objects);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public static Object invoke(final Object obj, final String methodName,
			final Class[] classes) {
		return invoke(obj, methodName, classes, new Object[] {});
	}

	public static Object invoke(final Object obj, final String methodName) {
		return invoke(obj, methodName, new Class[] {}, new Object[] {});
	}

	/**
	 * 测试反射调用
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		PrivateUtil.invoke(new B(), "printlnA", new Class[] { String.class },
				new Object[] { "test" });
		PrivateUtil.invoke(new B(), "printlnB");
	}
}

class A {
	private void printlnA(String s) {
		System.out.println(s);
	}
}

class B extends A {
	private void printlnB() {
		System.out.println("b");
	}
}

 程序的输出结果为

test
b
说明private方法调用成功了不管是自己的私有方法还是父类的私有方法。

 

 

 

 

 

 

 

 

Java 反射详解(包含私有方法属性的调用) 立即下载

相关推荐

SAP成本计划BAPI接口BAPI_COSTACTPLN_POSTPRIMCOST深度解析与实战指南

在SAP ERP系统中,成本计划是财务与控制模块的核心功能,它涉及对企业未来成本支出的预测与规划。其原理是通过结构化数据模型,将成本要素分配到具体的成本对象上,以实现预算编制和成本控制。这一技术的核心价值在于实现成本数据的标准化、自动化处理,从而提升财务流程效率与数据准确性。在应用场景上,成本计划广泛应用于年度预算编制、项目成本预测、系统间数据集成以及历史数据迁移等关键业务环节。本文聚焦于实现上述流程自动化的关键技术——SAP标准接口BAPI_COSTACTPLN_POSTPRIMCOST,并深入探讨其在高

weixin_29657209的博客 350

Java 反射机制详解:私有方法调用头大?如何通过反射调用类中的私有方法?

在 Java 中如果我们使用 new 关键字调用构造函数对类进行实例化,我们就可以根据在这个类中的修饰符来访问类中定义的非私有方法。但是如果需要在其他类调用私有的方法,就可以利用 Java 中提供的反射来实现。

白鹿第一帅的 优快云 博客 7418

电赛经验分享——赛前准备

⏩ 大家好哇!我是小光,想要成为系统架构师的嵌入式爱好者。⏩在之前的电赛中取得了省一的成绩,本文对电赛比赛前需要准备什么做一个经验分享。加入小光嵌入式交流群(qq群号:737327353)免费获取博主所有资料哦!

qq_52608074的博客 7779

87.怎么用java反射得到一个类的私有方法?

java反射得到一个类的私有方法 获得私有方法的流程是 (1)获取目标类 (2)获取目标方法 Method method=clazz.getDeclaredMethod(name);//可以调用类中的所有方法(不包括父类中继承的方法) Method method=clazz.getMethod(name);//可以调用类中有访问权限的方法(包括父类中继承的方法) (3)method.toGener...

weixin_44078485的博客 1951

ARM Memory Compiler实战指南:从参数配置到GDSII生成的全流程解析

本文详细解析了ARM Memory Compiler在SRAM设计中的全流程应用,从基础参数配置到GDSII文件生成。涵盖SRAM类型选择、核心参数配置策略、高级优化技巧及TSMC 28nm工艺下的实战案例,帮助IC设计工程师高效实现存储器模块的优化设计。

game4的博客 416

第 8 篇:TMC2240 电机正反转实现|DIR 引脚控制 + 代码优化(稳定不抖动)

本文详细介绍了TMC2240电机驱动芯片的正反转实现方法,重点解决方向切换时的抖动和冲击问题。文章首先明确了硬件连接、基础配置和使能状态三个前提条件,然后阐述了DIR引脚电平控制方向的核心原理,提供了STM32的GPIO配置代码。针对方向切换时的电流冲击问题,作者提出了"停止-延迟-切换-启动"的平滑切换逻辑,并给出了包含方向枚举、转速控制和方向切换函数的完整代码实现方案。通过这种优化方法,可以有效避免电机在正反转切换时产生的抖动、冲击声和发热问题,实现稳定的双向控制。文章还提示了后续可

BackCatK Chen的博客 2074

关于Java反射机制以及获取类的私有属性和方法

1.什么是java反射机制? 1.1 反射机制是java具有动态性的关键;那么何为动态性,动态性就是在程序运行时可以改变代码的内部结构,即代码运行过程中,代码内容会发生改变;java反射将Class对象作为核心,Class本身也是一个类,Class对象创建有很多方式:大概介绍几种常用的如下: 通过类名.class的方式创建,如String.class 通过Class类的static方法创建:Class.forName(“包名.类名”) 通过对象的方式创建,先new 对象,然后调用对象的getClass()

qq_40226073的博客 6538

Linux驱动学习--HCI框架及源码分析

目录 一、引言 二、HCI框架 三、pcm_read简要分析 一、引言 最近一直在分析蓝牙驱动,发现在底层驱动与上层协议栈间还有一层HCI,主机控制层,两者之间通过HCI协议通讯 而Linux也将HCI协议抽象层了一个框架。 为上层提供一个统一的接口,让上层协议不依赖于具体硬件的实现。HCI在硬件中的固件与HCI在主机端的驱动通信方式有多种,比如像 UART、USB和PC Card等等。hci_core.c相当于一个框架,用于把各种具体通信方式绞合起来,并提供一些公共函数的实现。 今天就来简单的分析一下 二

文艺小少年的博客 2002

java反射获取方法以及调用方法

Java反射获取方法以及调用方法 获取方法 1.先找到获取方法所在类的字节码对象 2.找到需要被获取的方法 Class类中获取方法: public Method[] getMethods();//获取包括自身和继承(实现)过来的所有的public方法——Method不支持泛型,即后面不接 public Method[] getDeclaredMethods();//获取包括自身所有的方

u014207606的博客 3万+

Qt Installer Framework 简单使用

qt installer framework 简单使用

qq_42815643的博客 2575

YOLO26改进策略【小目标改进】| 添加专用于小目标的检测层 附YOLOv1~YOLOv11的检测头变化详解

在目标检测领域,小目标检测一直是一个具有挑战性的问题。算法以其高效快速的特点受到广泛关注,然而在面对小目标时,仍存在一些局限性。本文将介绍如何在中添加小目标检测层,以提高对小目标的检测能力。原始模型结构如下: 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检测头对应的经过了更多的下采样操作,相比P3/

Limiiiing的博客 351

java通过反射调用private修饰方法

Java反射的三种实现方式: Test test = new Test(); 第一种:通过Object类的getClass方法 Class cla = test .getClass(); 第二种:通过对象实例方法获取对象 Class cla = test.class; 第三种:通过Class.forName方式 Class cla = Class.forName("xx.xx.Test "); 示例: package com.test; class TestA{ private S

hanjiaqian的博客 2605

2ED2410-EM:12v / 24v智能模拟高侧MOSFET栅极驱动器

12v / 24v智能模拟高侧MOSFET栅极驱动器。2ED2410-EM具有输入CPP和CPN的电压比较器。该比较器可用于基于任何模拟电压触发SAFESTATE模式,甚至是外部电压2ED2410-EM。CPP为比较器的正输入,CPN为负输入。VcPREF可以通过微控制器进行调节,也可以通过板载电源芯片(如英飞凌SBC)或简单的分压器在限制VcP(REF)内进行固定,以保持稳定性。使用此比较器允许2ED2410-EM进入SAFESTATE并独立于微控制器关闭MOSFET。

让学习成为一种习惯 2188

Java获取类信息的三种方法+通过反射获取私有属性

通过下面三种方法,我们可以获取到类的信息,包括类的名称、修饰符、父类、接口、字段、方法等信息。这些信息可以用于进行反射操作,例如动态创建对象、调用方法、访问字段等。通过反射可以1.使用Class.forName()方法Class.forName()方法可以通过类的全限定名来获取类信息,例如:Class<?这里,com.example.MyClass是类的全限定名,cls是获取到的类信息。

Jilit_jilit的博客 3312

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java 反射

Java 反射 Java 反射概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 而需要解剖一个类,那么我们第一件事肯定是获取到该类的字节码文件对象。 获取到该类的字节码文件后,我们使用Class中的方法进行解剖。 Class的原理...

haicoder_ibai的博客 328

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

利用java反射调用类及父类的的私有方法

今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为在反射看来根本不区分是否是private的,没有想到调用本身的私有方法是可以的,但是调用父类的私有方法则不行,后来纠其原因很有可能是因为getDeclaredMethod方法和getMethod方法并不会查找父类的私有方法,于是只好自己写递归了,经过尝试果然如此。把代码放出来方便更多人。这段代码可以解决很多实际问题,不

零度的博客专栏 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java反射(常用方法详解)

目录 一、反射机制 二、字节码文件的获取 三、构造方法的反射 四、属性的反射 五、方法的反射 一、反射机制 对于运行阶段的一个类,可以动态的获取这个类的所有属性、方法和构造方法等信息。对于运行阶段的一个对象,也可以动态的获取这个对象的属性、方法、构造方法等信息的机制,称之为反射机制。反射机制是java中非常重要的一个技术。它是JDK1.5的新特性使用反射,需要先获取一个类或者对象的字...

c17315377559的博客 4836

反射获取类的所有方法和属性

反射获取类的所有方法和属性 Java语言中,子类是不能访问父类的私有成员的,包括成员变量和方法,但可以通过Java的反射机制去访问。 其实在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象。所以所谓的继承使子类拥有父类所有的属性和方法其实可以这样理解,子类对象确实拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,...

qq_28022397的博客 2530

Java反射详解

一、反射概述 1.1 什么是反射 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。   JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。   要想解剖一个类,必须先要获取到该类的...

u014253011的博客 171

java 反射 调用私有构造函数_使用反射调用私有方法

1、创建一个被调用的类/*** @version 1.0* @Author F-llin* @Date 2020-12-04 13:53*/public class Bean{private String userid;private String name;public String getName() {return name;}public void setName(String name)...

weixin_34374684的博客 1742

调用java的私有方法

package base;  import java.lang.reflect.Method;public class PrivateTestCall {   /**  * @param args  */ public static void main(String[] args) {  // TODO Auto-generated method stub  try{ 

vvggsky的专栏 1190

java 反射调用_通过Java反射调用方法

TestRef.javaimportjava.lang.reflect.Method;importjava.lang.reflect.InvocationTargetException;/*** Created by IntelliJ IDEA.* File: TestRef.java* User: leizhimin* Date: 2008-1-28 14:48:44*/public class...

weixin_34278722的博客 1179

java有私有方法吗,java访问私有方法

Java中对方法的定义存在四种修饰符,分别是public、protected、default、private,作用域分别如下:publicprotectedprotectedprivate同一个类truetruetruetrue同一个包truetruetruefalse不同包子类truetruefalsefalse不同包非子类truefalsefalsefalse那么,当我们想访问不同类中的私有方...

weixin_39641173的博客 243

反射(中)——反射调用普通方法、类中属性

(3)反射调用普通方法在Class类中有如 下两种取得类中普通方法的函数:A. 取得所有的普通方法:public Method[] getMethods():获得所有的public修饰的方法(包含父列的方法也包含Object类)public Method[] getDeclaredMethods():获得所有成员方法,包括私有的但不包括继承的。B. 取得指定参数的普通方法:public Metho...

qq_40409115的博客 1362

头歌Educoder——Java高级特性 - Java反射

文章目录第1关:了解 Class 对象任务描述相关知识Class 对象三种获取Class类型的实例的方法三种方法获取的 Class 对象之间的区别编程要求测试说明代码样例Reflect_stu.javaReflect_run.javaPerson.java第2关:利用反射分析类的能力任务描述相关知识反射的基本概念Class 对象与反射之间的关系Class 的类结构利用反射分析类的能力编程要求测试说明代码样例Reflect_stu.javaReflect_run.javaPerson.java第3关:在运行时

赵士杰——成功并非一蹴而就,而是在持之以恒的努力中逐渐实现。 1万+
上一篇: oracle update 多表关联
下一篇: SimpleDateFormat日期时间掩码
maimode
博客等级 码龄19年 11粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值