Day14_75_反射(reflect)
反射
反射的基本概念
反射是由Smith在1982年首次提出,主要是指程序可以访问,检测,修改它本身状态或行为的一种能力。并且能够根据自身行为的状态或结果,调整和修改所描述行为的状态和相关语义。
java 中反射是一种强大的工具,它能够创建灵活的代码,这些代码可以在运行时装配,无需再组件之间进行源码链接,反射允许我们的代码在编写或执行时,使我们的程序能够接入装载到jvm中类的内部信息,而不是源代码中
选定的类协作代码,这使反射成为构建灵活的应有的主要工具,但是如果使用不到会适得其反。
以下是反射机制中的类和对象:
- java.lang.Class Class c = new Class(); Class类代表整体 包含:构造器方法 属性 修饰符 方法 - java.lang.reflect.Constructor Constructor = new Constructor(); 构造器
java.lang.reflect.Field Field f = new Field(); 属性
java.lang.reflect.Method Method = new Method(); 方法
java.lang.reflect.Modifier Modifier = new Modifier(); 修饰符
反射机制的作用?
reflect 机制可以进行反编译 : .class-->.java
reflect 机制可以访问java 对象的属性、方法、构造方法等。
反射机制的两个缺点
性能问题,使用反射基本上是一种解释操作,我们可以告诉jvm我们希望作什么,并且让它满足我们的要求,用于字段和方法接入时反射要远慢于直接代码,性能问题的程度取决于程序中如何使用反射,如果它用于程序运行中很少
涉及的部分,影响较小。使用反射会模糊程序内即将要发生的事情,程序员希望在程序代码中看到程序的逻辑,反射等绕过源代码的技术会带来维护问题,反射需要使用在正真正增加灵活性的地方
反射机制的应用
- 获取class类型对象的三种方式
forName(String className) 方法: 返回带有给定字符串名或接口相关联的class对象
// Class类型c1的内存地址指向堆中的对象,该对象代表employee.class整个类 Class c1=Class.forName("com.shige.day06.reflect.employee"); // 必须加包名
java.lang.Object.getClass() 方法: 返回此Object的运行时类。任何一个对象都有该方法(成员方法需引用)
employee e= new employee();
Class c2=e.getClass(); // c3为此 Objict 的运行时类。
java中每个类都有class属性,可直接赋值
Class c3 = employee.class; //c2 代表整个employee.class文件
// 第一种方式 Date类
Class c5=Class.forName("java.util.Date");
// 第二种方式 Date类
Class c4= Date.class;
// 第三种方式 Date类
Date d=new Date();
Class c6=d.getClass();
Day14_75_反射(reflect)的更多相关文章
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
- go语言之行--接口(interface)、反射(reflect)详解
一.interface简介 interface(接口)是golang最重要的特性之一,Interface类型可以定义一组方法,但是这些不需要实现.并且interface不能包含任何变量. 简单的说: ...
- Golang的反射reflect深入理解和示例
编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examin ...
- golang中的反射reflect详解
先重复一遍反射三定律: 1.反射可以将"接口类型变量"转换为"反射类型对象". 2.反射可以将"反射类型对象"转换为"接口类型变量 ...
- Java框架基础——反射(reflect)
一.Class类的使用 1)在面向对象(oop)的世界里,万事万物皆对象. 在Java中,包括基本的数据类型,都是对象. Class c = int.class;//int 的类类型 那就是说: 类是 ...
- 类的加载到反射reflect
类的加载: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载.连接.初始化这三个步骤来实现对这个类进行初始化. 加载: 就是指将class文件加载进入内存,并为之创建一个Class对 ...
- java 反射(reflect)总结,附对象打印工具类
java反射机制认知 java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取类的信息以及动态调用对象的方法的 ...
- (java)从零开始之-反射Reflect
反射: 当一个字节码文件加载到内存的时候,jvm会对该字节码进行解剖,然后会创建一个对象的Class对象,把字节码文件的信息全部都存储到该Class对象中,我们只要获取到Class对象,我们就可以使用 ...
- Java基础——反射 reflect
什么是反射 (1)Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称 ...
随机推荐
- luogu4464:莫比乌斯反演,积性函数和伯努利数
题目链接:https://www.luogu.com.cn/problem/P4464 简记$gcd(x,y)=(x,y)$. 推式子: $\sum_{i=1}^{n}{(i,n)^xlcm(i,n) ...
- 又长又细,万字长文带你解读Redisson分布式锁的源码
前言 上一篇文章写了Redis分布式锁的原理和缺陷,觉得有些不过瘾,只是简单的介绍了下Redisson这个框架,具体的原理什么的还没说过呢.趁年前项目忙的差不多了,反正闲着也是闲着,不如把Rediss ...
- Spirent Testcenter二层DHCP绑定流配置
1.OLT配置 配一个VLAN,若GE口打Tag,不需要打PVID,打Untag,配PVID. 在ONU上配一个Other Bridge的WAN连接,并配置VLAN 2.TestCenter配置 选定 ...
- 后端程序员之路 46、Redis Sentinel
Sentinel - Redis 命令参考http://doc.redisfans.com/topic/sentinel.html#sentinel-api Guidelines for Redis ...
- 力扣168. Excel表列名称
原题 1 class Solution: 2 def convertToTitle(self, n: int) -> str: 3 s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ ...
- 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Offer 21 这题的解法其实是考察快慢指针和头尾指针. package com.walegarrett.offer; /** * @Aut ...
- Linux速通03 目录文件的浏览、管理和维护
Linux文件系统的层次结构 # 树状结构:在Linux或Unix操作系统中,所有的文件和目录都被组织成一个以根节点开始的倒置的树状结构. # 目录的定义:目录相当于Windows中的文件夹,目录中存 ...
- BurpSuite 一些小技巧
拦截请求 设置不拦截下面的网站(记得保存项目,不然每次都要添加) .*\.?baidu.com|.*\.?google.com|.*\.?bcebos.com|.*\.?bdstatic.com|.* ...
- FreeBSD jail 折腾记(二)
FreeBSD jail 折腾记(二) 创建jail目录 创建4个 分别是模板 骨架 数据 项目 创建模板目录 mkdir -p /jail/j1 # 然后放入基本目录,上篇说过不再写 创建骨架目录 ...
- uniCloud的简单使用 增删改查
新建一个uni-app 项目 启动云开发 选择想要的云服务 在次之前先完成uniCloud 的实名认证 https://unicloud.dcloud.net.cn 有在Web控制台创建过云服务空间就 ...