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反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称 ...
随机推荐
- 换人!golang面试官:连怎么避免内存逃逸都不知道?
问题 怎么避免内存逃逸? 怎么答 在runtime/stubs.go:133有个函数叫noescape.noescape可以在逃逸分析中隐藏一个指针.让这个指针在逃逸分析中不会被检测为逃逸. // n ...
- Go的指针
目录 指针 一.指针的声明 二.指针的默认值(Zero Value) 三.指针的解引用 四.向函数传递指针参数 1.非 数组/切片 指针传参 2.数组/切片 指针传参 五.Go不支持指针运算 指针 指 ...
- HTML:HTML基础
HTML不是一门编程语言,而是一种用于定义内容结构的标记语言.HTML由一系列元素(elements)组成,这些元素可以用来包围不同部分的内容,使其以某种方式呈现或工作.一对标签可以为一段文字或者一张 ...
- Shiro反序列化漏洞检测、dnslog
目录 信息收集 poc 参考 信息收集 poc # pip install pycrypto import sys import base64 import uuid from random impo ...
- 上百本电子书(Java/Hadoop/Spark/Linux/机器学习/)免费分享 百度云持续更新
分享一下自己整理的超多电子书, 其中包括:Java,Hadoop,Spark,Linux,Hbase,Hive,机器学习,区块链 目录如下: 1 Java 基础 2 Java 虚拟机 3 Java 并 ...
- ciscn_2019_final_5
目录 ciscn_2019_final_5 总结 题目分析 checksec 函数分析 main menu new_note del_note edit_note 漏洞点 利用思路 EXP 调试过程 ...
- 非对称加密--密钥交换算法DHCoder
/* * 密钥交换算法,即非对称加密算法 * */ public class DHCoder { //非对称加密算法 public static final Str ...
- js【生成规定数量不重复随机数】、【冒泡排序】、【鸡尾酒排序】、【选择排序】、【插入排序】、【未完工的二分插入排序】------【总结】
[生成规定数量不重复随机数] function creatRandom( num ){ var randomLen = num, ranArr = [], thisRan = null, whileO ...
- 攻防世界 reverse 进阶 8-The_Maya_Society Hack.lu-2017
8.The_Maya_Society Hack.lu-2017 在linux下将时间调整为2012-12-21,运行即可得到flag. 下面进行分析 1 signed __int64 __fastca ...
- Activity类组成分析(一)Instrumentation
目录 前言 解剖 继承关系 重要成员 Instrumentation 总结 前言 要了解清楚StartActivity的过程,Activity对象实例的构造过程是重要组成部分:而要弄清楚Activit ...