JAVA的反射基本原理应用

今天看深入浅JDK学了点东西。。需要记录一下子.JAVA的反射基制的简单应用。

JAVA反射的功能:

1。在运行时判断任意一个对象所属的类

2。在运行时构造任意一个类的对象

3。在运行时判断任意一个类所具有的方法

4。在运行时调用任意一个对象的方法。

5。构建动态代理。

新一个类:

 

 接口就不写了:

class ObjImpl implements ObjInterface {

 @Override
 public String getGreeting() {

  return "Hello World.....王涛";
 }

}

 

调用类:

public class Runner {
 public static void main(String[] args) {

   Class objClass = Class.forName("com.testreflect.ObjImpl");//加载这个类
 
   ObjInterface obj = (ObjInterface) (objClass.newInstance());// 根据类名得到类的实例
      Method method = obj.getClass().getMethod("getGreeting",null);// 以下根据方法名得到方法对象
    //在调用取得这个方法的对象的时候要注意getMthod();这个方法有哪个参数..第一个是方法的名称。。如果这个方法

  需要参数的话。。要指定。。参数和类型。。否会抛异常:

  如果:getGreeting(String name,Integer count); 则应该是:

obj.getClass().getMethod("getGreeting",new Class[]{String.class,Integer.class});// 参数类型数组

 调用:method.invoke(obj,new Object[]{"wangta",345});

 

 

JDK的API是这样解释的:

 

 

public Method getMethod(String name,
                        Class<?>... parameterTypes)
                 throws NoSuchMethodException,
                        SecurityException
返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。 name 参数是一个 String,用于指定所需方法的简称。 parameterTypes 参数是按声明顺序标识该方法形参类型的 Class 对象的一个数组。如果 parameterTypes 为 null,则按空数组处理。

如果 name 是 "<init>;" 或 "<clinit>",则将引发 NoSuchMethodException。否则,要反映的方法由下面的算法确定(设 C 为此对象所表示的类):

  1. 在 C 中搜索任一匹配的方法。如果找不到匹配的方法,则将在 C 的超类上递归调用第 1 步算法。
  2. 如果在第 1 步中没有找到任何方法,则在 C 的超接口中搜索匹配的方法。如果找到了这样的方法,则反映该方法。
在 C 类中查找匹配的方法:如果 C 正好声明了一个具有指定名称的公共方法并且恰恰有相同的形参类型,则它就是反映的方法。如果在 C 中找到了多个这样的方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则反映该方法;否则将从中任选一个方法。

注意,类中可以有多个匹配方法,因为尽管 Java 语言禁止类声明带有相同签名但不同返回类型的多个方法,但 Java 虚拟机并不禁止。这增加了虚拟机的灵活性,可以用来实现各种语言特性。例如,可以使用桥方法 (brige method)实现协变返回;桥方法以及将被重写的方法将具有相同的签名,不同的返回类型。

   Object result = method.invoke(obj,null);// 动态调用方法
   System.out.println("返回结果:" + (String) result);

}

 

}

转自:http://www.dev26.com/home/start

工业产线瑕疵检测:基于 YOLO 的自动化质检系统实战 从工业瑕疵数据集构建到模型训练,从桌面检测界面到产线适用性优化,本文覆盖了一套工业质检系统的完整路线。这个场景的核心评价指标不是最高精度,而是在保证 recall ≥ 0.95 的前提下尽可能压低 false positive——因为漏检的直接成本(客户投诉、质量事故)远高于误报的成本(人工复检)。部署时先设一个偏低的置信度阈值确保覆盖,再通过持续收集人工复检数据来逐步调优。 阅读详情

相关推荐

Smali语言基础语法

