Java Reflection
Java语言的反射机制
1. Java反射的含义:获取应用中正在运行的Java对象。
2. Java反射机制: 在运行的程序中,对于任意的类,都可以知道这个类的属性、方法以及构造函数,对于任意对象都可以调用它的方法。这种在运行时动态获取和修改类的信息的能力称为Java反射机制。
3. Java反射的功能:
1) 在运行时判断任意一个对象所属的类
2) 在运行时创建任意一个类的对象
3) 在运行时获取任意一个类的所有成员变量、方法以及构造函数
4) 在运行时调用任意一个对象的方法
5) 作为动态代理的基础,生成代理类
4. Java反射的实现类
1) Class : Class类表示Java应用运行时的类或接口
2) Field : 提供有关类或接口的属性信息的对象
3) Method : 提供有关类或接口方法信息的对象
4) Constructor : 提供有关类构造函数的信息
注意:Class类是Java反射中最重要的一个功能类,所有获取对象的信息(包括:方法/ 属性/构造方法/访问权限)都需要它来实现。
5. 编写Java反射程序的步骤:
1) 首先获取一个类或对象的Class对象,方法如下:
Class clazz1 = ClassName.class;
Class clazz2 = Class.forName("com.znker.reflection.ClassName");
Class clazz3 = Object.getClass();
2) 调用Class对象中的方法来获取一个类的的属性、方法以及构造函数的对象
6. Java反射的使用案例
1) 获取一个对象的包名和类名
package com.znker.reflection; public class ReflectionDemo { // other codes } /** * Java 反射案例:获取一个对象的完整包名和类名 * */ public class ReflectionTest { public static void main(String[] args) { ReflectionDemo demo = new ReflectionDemo(); System.out.println(demo.getClass().getName()); } }
2) 实例化Class对象
package com.znker.reflection; /** * 三种实例化Class对象的方式 * * */ public class ReflectionTest { @SuppressWarnings({ "unused", "rawtypes" }) public static void main(String[] args) { // 最常用的形式 try { // @param 类的全路径名 Class<?> clazz1 = Class.forName("com.znker.reflection.Reflection"); } catch (ClassNotFoundException e) { e.printStackTrace(); } Class clazz2 = ReflectionDemo.class; Class clazz3 = new ReflectionDemo().getClass(); } }
3) 利用无参构造函数创建对象
package com.znker.reflection; public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "[" + this.name + " , " + this.age + "]"; } } package com.znker.reflection; public class Refdemo { public static void main(String[] args) { Class<?> demo = null; try { demo = Class.forName("com.znker.reflection.Person"); } catch (ClassNotFoundException e) { e.printStackTrace(); } Person person = null; try { // 通过无参构造函数实例化对象, 构造一个与Class有关的对象 person = (Person) demo.newInstance(); } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } person.setName("John"); person.setAge(18); System.out.println(person); } }
Java Reflection的更多相关文章
- Java Reflection(getXXX和getDeclaredXXX)
package com.sunchao.reflection; public class Person { private int age ; private String name; public ...
- java Reflection(反射)基础知识讲解
原文链接:小ben马的java Reflection(反射)基础知识讲解 1.获取Class对象的方式 1.1)使用 "Class#forName" public static C ...
- Java Reflection 反射基础
反射基础: package reflection; /** * Created by : Infaraway * DATE : 2017/3/2 * Time : 23:06 * Funtion : ...
- Some Link: Java Reflection
http://docs.oracle.com/javase/tutorial/reflect/index.html https://bugs.openjdk.java.net/browse/JDK-4 ...
- java reflection总结
一.java反射常用方法 获取Class的几种方式: Class class1 = String.class;// 该方法最为安全可靠,程序性能更高. Class class2 = s ...
- Java Reflection - Getters and Setters
原文链接:http://tutorials.jenkov.com/java-reflection/getters-setters.html 通过使用 Java 反射,我们能够在程序执行时观察 clas ...
- Java Reflection (JAVA反射) --转载
对于软件开发人员来说,单元测试是一项必不可少的工作.它既可以验证程序的有效性,又可以在程序出现 BUG 的时候,帮助开发人员快速的定位问题所在.但是,在写单元测试的过程中,开发人员经常要访问类的一些非 ...
- Java Annotations, Java Reflection, and Java Test Runner
www.vogella.com/tutorials/JavaAnnotations/article.html
- Java反射(Reflection)
基本概念 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法? 答案是肯定的. 这种动态获取类的信息以及动态调用对象的方法的功能来自于J ...
随机推荐
- Python学习二(生成器和八皇后算法)
看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...
- 使用cnpm
官方的 npm下载速度太慢 [..................] \ normalizeTree: sill install loadCurrentTree 一直是这个问题 使用淘宝的 cpm ...
- (分享)FreeVideo1.6.1 VIP视频播放器(支持下载)
软件名字:FreeVideo 版 本 号 :v 1.6.1 开发语言:易语言 压缩加壳:VMP 3.0 beta 皮 肤:易简约定制版(白色) 模块使用:乐易.精易.皮肤 主要技术:其实没啥 ...
- NSSortDescriptor对象进行数组排序
//创建一个数组 NSArray *array = @[@"zhangsan", @"lisi", @"zhonger", @"z ...
- 1、Python环境安装部署
一.环境准备 1.下载Python安装包(至官方网站) https://www.python.org/downloads/ 建议下载安装最新版 2.设置"环境变量" "我 ...
- 运行R 报错R cannot R_TempDir, 继而发现/dev/mapper/VG00-LV01 磁盘空间已满
今天在运行R脚本的时候报了个错:Fatal error: cannot create 'R_TempDir'.排除了是自己写的代码的问题,想着应该是某个没见过的原因,google之,发现网上的说法是/ ...
- [JSP]用户注册
//----------------------userRegister.jsp <%@ page contentType="text/html;charset=gb2312" ...
- ng-style 的坑 - 对性能的影响
本文地址:http://www.cnblogs.com/jying/p/5633203.html 熟悉 angular 的前端对ng-style 一定不陌生,这个家伙可以绑定一个函数,使得我们可以在函 ...
- 提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
转自http://blog.163.com/zhangjie_0303/blog/static/9908270620146951355834/ 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 w ...
- re模块汇总
text = 'The Attila the hun show' m = re.match('.',text)#任意单个字符 m.group() 'T' m = re.match('.*',text) ...