反射机制

利用反射机制遍历String的字段和方法、构造器

点点圈 提交于 2020-02-15 06:31:34
利用反射机制遍历String的字段和方法、构造器 更多干货见博主个人网站:https://blog.zhenglin.work 利用java反射机制能获取某个类或某个对象的所属类、拥有的方法、成员变量等信息。很多java反编译工具就是利用这个机制。 类名的获取 java所有的类,都属于Class 类型,这个Class和class是不一样的,class属于java关键字、Class是类名,如同String一样,且Class是个泛型类。 获取具体的某个类的Class常见的有三种方式: 在实例方法中 直接getClass,就能获取实例对象的Class类型 知道类名可以通过以下两种方式获取Class Class.forName(“具体类名,包含包名如:java.lang.Object”) 直接用.class文件名称,如 Class cls = String.class 方法的获取 通过Class类型对象.getMethods获取所有公开方法、getDeclaredMethods获取所有方法 (不管是private还是public修饰的方法) getMethod(String name, Class<?>… parameterTypes) 获取指定名称方法(必须是public类型方法)、parameterTypes表示该方法有哪些参数,parameterTypes长度可变,如果为空

Java中的反射

故事扮演 提交于 2020-02-14 09:53:15
反射:字面意思就是反向映射。通常我们都是通过类来获取对象,而反射则正好相反,它是通过对象来获取到对象所属的类。并且可以获取到类的完整结构(包括private修饰的信息)。 反射的重要性:反射使我们不需要在编译时知道类型,而可以延迟到运行时获得对象的属性、调用对象的方法。使得 Java 语言具有了动态性。 Hibernate、Spring 等框架都是基于反射实现的,可以说没有反射就没有 JavaEE。 1、是什么(What)? 在编译时不知道哪个类被加载,在运行时可以动态获取对类的属性以及调用对象的方法的机制就叫反射。 2、为什么(Why)? 简单的说,反射使得 Java 这种静态编译型语言具有了动态性。 Java 反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时获取泛型信息 在运行时调用任意一个对象的成员变量和方法 在运行时处理注解 生成动态代理 就是说,反射有能够看透 class 的能力,类的信息都是透明的(包括 private 修饰的属性或方法也可以访问)。也就是能够获取到 Class 中所有的信息。 3、怎么用(How)? 反射相关的核心类 java.lang.Class:代表一个类 java.lang.reflect.Constructor:代表类的构造器 java.lang

Java反射机制的学习

柔情痞子 提交于 2020-02-12 22:16:10
在学习java的spring框架时老是要与java的反射机制打交道,为止花了一些时间来了解java的反射机制。 在创建数据库的jdbc也有遇到java的反射机制比如MySQL的JDBC,Class.forName("com.mysql*"). 一:Java的反射(reflection)是什么? 我的一个大概的理解是:java反射是用来获取一个java类本身的一些信息,比如类里面声明的静态变量,实例变量,公有方法,私有方法。 除此之外,反射机制还能帮我们获取,或者创建一个类的对象。 Java的反射机制主要通过Java.lang.Class和Java.lang.reflect包下的API来实现的,而且java反射机制是与运行中的JVM打交道的。 来看Oracle官方文档对反射机制的两种解释: 解释一: Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructors to operate on their underlying counterparts, within security restrictions.

反射:框架设计的灵魂

我只是一个虾纸丫 提交于 2020-02-12 15:13:02
*框架:半成品软件。可以在框架的基础上进行软件开发,简化编码 其实,用框架并不一定用得到反射。但是,如果你要开发一套框架供别人使用,就得用到反射。但是,如果我们知道了反射机制,就能在使用框架时游刃有余。 *反射:将类的各个组成部分封装为其他对象,这就是反射机制。 例如:将成员变量封装为Field对象;构造函数-->Constructor对象;成员方法-->Method对象 好处:1.可以在程序的运行过程中去操作这些对象。 来源: https://www.cnblogs.com/laoyangtou/p/12299131.html

java反射机制

烈酒焚心 提交于 2020-02-12 09:59:09
1、java反射机制: Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。 2、Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类; 在运行时构造任意一个类的对象; 在运行时判断任意一个类所具有的成员变量和方法; 在运行时调用任意一个对象的方法; 生成动态代理。 3、Class类: 对于一个字节码文件.class,虽然表面上我们对该字节码文件一无所知,但该文件本身却记录了许多信息。Java在将.class字节码文件载入时,JVM将产生一个java.lang.Class对象代表该.class字节码文件,从该Class对象中可以获得类的许多基本信息,这就是反射机制。所以要想完成反射操作,就必须首先认识Class类。 java.lang.Class java.lang.reflet.Constructor java.lang.reflet.Field java.lang.reflet.Method java.lang.reflet.Parameter (1)java.lang.Class:Class类是一个比较特殊的类

day25_Junit测试丶反射丶注解