定义、声明、调用 Smali数据类型 定义:与Java相同,Smali中也有一套数据类型体系,且该体系实质上是同Java一一对照的。 示例1:Smali——Java数据类型对照表 PS:如上图所示,Smali语言中的数据类型的关键词基本上为Java中同名数据类型的首字母大写,需要着重记忆的例外为:1.long类型的关键词为大写J;2.boolean类型的关键词为大写Z;3.数组的关键词为左半边中括号[;4.object类型(各种类)的关键词为大写L加上该类的全类名路径,路径中的层级用/分割。

aketoshknight的博客 1万+

java反射的原理,作用

什么是反射,反射原理 Java反射的原理:java类的执行需要经历以下过程, 编译:.java文件编译后生成.class字节码文件 加载:类加载器负责根据一个类的全限定名来读取此类的二进制字节流到JVM内部,并存储在运行时内存区的方法区,然后将其转换为一个与目标类型对应的java.lang.Class对象实例 连接:细分三步 验证:格式(class文件规范) 语义(final类是否有子类)...

进化的深山猿 4万+

Cisco Packet Tracert 无线路由器配置

Cisco Packet Tracert 无线路由器配置

yushan_caoyu的博客 2万+

java动态与反射的基本原理及实际应用

            java动态与反射的基本原理及实际应用                  要想深入研究java的反射机制,首先要了解什么是动态绑定。              动态是相对于静态来说的。二者的区别主要在于创建对象的时间不一同,静态绑定是编译时创建对象,而动态绑定是在运行时创建对象。         我们先创建一个简单的MyFruit接口。 package F...

a1454396751a的博客 416

从Gcode命令看3D打印机的‘大脑’:Marlin/Klipper固件是如何执行你的指令的?

本文深入解析3D打印机固件Marlin和Klipper如何执行Gcode指令,从语法解析到运动控制算法,再到温度管理,详细揭示了从指令到物理动作的转化过程。通过对比两大固件的设计哲学和性能优化技巧,帮助用户更好地理解和调优3D打印机的核心控制系统。

weixin_26763955的博客 382

2025-E题国一-简易自行瞄准装置:基于嘉立创地猛星/天猛星与K230的视觉巡线云台系统设计

本文详细介绍了2025年全国大学生电子设计竞赛E题一等奖作品——基于嘉立创地猛星/天猛星与K230的视觉巡线云台系统设计。该系统通过地猛星主控实现小车巡线,天猛星主控驱动云台,结合K230开发板的视觉识别能力,构建了一套完整的视觉巡线云台系统,实现了自动巡线与精准瞄准功能。文章深入剖析了硬件选型、双闭环PID控制算法、视觉识别与目标跟踪等核心技术,并分享了系统调试与避坑经验。

weixin_42596011的博客 674

Java进阶-反射的详解与应用

本文深入探讨了Java反射机制的核心概念、应用实例及其在现代Java开发中的重要性。文章首先介绍了反射的基本原理和能力,包括在运行时动态获取类信息、操作对象字段和方法的能力。随后,通过具体代码示例,展示了如何利用反射进行字段访问、方法调用、处理泛型方法以及访问私有成员等高级应用,进一步讨论了反射在动态代理、框架开发、数据映射和软件测试中的实用场景。最后,文章总结了反射的优缺点,提出了在实际开发中使用反射的最佳实践和注意事项,为Java开发者提供了一份既全面又深入的反射机制指南。

踏雨歌青春,诗酒趁年华 5154

COCO2017数据集类别分布深度解析

本文深入解析了COCO2017数据集的类别分布情况,包括80个常见物体的分类统计和样本数量分析。通过对比训练集与验证集的分布一致性,探讨了数据均衡性问题,并针对高频和低频类别提出了实用的数据预处理和模型训练建议,帮助优化计算机视觉任务的性能。

weixin_42533751的博客 370

java中的反射原理,为什么要使用反射以及反射使用场景(面试常问)

java中的反射原理,为什么要使用反射以及反射使用场景     什么是反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象. 看下面一段代码 在这里插入代码片 这里的filter指的是Spring框架

易柏州的博客 2万+

Allan方差这个工具,怎么把它用的更顺手?(附Allan方差、动态Allan方差代码)

本文详细说明了Allan方差和动态Allan方差的计算过程,并通过递归运算和时间序列选择两种算法提高动态Allan方差的计算效率。文末提供了快速动态Allan方差计算代码。

victoryqian528的博客 372

动态规划之【树形DP】第3课:树形DP应用案例实践2

动态规划之【树形DP】第3课:树形DP应用案例实践2

王老师青少年编程 763

JAVA-反射+注解

java反射+注解

jsdoulaoula的博客 5608

[deprecated]第九章:SVM机制: 9-2 Linux HMM原理与实现详解

Linux内核HMM(异构内存管理)子系统为异构计算平台提供统一内存管理机制,支持CPU与GPU等设备共享虚拟地址空间,实现零拷贝数据访问。其核心功能包括:1)统一虚拟地址空间,设备可直接访问CPU进程内存;2)实时页表同步与失效通知,确保地址空间一致性;3)支持设备端page fault处理;4)管理多种内存类型(系统内存、设备私有内存等)。HMM通过mmu_interval_notifier机制感知地址空间变化,提供标准API简化驱动开发,显著提升异构计算性能和数据传输效率。

图形/计算GPU的驱动与虚拟化技术分享园地 2541

java反射机制

java反射机制是Java中比较重要的概念,广泛应用于各种框架中,简单的应用有java使用jdbc连接数据库时,使用反射机制加载jdbc驱动。 因此,本文决定从基础到简单应用对Java反射机制做一个简单的总结。 1.何为反射? 1.1反射的概念 现实生活中有很多反射的例子,比如医院里面的X射线,西游记里面的照妖镜等,都是对反射的一个很好的解释。因此,可以看出反射其实具有透视的作用,可以透视一个类,透视一个对象。 有一个很形象的比喻:虽然你可以在Java中由很多对象(虽然现实生活中是一个单身狗,哈哈),但这些

排长性感的小屁屁 2315

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【详解】Java反射机制(打穿封装)

本文章详细介绍了Java反射的作用及如何使用反射,常用的反射调用方法在本文章中都有使用代码及其结果进行演示,最后总结了反射的优缺点和进行重点的总结非常详细。

2301_80035594的博客 2472

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java中的反射原理,为什么要使用反射以及反射使用场景

