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反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称 ...
随机推荐
- Sqoop 数据迁移工具
Sqoop 数据迁移工具 sqoop : SQL to hadOOP 两个功能: 1. RDB 向HDFS导入 2. HDFS向RDB导入 注:拷贝mysql-connector.jar 和 json ...
- Java基本概念:接口
一.简介 描述: 普通类只有具体实现,抽象类具体实现和规范都有,接口只有规范! 接口就是比抽象类还抽象的抽象类,可以更加规范的对子类进行约束,全面专业地实现了规范和具体实现的分离. 抽象类还提供某些具 ...
- 高级FTP
一.作业需求 1. 用户加密认证(已完成) 2. 多用户同时登陆(已完成) 3. 每个用户有自己的家目录且只能访问自己的家目录(已完成) 4. 对用户进行磁盘配额.不同用户配额可不同(已完成) 5 ...
- DCL之单例模式
所谓的DCL 就是 Double Check Lock,即双重锁定检查,在了解DCL在单例模式中如何应用之前,我们先了解一下单例模式.单例模式通常分为"饿汉"和"懒汉&q ...
- 后端程序员之路 38、Scala入门
Scala 是 Scalable Language 的简写,是一门多范式的编程语言. 语言特性:1.面向对象,所有值都是对象,类可以继承和组合:2.函数式,支持闭包,支持柯里化等等:3.静态类型,支持 ...
- MySQL:字段约束与索引
字段约束 MySQL的字段约束共四种: 约束名 关键字 描述 主键约束 PRIMARY KEY 字段值唯一,且不能为NULL 非空约束 NOT NULL 字段值不能为NULL 唯一约束 UNIQUE ...
- Nginx配置翻译
Windows 格式 server { listen 82; server_name localhost; root "D:/testfile/"; location / { in ...
- python自动化测试生成HTML报告
自动化测试结果执行完毕后,需要对测试结果进行查看,今天就来讲一讲如何生成HTML报告首先下载HTMLTestRunner.py文件,放在python安装目录的Lib文件夹下https://pan.ba ...
- C++类的友元机制说明
下面给出C++类的友元机制说明(对类private.protected成员访问),需要注意的是,友元机制尽量不用或者少用,虽然它会提供某种程度的效率,但会带来数据安全性的问题. 类的友元 友元是C++ ...
- 剑指 Offer 30. 包含min函数的栈 + 双栈实现求解栈中的最小值
剑指 Offer 30. 包含min函数的栈 Offer_30 题目描述: 题解分析: 题目其实考察的是栈的知识,本题的目的是使用两个栈来求解最小值. 第二个栈主要用来维护第一个栈中的最小值,所以它里 ...