首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一文读懂 Java 反射机制那些

在此之前,回顾下java程序的编译运行过程,分为三个阶段:源码(.java文件)进过编译生成字节码文件(.class文件),然后jvm加载字节码文件执行程序(runtime)。...什么是java反射机制? 1983年Smith首次提出反射这个概念,主要指程序可以访问、检测和修改他本身状态或行为的一种能力。...java反射机制是在运行状态中中对类进行解剖并操作类中的构造方法,成员方法,成员属性(主要用于框架中),这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。...Class对象和反射机制的联系。 了解了反射机制的概念,那么可见要想利用java反射机制做一些事,那么就要利用Class对象,所以说Class对象是反射的前提。 那么,怎么获取Class对象?...反射最主要还是运用在框架中,了解反射才更好的了解一些框架的原理。 作者:四夕又欠

55040

Java 注解 Annotation

概述 了解 Java 注解前必须先了解元注解。 元注解:描述注解的注解。 如果明白元数据概念就比较好理解元注解 元数据:描述数据的数据。 还是比较抽象哈,下面举个例子说明下。...JDK提供了4种元注解 @Retention 声明注解的生命周期 @Target 修饰注解可以使用到那些目标对象上 @Document 提取javadoc 文档 @Inherited 继承性,使用它...@Target @Target Annotation表示的是这个Annotation可以应用在哪里,是对Annotation应用的限制,如果没有这个标识的话,Annotation可以用在任何地方,比如类上...通过源码可以发现,使用@Target来限制该注解只能使用在方法上面使用;@Retention来限制该注解只在编译期间使用,编译完成class后就不存在了。...总结 Java中的注解,看源码什么也没实现,都只是定义而已。说白了就是给类、或方法、属性等添加一个注释。 但注解可以通过 Java反射机制获取到。而这就是注解强大的地方