在当前的反射篇章我们可以理解为,我可以得到张三的作业的所有答案,然后我拿着自己用!对于任意一个对象,都能够调用它的任意一个方法和属性;3.通过反射,我们可以在方法的前后加上事务回滚相关的代码,然后通过上面例子中的invoke方法调用目标方法。上面的例子我们也发现了Class对象的APi的规律,只要加了Declared的Get方法,我们就能够。我们现在居然只通过一个类的路径,获取到了这个类的所有信息,并且还能调用他的所有方法。好,例子来了,顺便我们熟悉一下Class对象的常用API,面试的时候就可以装逼了。.

m0_61466807的博客 1143

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java反射机制解读

反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息。加载类后,在堆中就产生了一个class类型的对象,这个对象包含了类的完整结构的信息,通过这个对象得到类的结构。

大河之犬的博客 924

java反射i_java反射应用

简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息.反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中它的灵活性就表现的十分明显。当程序主动使用某个类时,若该类还没加载到内存中,系统会通过加载,链接,初始化3个操作对类进行初始化。类字面常量”,class”创建Class对象的引用...

weixin_39574065的博客 78

Java反射——如何通过Java中的反射调用对象的方法?

  一.Java反射拿到调用对象的方法 1.通过Class.forName(“包名+方法的类名”)拿到方法的对象; 如:Class&lt;?&gt; clazz = Class.forName("ReflectionTest");         也可以通过实例,获取方法的对象类,         如:String str = "test , reflection";         ...

麦小洛 8万+

Java设计模式——1.Java反射技术

1.反射的介绍 Java反射技术应用广泛,它能够配置:类的全限定名、方法和参数,完成对象的初始化,甚至是反射某些方法。这样就能大大增强Java的可配置性,Spring IOC的基本原理也是如此。 反射机制指在程序运行过程中,对任意一个类都能获取其所有属性和方法,并且对任意一个对象都能调用其任意一个方法。这种动态获取类和对象的信息,以及动态调用对象的方法的功能被称为Java语言的反射机制。 ...

discover_space 509

java反射

文章目录java反射静态语言与动态语言的区别Class类静态成员和非静态成员分配内存的时机什么是反射hashCode和equals必须保持一致反射的使用例子 java反射 静态语言与动态语言的区别 动态语言的意思就是在运行的时候可以更改编译好的class文件,可以对其方法,属性或者属性类型做改变。但是静态语言在运行的时候不能够更改已经编译好的class文件的内容。java虽然是静态语言但是却可以通过反射机制编程动态语言,也就是说通过反射可以在运行的时候更改java中已经编译好的class文件,对其中的属性,

xzy的博客 1643

【Java】韩顺平Java学习笔记 第23章 反射

简单来说,符号引用是类文件中的抽象表示,而直接引用是虚拟机内部使用的具体引用。虚拟机在加载类时会解析这些符号引用,以便程序能够正确地访问类的方法和字段。这一过程保证了程序的可移植性和安全性。

YA____的博客 888

「Java」《深入理解Java反射及其应用实例》

它提供了一种途径,让我们在编写代码时不需要明确指定类名,而是通过运行时获取类的相关信息并进行操作,这为程序的灵活性和扩展性带来了很大的便利。本文深入探讨了Java反射机制的原理和应用实例,从配置文件解析到ORM框架的实现,展示了反射在实际开发中的价值和应用场景。希望通过本文的介绍能够加深对Java反射机制的理解,并能在合适的场景中灵活运用,提升代码的灵活性和开发效率。而反射机制提供了一种动态创建对象的方式,即在运行时根据类的信息动态地创建对象,而不需要在编译期间明确知道类的类型。方法创建了对象实例。

技术路上的探险家 412

【Java基础】Java反射及其原理⭐⭐⭐⭐⭐

Java的反射知识梳理+动态代理

qq_44742348的博客 849

Java反射的用法

反射本质就是操作构造方法、成员变量、成员方法 反射的基本理解: 利用另一种方式去获取一个类的对象、调用类中的方法、使用类中的成员变量。 反射是基于正射。 正射: 对象.方法(实际参数) 反射: 方法对象.invoke(对象,实际参数) 反射代码的编写: 1、获取一个类的字节码对象 -> Class 类的类 字节码对象中封装了类中的构造方法、成员变量、成员方法 2、根据字节码对象获取类中相应的成员对象 ...

m0_57640408的博客 3476

java反射全接触(原理,示例和应用)

网上已经有很多关于反射的文章,之所以需要写这篇博客,原因在于:一是自己做一下学习笔记,二是从我学习的感触来做一下比较全面的总结,三是笔者想从基本原理上来阐述反射机制、去掉边边角角而专注于反射的基本概念和应用。 一、预先需要掌握的知识(java虚拟机) java虚拟机的方法区: java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区。方法区的主要

lubiaopan的专栏 2075
上一篇: Struts.xml配置文件解释
下一篇: static关键字
wtsoftware
博客等级 码龄19年 12粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值