反射机制

C#Reflection学习记录

主宰稳场 提交于 2020-02-08 02:13:31
反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等。 反射的作用: 1、可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型 2、应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射。 3、反射主要应用与类库,这些类库需要知道一个类型的定义,以便提供更多的功能。 应用要点: 1、现实应用程序中很少有应用程序需要使用反射类型 2、使用反射动态绑定需要牺牲性能 3、有些元数据信息是不能通过反射获取的 4、某些反射类型是专门为那些clr 开发编译器的开发使用的,所以你要意识到不是所有的反射类型都是适合每个人的。 应用实例: 在实际开发中,我们经常需要从数据库中读取数据并赋值给实体类的相应属性。 比如: 一般的做法 public Role[] GetRoles(int BlogID) { System.Collections.ArrayList al=new System.Collections.ArrayList(); IDataReader reader=DbProvider.Instance().GetRoles(BlogID); try { while(reader.Read()) {

设计模式&单例模式

寵の児 提交于 2020-02-08 02:08:56
一、首篇自序 第一次整理博客,会稍微啰嗦讲几句,希望大家不要喷我^_^^_^,初来乍到不是很有经验。 今天开始陆续会尽我一切的能力写一系列关于java文章内容,要是哪里做的不好,还希望大家多多指教。 我会接受大家的意见,不断进步。 当然也希望我的文章能够帮助到大家,哪怕是一点点也好。 尤其是java需要循序渐进的去学习,去进步,一口吃成胖子是很难。 如果在坐的大家有想学习java,或者正在初学java的小伙伴,请不要着急。 个人觉得要学好java最好的方式就是:首先要舍得付出,其次每天要求自己学习2小时计划,再就是要合理的回顾以及练习。 这样坚持下去,走好每一天,不要烦躁这个想学那个想学。最后时间走了,学到的东西都是半斤八两。 当然这只是我个人的意见,大家有什么好的学习建议也可以分享分享。 最后废话不多说了,今天开始给大家总结一下设计模式中的《单例模式》。 后续的博客规划:设计模式、并发编程、Spring核心原理、Mybatis源码分析、IO/Netty、SpringBoot、SpringCloud、Apache Dubbo、Zookeeper、Nacos、Sentinel,kafka原理分析、RabbitMQ原理分析、RocketMQ原理分析、docker、k8s 。。。。。。 二、单例设计模式讲解内容(由于最近工作也是比较饱和时间有限,后续会将文章相关源码托管到git上

Java反射

▼魔方 西西 提交于 2020-02-07 20:52:23
Java基础 - 反射 一、作用 “反射是框架设计的灵魂”,它可以将类的各个组成部分封装为一个个的对象,通过 Java 的反射机制,程序员可以更深入地控制程序的运行过程。 二、好处 可以在程序运行过程中操作这些封装的对象 可以解耦,提高程序的可扩展性 三、使用 首先准备一个Person类 public class Person { private String name; private Integer age; public String a; protected String b; String c; private String d; public Person() { } public Person(String name, Integer age) { this.name = name; this.age = age; } private void eat(String food){ System.out.println("吃" + food); } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", a='" + a + '\'' + ", b='" + b + '\'' + ", c='" + c + '\'' + ",

反射

て烟熏妆下的殇ゞ 提交于 2020-02-07 16:52:42
参考博文: https://blog.csdn.net/u011679785/article/details/98853403 一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的。于是我们可以直接对这个类进行实例化,之后使用这个类对象进行操作。 Student s1 = new Student(); s1.setAge(20); 1、反射定义 Java反射机制是在 运行状态 中, 对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意方法和属性; 这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 2、类加载机制 .java源文件通过javac编译成.class字节码文件之后,结构不变,还是存储在硬盘中,字节码文件通过一个叫类加载器的东西,将类加载到内存当中去。类加载器中有一个class对象,封装了类的基本信息,包括属性、构造方法、普通方法。 3)、运行时阶段 在源代码阶段,我们需要创建对象时直接new User()就可以了。 3、但是如果在运行时想要创建对象或者操作字段,应该如何做? ---引出反射 (1)、作用: 在运行时判断任意一个对象所属的类型。 在运行时构造任意一个类的对象。 在运行时判断任意以一个类所具有的成员变量和方法。 在运行时调用任意一个对象的方法,甚至可以调用private方法。 (2)、用途:

Java反射机制

烈酒焚心 提交于 2020-02-06 10:39:05
JAVA反射机制 Java反射机制是非常强大的机制,是在类在运行的进行动态加载,我们可以对反射的类进行查看信息,对象,生成对象,运行的时候可以进行动态的修改,获得该类的信息,运行在编译期的并不知道是哪个类,只有在它进行加载的时候才知道! Java反射机制使用不当会造成系统蹦掉,内存占用过高等。 来源: CSDN 作者: 秋天的微风 链接: https://blog.csdn.net/weixin_44843903/article/details/103810830

Java反射机制详解

末鹿安然 提交于 2020-02-05 23:50:07
文章目录 1、反射机制 1.1什么是反射机制 1.2反射机制能做什么 1.3反射机制的相关API 2、获取一个Class对象(反射)的三种方式 2.1类文字 2.2使用Object类的getClass()方法 2.3使用Class类的forName()方法 3、通过Class对象获取一个类的信息(类名、包名、修饰符等) 4、通过Class对象获取一个类的字段 5、通过Class对象获取一个类的构造函数 6、通过Class对象获取一个类的实例方法 7、通过Class对象创建一个类的对象 6.1无参构造函数 6.2有参构造函数 6.3通过构造的实例调用方法 8、通过反射创建、获取、修改数组信息 1、反射机制 1.1什么是反射机制 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 1.2反射机制能做什么 在运行时判断任意一个对象所属的类; 在运行时构造任意一个类的对象; 在运行时判断任意一个类所具有的成员变量和方法; 在运行时调用任意一个对象的方法; 生成动态代理。 1.3反射机制的相关API 通过一个对象获得完整的包名和类名 实例化一个类对象(使用构造函数,默认的和带参数的) 返回一个类实现的接口 取得一个类的父类

java基础复习-自定义注解2(反射技术)

烂漫一生 提交于 2020-02-03 22:09:27
java基础复习-自定义注解2(反射技术) 写在前面: 反射技术在java基础中也是容易被忽略的一部分内容,也是在初学阶段无法体会反射技术的作用。其实,在java的众多框架中都是靠反射技术来进行实现。如果想成为能够自己去打造自己的框架,那么学习反射技术这是十分有必要的。该节被列为自定义注解的第二节,将介绍反射技术的使用和如何反射获取注解上的信息,编写一个简单的注解解析器。 1、反射介绍 考虑到有部分大学java课程中没有收录该部分内容,因此作为一个简短的介绍。 众说周知,java代码的编译是编译为.class文件,.class文件是运行在jvm上的,而并不是像C\C++语言一样,编译为二进制语言,运行在真实的操作系统上。即然,.class文件还处于jvm中,那么就能够从其中获取信息。 JAVA反射机制是在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法;对于任何一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 想要使用反射机制,就必须要先获取到该类的字节码文件对象(.class),通过字节码文件对象,就能够通过该类中的方法获取到我们想要的所有信息(方法,属性,类名,父类名,实现的所有接口等等),每一个类对应着一个字节码文件也就对应着一个Class类型的对象,也就是字节码文件对象。 因为有反射技术的存在

利用java反射机制实现读取excel表格中的数据

假装没事ソ 提交于 2020-02-03 11:20:09
如果直接把excel表格中的数据导入数据库,首先应该将excel中的数据读取出来。 为了实现代码重用,所以使用了Object,而最终的结果是要获取一个list如List<User>、List<Book>等,所以需要使用泛型机制去实现。下面会给出代码,可能会稍微复杂一点,但注释很清晰,希望大家耐心阅读。 在上代码之前简单说一下思路: 1.excel表格必须有表头,且表头中各列的值要与实体类的属性相同; 2.先读取表头信息,然后获取表头列数,接着确定需要使用的set方法的名称,并存到数组中; 3.利用反射机制,获取object对象的属性,通过与excel表格表头对比,确定各个属性的类型,存到数组中(以excel表格中属性的顺序); 4.遍历除表头行的数据,利用反射机制实例化对象,调用对应的set方法,方法参数通过3获取; 上代码:(需要使用poi包,请自行下载) 实体类User: public class User { private int id; private String name; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; }

Reflect反射简略教程

不羁的心 提交于 2020-02-01 18:13:21
java的反射机制使java成为一种动态语言,通过反射机制能够在运行时或的一个对象的所有信息,包括他的包名,它的所有方法和成员变量。当然知道包名可以直接取得该类,从而获得他的实例。 获取Class对象 12345678 class = b.getClass();//通过完整包类名获得:class = Class.fromName("包名.类名")//本包可以通过.class获得:class = 类名.class 通过反射调用私有方法 123456789101112131415161718192021 //获得类Class<?> c1 = persen.getClass();try { //通过方法名获得方法,这是私有方法 Method method1 = c1.getDeclaredMethod("method1"); //调用方法私有方法的关键 method1.setAccessible(true); //设置该私有方法可被调用 //方法调用 method1.invoke(c1.newInstance()); //这是带参数的方法,需要在获得方法的时候把参数的类型都加上 Method method2 = c1.getDeclaredMethod("method2",String.class); //调用方法,填写参数 method2.invoke(c1.newInstance()

测试,反射,注解概念知识

一世执手 提交于 2020-01-31 05:11:42
测试分类: 1,白盒测试:需要写代码。关注程序具体的执行流程 2,黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值 Junit使用:白盒测试 步骤 1,定义一个测试类(测试用例) 2,定义测试方法:可以独立运行 3,给方法加@Test 4,导入Junit依赖环境 判断结果: 红色:失败 绿色:成功 (说白了,我们一般都不会去看结果的正确性来判断程序有无bug,但为了能输出正确的结果,我们一般会采用断言的方式来处理结果) 断言:Assert.assertEquals(期望的结果,运算的结果); @Before:初始化方法,用于资源申请,所有测试方法再执行之前都会先执行该方法。 @After:释放资源方法,在所有测试方法执行完后,都会自动执行该方法 反射:框架设计的灵魂 框架:半成品软件。可以在框架的基础上进行软件开发,简化代码 反射:将类的各个组成部分封装为其他对象,这就是反射机制 好处: 1,可以在程序运行过程中,操作这些对象。 2,可以解耦,提高程序的可扩展性。 获取Class对象的方式: 1,class.forName(“全类名”):将字节码文件加载进内存,返回Class对象 (多用于配置文件,将类名定义在配置文件中。读取文件,加载类) 2,类名.class:通过类名的属性class获取 (多用于参数的传递) 3,对象.getClass():getClass(