774130
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java异常&反射常见面试题及答案

    4.Java中异常分类 5.如何自定义异常 6.Java中异常处理 7.常见的异常 8.异常打印信息组成 9.常见方法 10.如何自定义异常 11.什么是Java反射机制?...12.举例什么地方用到反射机制? 13.java反射机制的作用 14.Java反射机制类 15.反射机制优缺点? 16.利用反射创建对象? 参考: 1.error和exception有什么区别?...throw: (1)throw 语句用在方法体内,表示抛出异常,由方法体内的语句处理。...throws: ​ (1)@throws 语句是用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理。 ​...这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。 12.举例什么地方用到反射机制? JDBC中,利用反射动态加载了数据库驱动程序。

    15620

    眼动追踪与VR

    ---- 眼动追踪通常是通过连续测量瞳孔中心和角膜反射之间的距离来实现的--距离的变化取决于眼睛的角度。一种肉眼看不见的红外线会产生这种反射,同时摄像机会记录和跟踪这些运动。...VR的原理是一样的,但有一个关键的区别——眼睛不一定指向人看的地方。在现实世界中,眼睛表现出所谓的“收敛”——眼睛的角度指向注视点的中心点(见下图)。 ?...并不是所有的VR环境都必须有这些信息,这就排除了在这些场景中进行精确跟踪的可能性,但对于那些有这些信息的环境,可以进行眼动跟踪。 ?...VR中眼动追踪的好处 ---- 由于渲染完整虚拟环境是一个计算量巨大的过程,因此必须找到减轻这种负担的方法,而把计算能力用在其他方面(例如,确保流畅的体验,扩展功能或图形外观)。...Adding immersive virtual reality to a science lab simulation causes more presence but less learning.

    78010

    Effective-java-读书笔记之通用程序设计

    多个集合的同步位移.for-each循环可以用在任何实现了Iterable接口的对象上.第59条 了解和使用类库举例: 随机数的例子 -> 了解和使用类库....尤其是java.lang, java.util和java.io包下的.还有collections, streams, concurrent等.第60条 如果需要精确的答案, 请避免使用float和double..., 而不被它的cost影响:如果你编写的程序必须要与编译时未知的类一起工作, 如有可能, 就应该仅仅使用反射机制来实例化对象, 而访问对象时则使用编译时已知的某个接口或者超类.第66条 谨慎地使用本地方法...Java Native Interface (JNI)允许Java应用程序可以调用本地方法(native method), 即本地程序设计语言(C或者C++)来编写的特殊方法.使用本地方法来提高性能的做法不值得提倡....第67条 谨慎地进行优化不要因为性能而牺牲合理的结构.努力避免那些限制性能的设计决策.要考虑API设计决策的性能后果.为了性能而包装API -> bad idea.在每次试图做优化之前和之后, 要对性能进行测量

    44050

    干货系列之java注解

    干货系列之java注解 前言 java反射和注解在java里面很重要,但是很多人对这方面的知识理解不是很好,我来说说我自己对java反射和注解的理解,这两块内容本来应该出在一个博客文章里面讲解,但是由于我的...java反射说的内容有点小多,然后我就分开将讲解一下。...目录 注解的概念 注解的类别 注解用法 通过反射获取注解 反射注解一起使用拼写SQL语句实战演练 注解的概念 java注解: 比较官方的说法: 从JDK5开始,Java增加对元数据的支持,也就是注解,...注解,可以看作是对 一个 类/方法 的一个扩展的模版,每个 类/方法 按照注解类中的规则,来为 类/方法 注解不同的参数,在用到的地方可以得到不同的 类/方法 中注解的各种参数与值。...就是说我声明的这个注解可以用在那个地方,比如说@Override,是不是只能用在重写的方法上面。如果你学了springboot的话,里面的很多注解都是可以使用在类上面也可以使用在方法上面。 2.

    33040

    JAVA 注解的基本原理

    方法上可以进行注解,类上也可以注解,字段属性上也可以注解,反正几乎需要配置的地方都可以进行注解。...反射的事情我们待会说,而编译器的扫描指的是编译器在对 java 代码编译字节码的过程中会检测到某个类或者方法被一些注解修饰,这时它就会对于这些注解进行某些处理。...这一种情况只适用于那些编译器已经熟知的注解类,比如 JDK 内置的几个注解,而你自定义的注解,编译器是不知道你这个注解的作用的,当然也不知道该如何处理,往往只是会根据该注解的作用范围来选择是否编译进字节码文件...:允许作用在方法上 ElementType.PARAMETER:允许作用在方法参数上 ElementType.CONSTRUCTOR:允许作用在构造器上 ElementType.LOCAL_VARIABLE...:允许作用在本地局部变量上 ElementType.ANNOTATION_TYPE:允许作用在注解上 ElementType.PACKAGE:允许作用在包上 @Retention 用于指明当前注解的生命周期

    62221

    JAVA 注解的基本原理

    方法上可以进行注解,类上也可以注解,字段属性上也可以注解,反正几乎需要配置的地方都可以进行注解。...反射的事情我们待会说,而编译器的扫描指的是编译器在对 java 代码编译字节码的过程中会检测到某个类或者方法被一些注解修饰,这时它就会对于这些注解进行某些处理。...这一种情况只适用于那些编译器已经熟知的注解类,比如 JDK 内置的几个注解,而你自定义的注解,编译器是不知道你这个注解的作用的,当然也不知道该如何处理,往往只是会根据该注解的作用范围来选择是否编译进字节码文件...:允许作用在方法上 ElementType.PARAMETER:允许作用在方法参数上 ElementType.CONSTRUCTOR:允许作用在构造器上 ElementType.LOCAL_VARIABLE...:允许作用在本地局部变量上 ElementType.ANNOTATION_TYPE:允许作用在注解上 ElementType.PACKAGE:允许作用在包上 @Retention 用于指明当前注解的生命周期

    1.3K30

    Java反射机制的原理和用途

    看了好多关于Java反射机制的文章,大多都太过官方,消化起来比较稍显费劲,本篇,我会依据自己的理解去阐述什么是Java反射机制,反射用在什么地方,以及怎么来使用?...但是JAVA有着一个非常突出的动态相关机制——Reflection(反射),用在Java身上指的是可以于运行时加载、探知、使用编译期间完全未知的classes。...string Method(string parm1,int param2,…) { // do something } 反射用在什么地方...这些,都不知道的话,我们也没法定论,这个Java反射机制,用在什么地方比较和合适(注意,一项技术的诞生,一定是为了方便另一项技术的使用,否则会失去本身存在的意义!)...这也是Java程序为什么是无关平台的所在,原因在于,java的源代码会被编译成.class文件字节码,只要装有Java虚拟机JVM的地方Java提供了各种不同平台上的虚拟机制,第一步由Java IDE

    48240

    java基础-注解Annotation原理和用法

    但是,我们可以通过java反射机制来获取Annotation的信息,并根据这些信息来对程序进行赋值、分发等操作。...; @Documented; 下面详细说明这四种元注解的作用: @Target 被用于描述注解的使用范围,即注解可以用在所修饰对象的什么地方,取值可以是ElementType中的一种:...当使用java反射去获取一个@Inherited修饰的annotation时,反射检查将递归检查,检查class和其父类,直到发现指定的annotation类型被发现,或者到达类继承结构的顶层。...clazz的对象,再反射赋值给field。...这就是Spring那些框架的依赖注入的实现原理,有兴趣的可以自己再优化一下。 读取类的注解信息还有其它的几个方法,在此不再一一说明,可以自行研究java.lang.reflect包。

    42610

    一篇文章,全面掌握Java自定义注解(Annontation)

    注解简介 注解(Annontation),Java5引入的新特性,位于java.lang.annotation包中。...获取类方法和字段的注解信息,只能通过Java反射技术来获取 Annotation 对象。 注解可以没有定义成员,只做标识。...java.lang.annotation提供了四种元注解: @Documented – 注解是否将包含在JavaDoc中 @Retention – 什么时候使用该注解 @Target – 注解用于什么地方...注解的作用目标 通过@Target定义注解作用的目标,比如作用于类、属性、或方法等,默认可用于任何地方。...ElementType.TYPE_USE:类型的注解,表示这个注解可以用在所有使用Type的地方(如:泛型,类型转换等),jdk1.8引入。

    3.1K10

    浅谈Java反射(Reflection)什么是反射?为什么我们需要反射?如何使用反射总结

    什么是反射反射有什么用? 如何使用反射? 什么是反射反射被广泛运用在那些需要检查和控制改变在运行时的行为的程序中。反射的概念常常和自检(introspection)搞混。...>[0]); m.invoke(dog); 在java中,反射可以理解为加强的Introspection,因为你无法改变一个对象的构造,但是可以改变对象的属性和方法的可见性 为什么我们需要反射?...,方法的可见性 等等 反射是很多框架的共有的方法: 例如JUnit,就是使用反射去找出那些带有@Test注解的方法,然后就利用反射在单元测试中调用这些方法 在web框架中,开发人员将他们定义实现的接口和类放到配置文件中... 如何使用反射 具体的使用方法细节可以参考java API 下面我们介绍几种简单常用的反射的使用方法 从对象获取类名: package myreflection...; import java.lang.reflect.Method; public class ReflectionHelloWorld { public static void main(

    1.9K20

    你知道android的MessageQueue.IdleHandler吗?

    原文链接:http://wetest.qq.com/lab/view/352.html WeTest 导读 干货!干货!或许可以是一种处理问题的新思路哟!...No, too naive  ~~ [图片] 你看谷老师说了,onStart是用户可见,onResume是用户可交互,谷老师可没说onResume是绘制完成吧~那么android那些耗时的measure...,原因就是这个页卡的内容比较复杂,用数据向它填充的时候花了较长时间,代码如下: [图片] [图片] 可以看到这个detailView就是这个侧滑的页卡了,填充里面的数据花了90ms,如果这个时间是用在了界面...注意这个地方Looper.myQueue()如果在主线程调用就会使用主线程looper了,所以我选择反射这个HandlerThread的looper来设置它,这个IdleHandler我们返回了true...好了,结论是这个地方IdleHandler用作了一个消息的触发器,是不是挺有意思的呢?

    87310

    类加载与反射 3

    java零基础入门-高级特性篇(十六) 类加载与反射 3 如果你认为反射只有前面介绍的那些作用,那么就太小看这个功能了。...本章再来介绍反射中更加强大的用法,反射功能可以在设计层面更好的处理一些难题,甚至改变编程的方式。...如果没有一套完善的日志系统,我们无从查起,不是知道具体哪个环节出了问题,所以需要对用户的每一步的操作都记录日志,这样出了问题就可以精确的追踪到出问题的地方。这要怎么改造系统?...@Target – 指定该注解可以使用在什么地方,比如是在方法上的注解还是类上的注解。如果不指定此元注解,标识该注解可以用在任何元素上。下面是可以指定的位置。...@Target指定此注解用在字段上,@Retention指定为RUNTIME,运行时可以使用反射来调用。注解中指定可以在注解上使用的参数,参数类型只能是基本类型,boolean是基本类型可以使用。

    50310

    给编译器看的注释——「注解」

    •ElementType.TYPE:允许被修饰的注解作用在类、接口和枚举上•ElementType.FIELD:允许作用在属性字段上•ElementType.METHOD:允许作用在方法上•ElementType.PARAMETER...:允许作用在方法参数上•ElementType.CONSTRUCTOR:允许作用在构造器上•ElementType.LOCAL_VARIABLE:允许作用在本地局部变量上•ElementType.ANNOTATION_TYPE...注解与反射 提到注解,老生常谈的就是反射了,但其实我们有一点是我们需要注意的,注解的存在与反射并无关系,即使没有反射,你依然可以定义一个注解,只不过并不会对你的代码起到什么作用罢了,正因为如此,我们才需要通过反射去获取注解并提供具体的操作逻辑...反射 反射是什么,不清楚的小伙伴可以移步阅读本篇文章 ?...于是,说了这么多,我们又回到了那个老生常谈的观点,没有最完美的技术,只有最合适的技术,不管使用注解还是 XML,做的事情还是那些事情,注解和 XML 都不是万能的,满足自己的需求且以一种更简单的方式解决掉问题即可

    42210

    2020年最新版Java面试题大全(文末附参考答案)

    前言 本套Java面试题大全总共分为以下这十三个模块: Java基础知识面试题 Java异常面试题 JVM面试题 Spring面试题 Spring MVC面试题 Spring Boot面试题 Spring...什么是Java程序的主类?应用程序和小程序的主类有何不同? Java应用程序与小程序之间有那些差别? Java和C++的区别? Oracle JDK 和 OpenJDK 的对比? 2、基础语法 ①....数据类型 Java有哪些数据类型 switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上 用最有效率的方法计算 2 乘以 8 Math.round(11.5...5、反射 什么是反射机制? 反射机制优缺点 反射机制的应用场景有哪些? Java获取反射的三种方法 6、网络编程 7、常用API ①....String 有没有 length()方法 String 类的常用方法都有那些? 在使用 HashMap 的时候,用 String 做 key 有什么好处?

    41950

    简单、快速教你自定义注解

    1、元注解之@Target 作用:指明此注解用在哪个位置,如果不写默认是任何地方都可以使用。...可选的参数值在枚举类ElemenetType中包括: TYPE: 用在类,接口上 FIELD:用在成员变量上 METHOD: 用在方法上 PARAMETER:用在参数上 CONSTRUCTOR:用在构造方法上...RUNTIME:注解存在于Java源代码中、编译以后的字节码文件中、运行时内存中,程序可以通过反射获取注解。 二、注解的属性 1、属性的作用 可以让用户在使用注解时传递参数,让注解的功能更加强大。...; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target...run(obj); } //执行含有注解的方法 public static void run(Object obj) throws Exception { //利用反射获取成员方法

    16110

    Java基础】JavaCore核心-注解技术

    ,自己封装框架组件注解的声明 @interface用来声明一个注解,可以通过default来声明参数的默认值自定义注解时,自动继承了java.lang.annotation.Annotation接口通过反射可以获取自定义注解...public @interface Test { }2.Java注解类型Java自带的标准注解(这些注解后编译器就会进行检查)@Override 标记覆写父类的方法 图片@Deprecated...元注解 (用于定义注解的注解)元注解也是Java自带的标准注解,只不过用于修饰注解,比较特殊。...@Retention、@Target、@Inherited、@Documented、@Repeatable java内置4种元注解@Target 表示该注解用于什么地方ElementType.CONSTRUCTOR...用在构造器ElementType.FIELD 用于描述域-属性上ElementType.METHOD 用在方法上ElementType.TYPE 用在类或接口上ElementType.PACKAGE

    37600

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    热门标签

    领券