Reflection in Java


反射到底是什么呢,我被问到的时候其实也没办法很好的回答这个问题,翻一翻博客,然后逐条讲解。今天干脆就整合一下,免得以后还要去翻。

首先讲一下Java是如何在运行时识别对象和类的信息,有两种方式,RTTI和反射,RTTI假设我们已经知道了所有的类型信息,反射让我们在运行过程中使用这些信息(尤其是私有的属性

1、RTTI

class对象

RTTI是如何在Java中工作的呢,这些类型信息如何在运行时表示?这是由Class对象来完成的,顾名思义,它包含了所有和Class相关的信息。Java会使用class对象来执行RTTI,即使你正在执行的时类型转换这类的工作。

每个Class都会产生一个class对象,保存在.class文件。(这样我们知道其实class对象是编译后的产物)所有的类都是在对其第一次使用的时候,动态加载到JVM的,但程序创造一个对静态成员的引用的时候,就会加载这个类。class对象只会在需要它的时候才会加载,而static初始化是在类加载时进行的。

public class TestMain {
Public static void main(String [] args) {
System.out.println(A.name);
}
}
class A { public static String name="Alice"; static {
System.ouut.print("A静态块");
} pulic A(){
System.out.println("A构造了")
}
}

类加载器会检查这个类的Class对象是否已经被加载过,如果没有,就会根据类名来找到对应的.class文件。

什么是反射?

说了那么多有的没的,到底什么是反射呢

对于任何一个类,我们都能知道这个类会有那些方法和属性。对于任何一个对象,我们能知道,可以调用它的方法和属性。这种动态获取对象信息和调用对象方法的过程叫做Reflection

所谓的反射,也就是获取类的字节码(.class文件),通过class对象获取

反射的三种形式

使用getClass来获取此Object的运行时类

Test t = new Test();//对象创建

Class c = t.getClass();//获取Class对象

System.out.println(c.getName());//打印名称

直接.class

Class c = Test.Class;

Class.forName()这个在数据库操作里面用的很多了

try {
Class c = Class.forName("com.jhin.Test");
System.out.print(c.getName());
} catch (ClassNotFoundExcetion e){
e.printStackTrace();
}

一般我们选用Class.forName

参考:


《Java编程思想》

Java重点基础:反射机制 https://baijiahao.baidu.com/s?id=1619748187138646880&wfr=spider&for=pc

Java中的反射(1)的更多相关文章

  1. Java中的反射和注解

    前言 在Java中,反射机制和注解机制一直是一个很重要的概念,那么他们其中的原理是怎么样呢,我们不仅仅需要会使用,更要知其然而之所以然. 目录 反射机制 反射如何使用 注解定义 注解机制原理 注解如何 ...

  2. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  3. 浅说Java中的反射机制(二)

    写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...

  4. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

  5. java中动态反射

    java中动态反射能达到的效果和python的语法糖很像,能够截获方法的实现,在真实方法调用之前和之后进行修改,甚至能够用自己的实现进行特别的替代,也可以用其实现面向切片的部分功能.动态代理可以方便实 ...

  6. 第89节:Java中的反射技术

    第89节:Java中的反射技术 反射技术是动态的获取指定的类,和动态的调用类中的内容(没有类前就可以创建对象,将对象的动作完成,这就是动态的获取指定的类). 配置文件把具体实现的类名称定义到配置文件中 ...

  7. java笔记十:java中的反射

    Java中,反射是一种强大的工具.它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接.反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而 ...

  8. 【Java基础】java中的反射机制与动态代理

    一.java中的反射机制 java反射的官方定义:在运行状态下,可以获取任意一个类的所有属性和方法,并且可通过某类任意一对象实例调用该类的所有方法.这种动态获取类的信息及动态调用类中方法的功能称为ja ...

  9. java中使用反射获取pojo(实体)类的全部字段值

    说起反射.不得不说它实在是太强大了,通过反射就能够轻轻松松拿到各种东东,假设你想在项目中解除对某个类的依赖,能够考虑用反射. 今天跟大家分享的是通过java中的反射,获取pojo类的全部字段值. 为什 ...

  10. java 中利用反射机制获取和设置实体类的属性值

    摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...

随机推荐

  1. WPF获取外部EXE图标最简单的方法

    原文:WPF获取外部EXE图标最简单的方法 首先在工程添加对System.Drawing的引用 创建以下方法: public static ImageSource GetIcon(string fil ...

  2. windows下编译qt的mysql驱动

    windows下编译qt的mysql驱动cd %QTDIR%\src\plugins\sqldrivers\mysqlqmake –o Makefile INCLUDEPATH+="C:\M ...

  3. [ACM] POJ 3096 Surprising Strings (map使用)

    Surprising Strings Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5783   Accepted: 379 ...

  4. git建tag备忘

    1.git tag -a v1.1.8_20180613 -m '实时上传位置等功能提交测试' 2. git push origin v1.1.8_20180613

  5. NetCore 上传,断点续传,可支持流上传

    之前公司要做一个断点续传的业务,找了许多都没有找到合适的,都是残次不全的,终于让我遇到一个基于百度的 webuploader 的断点续传.原作者: 断点续传(上传)( https://www.some ...

  6. WPF常见内存泄露

    Event handlers leak This type of leak occurs when subscribing an object (let's call it listener) to ...

  7. 【全面解禁!真正的Expression Blend实战开发技巧】第九章 FluidMoveBehavior完全解析之二平滑运动的滚动条

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第九章 FluidMoveBehavior完全解析之二平滑运动的滚动条 这一章讲解FluidMoveBehavior的另一个应用, ...

  8. Win10《芒果TV》商店版更新v3.2.2:新增对Win10产品专用会员兑换码支持,全新的最具价值用户纪念奖励

    在WinHEC2016宣布Win10和ARM历史性结合之际,<芒果TV>UWP版迅速更新v3.2.2版,主要是新增对Win10产品专用会员兑换码支持,推出全新的最具价值用户纪念奖励(具有唯 ...

  9. Android手机导出文件

    因为要写联系人相关的东西,所以得把db导出来看看 第一步:Root手机 尝试了几个Root工具,发现就KingRoot能root 第二个:编写bat脚本 脚本内容是先将DB文件从/data/data ...

  10. Android零基础入门第1节:Android的前世今生

    原文:Android零基础入门第1节:Android的前世今生 现在网上有很多各色Android资料了,但相对来说还是比较零散,Android覆盖的范围极广,最近刚好有机会全部拉通整理一遍,也保存起来 ...