反射机制

C#反射机制

匿名 (未验证) 提交于 2019-12-02 22:06:11
, , . , ! ! , . , a, dll dll dll dll dll dll 未知 dll dll. dll dll Sport.cs. using System; public abstract class Sport { protected string name; public abstract string GetDuration(); public abstract string GetName(); } csc /t:library Sport.cs SomeSports.cs using System; public class Football : Sport { public Football() { name = "Football"; } public override string GetDuration() { return "four 15 minute quarters"; } public override string GetName() { return name; } } public class Hockey : Sport { public Hockey() { name = "Hockey"; } public override string GetDuration() { return "three 20 minute

反射

匿名 (未验证) 提交于 2019-12-02 21:53:52
在 Java 里,无论生成某个类的多少对象,这些对象都会对应于同一个 Class 对象。 Java 的反射机制允许程序在运行时透过 Reflection APIs(反射api) 取得任何一个已知名称的 class的所有内部信息。 1、 反射有什么用 可以这么说,其实 java 类的成员变量、方法是不是 private 没有关系,运用反射就完全可以玩转类的私有变量和私有方法。正是因为反射的这两部分使用才有了 hibernate 、 spring 等框架,换言之,没有反射就没有框架! ( 1 ) 运行时判断任意一个对象所属的类 ( 2 ) 运行时构造任意一个类的对象 ( 3 ) 运行时判断任意一个类所具有成员变量和方法 ( 4 ) 运行时调用任意一个对象的方法 注意:全是运行时, java 反射是运行时的行为。 2、 玩转反射 (1)反射修改对象的私有成员变量 //User对象 public class User { private int id = 1; private String name = "大胖子"; public String getName() { return name; } } public static void main(String[] args) throws Exception { Class<?> clazz = User.class; User

java利用反射机制完成JavaBean的属性赋值

匿名 (未验证) 提交于 2019-12-02 21:53:52
今天碰到一个场景,就是一个JavaBean,有些属性的值需要去数据库其他表中获取,这样就需要调用其他dao方法得到这个值,然后再set进去。 可是问题来了,如果需要用这种方式赋值的属性特别多的话,一个一个set进去就需要写很多set方法,代码不仅冗余,而且很麻烦。 于是就想通过反射机制去自动set值。 假设有JavaBean为CreditRatingFile.java类,某些属性值需要调用CreditRatingFileApplyService类中的方法获得,并拿到返回值再set出这些属性。 一、拿到所有JavaBean为CreditRatingFile.java类的属性 二、拿到多有CreditRatingFileApplyService类的方法 三、匹配之后再根据CreditRatingFile.java的setter方法set对应CreditRatingFileApplyService类方法的返回值 贴出代码: 反射工具类: package com.krm.modules.creditFileApplay.util; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java

JAVA反射

匿名 (未验证) 提交于 2019-12-02 21:53:52
JAVA反射 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一、反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象。 以上的总结就是什么是反射 ????反射就是把java类中的各种成分映射成一个个的Java对象 例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。 ????(其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述) 如图是类的正常加载过程:反射的原理在与class对象。 熟悉一下加载的时候:Class对象的由来是将class文件读入内存,并为之创建一个Class对象。 二、查看Class类在java中的api详解(1.7的API) 如何阅读java中的api详见java基础之――String字符串处理 Class 类的实例表示正在运行的 Java 应用程序中的类和接口

java反射机制

匿名 (未验证) 提交于 2019-12-02 21:53:52
java反射机制 java语言允许通过程序化的方式间接对Class的对象实例操作,Class文件由类加载器装载后,在JVM中将形成一份描述class结构的元信息对象,通过该元信息对象可以获知class的结构信息,通过该源信息对象可以获知class的结构信息,如构造函数、属性和方法等 举一个反射的小例子: car类主要包含三个属性,和一个无参构造函数与一个带参构造函数 public class Car { private String brand ; private String color ; private int maxspeed ; public Car () { System . out . println ( "init car" ); } public Car ( String brand , String color , int maxspeed ) { this . brand = brand ; this . color = color ; this . maxspeed = maxspeed ; } public void introduce (){ System . out . println ( "品牌:" + brand + "颜色:" + color + "最大速度:" + maxspeed ); } public String getBrand ()

实验 10 Java 反射技术

匿名 (未验证) 提交于 2019-12-02 21:53:52
(1)利用反射机制编写一个程序,这个程序能把类中所有的成员变量赋值, 并把操作信息输出到控制台。 (2)利用反射机制编写一个程序,这个程序能指定调用类的某个方法及构 造方法,并把操作信息输出到控制台。 (3)对类进行动态实例化 Class.forName() 为某研究所编写一个通用程序,用来计算每一种交通工具运行 1000 公里所 需的时间,已知每种交通工具的参数都是 3 个浮点数 A、B、C 的表达式。现有 两种工具:Car 和 Plane,其中 Car 的速度运算公式为:A*B/C,Plane 的速度运 算公式为:A+B+C;需要编写三个类:ComputeTime、Plane、Car 和接口 Common, 要求在未来如果增加第 3 种交通工具的时候,不必修改以前的任何程序,只需要 编写新的交通工具的程序。 动态实例化代码: Class.forName(args[0]).newInstance(); 注意事项: 以下为代码: public class Car implements Common { private int speed; public int calspeed(int a,int b,int c) { return speed=a*b/c; } } public class Plane implements Common { private int speed;

设计模式之反射机制

匿名 (未验证) 提交于 2019-12-02 21:53:32
就是正在运行,动态获取这个类的所有信息。 Jdbc 加载驱动----- Spring IOC //第一种方式: Classc1 = Class.forName("Employee"); //第二种方式: //java中每个类型都有class 属性. Classc2 = Employee.class; //第三种方式: //java语言中任何一个java对象都有getClass 方法 Employeee = new Employee(); Classc3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee) Class<?> forName = Class.forName("com.test.entity.User"); // 创建此Class 对象所表示的类的一个新实例 调用了User的无参数构造方法. Object newInstance = forName.newInstance(); 实例化有参构造函数 Class<?> forName = Class.forName("com.test.entity.User"); Constructor<?> constructor = forName.getConstructor(String.class, String.class); User newInstance = (User)

java 反射工具类 ReflectHelper 类

匿名 (未验证) 提交于 2019-12-02 21:52:03
JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 反射类一般都是框架封装好了的,但是在某些应用场景中会需要我们重写发射类来达到我们的要求。 package com.util; import java.lang.reflect.Field; /** * @author Administrator * 反射工具 */ public class ReflectHelper { /** * 获取obj对象fieldName的Field * @param obj * @param fieldName * @return */ public static Field getFieldByFieldName(Object obj, String fieldName) { for (Class<?> superClass = obj.getClass(); superClass != Object.class; superClass = superClass .getSuperclass()) { try { return superClass.getDeclaredField(fieldName); } catch

Java反转机制

匿名 (未验证) 提交于 2019-12-02 21:52:03
什么是反射: Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。 所谓反射其实就是获取类的字节码文件,也就是.class文件,我们可以通过Class这个对象进行获取。 三种方式获取class对象的方式: 对象.getclass() Iphone iph = new Iphone(); Class clz = iphone.getClass();   2. 类.Class() clz = Iphone.class;   3. Class.forName(“包名.类名”); clz = Class.forName(“com.lalala.Iphone”) 在以上的三种方法中: 方法1,已经创建了Iphone对象,这个时候就不需要去进行反射了,显得有点多此一举; 方法2,需要导入Iphone类的包,依赖性太强了; 方法3中的Class类继承自Object类,故可以直接使用,且实参为字符串,即使com.lalala包中的Iphone类不存在,该方法在不运行时也不会报错,所以我们一般选用方法三! 通过class对象动态创建目标对象: 此外还可以通过class对象查看目标类有哪些方法和属性。 来源: https://www.cnblogs

浅谈Java反射机制 之 获取类的字节码文件

匿名 (未验证) 提交于 2019-12-02 21:52:03
先贴上Java反射机制的概念: AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法和属性; 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 这么一讲很强大有没有! 反射的机制的实现还有仰仗Class类,因为想要剖析一个类就必须先要获取到该类的字节码文件对象,而Class类用于表示.class文件(字节码) 而且从获取到剖析使用的都是Class类的方法。 获取类字节码方法有三种: getClass()方法其实是Object的一个方法,Class继承了Object,所以我们可以直接使用。 public class Test01 { public static void main(String[] args) { Student stu=new Student(); Class c=stu.getClass(); System.out.println(c.getName()); } } 结果:com.reflection.model.Student 当然这种方法没什么意义,因为我们都 new 实例化对象了,就没有必要反射了。 2、通过类的 .class 属性获取类的字节码文件 import com.reflection.model.Student; public class