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. Matlab Tricks(十九)—— 序列左右移的实现

    比如实现如下的移位操作: y(n)=x(n−k) function [y, n] = sigshift(x, m, k) n = m + k; y = x; 本身任意一个 matlab 序列本质上都是 ...

  2. Java利用Zxing生成二维码

    Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法,现在我简单介绍一下使用Java利用Zxing生成与解析二维码 1.二维码的生成 1.1 将Zxing ...

  3. XP双网卡不能上网的问题

    转载. 现在很多本本都是双网卡配置,让两个网卡分别负责连接内外网能够加快上网速度和连接稳定,但不少网友照做后会出现无法上网的情况,这是由于默认网关冲突所导致的.那么该如何处理让双网卡各行其是,互不干扰 ...

  4. NetCore使用Jwtbearer给WebAPI添加访问控制

    原文:NetCore使用Jwtbearer给WebAPI添加访问控制 现在JWT代替session来做访问控制已经成为大部分webapi的做法,今天我们也来尝试一下 WebAPI使用NetCore2. ...

  5. hdu4614 二分法+段树

    意甲冠军:给你1-n花瓶   .起初,所有的空,今天,有两种操作模式, 1:从花瓶a開始插入b朵花          假设不能插进去  输出字符串  否则输出最多插入的起点和终点: 2:把a-b的花瓶 ...

  6. XF 列表视图分组列表填充

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  7. 读取spring工程中resource的文件

    Resource resource = new ClassPathResource("data.json"); // 读文件到字符串 String fileContent = Fi ...

  8. 理解 node.js 的事件循环

    node.js 的第一个基本观点是,I/O 操作是昂贵的: 目前的编程技术最大的浪费来自等待 I/O 操作的完成.有几种方法可以解决这些对性能的影响(来自Sam Rushing): 同步:依次处理单个 ...

  9. Win8 Metro(C#)数字图像处理--2.35图像肤色检测算法

    原文:Win8 Metro(C#)数字图像处理--2.35图像肤色检测算法  [函数名称] 肤色检测函数SkinDetectProcess(WriteableBitmap src) [算法说明] ...

  10. vs2017 cordova调试android app

    方案是:virtualbox + androidx86 7.0+_x64.iso虚拟机方式