隐身守侯 提交于 2020-02-11 22:36:40
软件测试 查询百度百科: 软件测试(英语: Software Testing ),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较 过程 。软件测试的经典定义是:在规定的条件下对程序进行 操作 ,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 测试的分类 黑盒测试: 不需要写代码,给输入值,看程序是否能够输出期望的值。 白盒测试: 需要写代码的。关注程序具体的执行流程。Junit测试属于白盒测试中的一种。 现在我们拿到一个需求,需要测试一下Junit包下的Calculator类代码编写是否正确。代码如下 package Junit; /** * 计算器类 */ public class Calculator { /** * 加法 * @param a * @param b * @return */ public int add(int a, int b){ return a +b; } /** * * @param a * @param b * @return */ public int sub(int a,int b){ return a -b; } } 按照以前的知识,我们需要在测试类中,创建Calculator类的对象,在调用Calculator类中编写的方法

java反射机制

↘锁芯ラ 提交于 2020-02-11 13:57:32
Java反射机制 一、反射机制综述 在java中,反射是一个功能强大且复杂的机制,许多框架的底层技术和原理都与反射技术有关。因此使用反射技术的主要人员是工具构造者,而不是应用程序员。利用反射机制,我们可以用来: 1.在运行时查看对象 2.在运行时分析类的能力 3.实现通用的数组操作对象 4.利用Method对象,实现类似于C/C++中函数指针的功能 二、通过反射获取对象 在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息更踪着每个对象所属的类,保存这些信息的类称为Class(就是一个类名,没有其它特殊的含义),Object类中的getClass()方法可以返回一个Class类型的实例。下面我们通过一个例子来进一步理解: 1.创建雇员类 首先定义雇员类,员工信息包括姓名、薪水和雇用日期,包含get方法和提升工资方法 public class Employee { private String name; //姓名 private double salary; //薪水 private LocalDate hireDay; //雇用日期 public Employee(String name, double salary, int year, int month, int day) { this.name = name; this.salary

day27(027-反射&JDK新特性)

本小妞迷上赌 提交于 2020-02-11 09:14:17
###27.01_反射(类的加载概述和加载时机)  A:类的加载概述   *加载 就是指将class文件读入内存,并为之创建一个Class对象。 任何类被使用时系统都会建立一个Class对象。   *连接 准备,负责为类的静态成员分配内存,并设置默认初始化值。   *初始化  B:加载时机     创建类的实例     访问类的静态变量,或者为静态变量赋值     调用类的静态方法     初始化某个类的子类      使用反射机制方式来强制创建某个类或接口对应的java.lang.Class对象    来源: https://www.cnblogs.com/MarlonKang/p/12293781.html

简单认识Java反射

柔情痞子 提交于 2020-02-08 18:53:42
Java 反射定义 指在 Java 程序运行状态中,动态获取类的内容以及动态调用对象的方法和获取属性的机制.就叫做 JAVA 的反射机制 Java 反射的优缺点 优点: 1.增加程序的灵活性,避免将固有的逻辑程序写死到代码里 2.代码简洁,可读性强,可提高代码的复用率 缺点 1.在量大的情景下反射性能下降,就是慢 2.内部暴露和安全隐患 反射到底慢在哪些地方: 1.寻找类 Class 字节码的过程 2.安全管理机制的权限验证等等 3.调用 native 方法时,会使用JNI技术很消耗性能 反射技术的主要组成 学java的都知道万物皆对象,我们定义的类其实从面向对象的角度来分析,它其实也是一个具体的对象,它是一个描述类的实例.描述这个类中有哪些属性,行为等等内容。 比如,学生是不是都有姓名,年龄,发言权。这些学生共有的属性,行为我们可以抽取成一个公有的Student类来描述。 class Student{ String name; int age; void talk(){ System.out.println("学生可以发言"); } } Student类就相当于一个模板,我们可以基于这个模板创建具体不同的 Student 实例,而每一个实例都具有姓名,年龄,发言的行为。 那么,对于抽取这个思想,我们可以思考这样一个问题,在Java中是不是每一个类在定义的时候

【软件工程】JAVA反射技术

蹲街弑〆低调 提交于 2020-02-08 03:50:41
JAVA反射技术   Java 反射技术应用广泛,它能够配置:类的全限定名、方法和参数,完成对象的初始化,甚至是反射某些方法。这样就可以大大增强 Java 的可配置’性, pring IoC 的基本原理也是如此,当然 Spring IoC 的代码要复杂得多。   Java 的反射内容繁多,包括对象构建、反射方法、注解、参数、接口等。 通过反射构建对象   Java 中允许通过反射配置信息构建对象,比如 ReflectServicelmpl.java   然后通过反射的方法去构建它   这里的代码就是生成一个对象,然后将其返回。下面这行代码的目的就是给类加载器 注册了一个类 ReflectServicelmpl 的全限定名,然后通过 newInstance 方法初始化了一个类 对象,使用反射的方式也十分简单。      这是一个构建方法,没有任何参数的类的反射生成,所以还剩下一个问题,即如果 个类的所有构建方法里都至少存在一个参数,如何用反射构建它   这里实现了含 个参数的构建方法 将不能用之前的办法将其反射生成对象   先通过 forName 加载到类的加载器。然后通过 getConstructor 方法,它的参数可以是多个,这里定义为 String.class ,意为有且只有一个参数类型 String 的构建方法。通过这个方法可以对重名方法进行排除,此时再用