- 浏览: 3462468 次
- 性别:
- 来自: China
文章分类
- 全部博客 (536)
- ajax (1)
- Algorithm (14)
- Android (40)
- CSS/HTML... (2)
- defy (3)
- DesignPattern (2)
- dorado (0)
- Drools (6)
- English/日本語 (7)
- Flex (2)
- Framework (0)
- Google (3)
- hibernate (13)
- homework (3)
- HTML5 (0)
- IDE (29)
- java (45)
- javaee (7)
- Javascript (14)
- java组件 (5)
- jQuery (4)
- jsp (8)
- jsf (2)
- Linux (2)
- lucene (0)
- mysql (6)
- news (3)
- Oracle (8)
- other (4)
- PHP (5)
- Python (0)
- Software Engineering (3)
- spring (7)
- struts1.x (14)
- struts2.x (14)
- strolling in cloud (1)
- subject:javaEnhance (20)
- Tomcat (7)
- validator (3)
- 学习·方法·心得 (8)
- .NET (2)
- vba (6)
- groovy (5)
- grails (2)
- SWT (0)
- big data (1)
- perl (1)
- objective-c (50)
- product (1)
- mac (7)
- ios (188)
- ios-phone (2)
- ios-system (15)
- ios-network (5)
- ios-file (4)
- ios-db (1)
- ios-media (3)
- ios-ui (27)
- ios-openSource (6)
- ios-animation (5)
- ios-drawing (7)
- c (2)
- ios-app (2)
- ios-course (15)
- ios-runtime (14)
- ios-code (8)
- ios-thread (8)
- ios-LBS (2)
- ios-issue (1)
- ios-design (2)
- Jailbreak (2)
- cocos2d (0)
- swift (16)
- ios-framework (4)
- apple watch (4)
- ios-web (1)
- react native (3)
- TVOS (1)
- OpenGL (1)
最新评论
-
xiaobinggg:
...
Session机制详解 -
菜鸟学生会:
Drools规则工作流引擎开发教程网盘地址:http://pa ...
Drools入门-----------环境搭建,分析Helloworld -
wangyudong:
不是很好用,不支持自动化测试RESTful API,也不支持自 ...
Simple REST Client POST使用方法 -
Paul0523:
很棒的一篇文章,感谢楼主分享
Session机制详解 -
啸笑天:
获取原型对象的三种方法<script>functi ...
复习JavaScript面向对象技术
18 理解反射的概念
反射
一、反射就是Java类中的各个成分映射成相应的java类。例如,一个java类用一个Class类的对象来表示,一个类中的组成部分:成员变量,方法,构造函数,包等等信息业用一个个的java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。表示java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造函数,修饰符,包等信息,这些信息就是用相应的实例对象来表示,他们是Field、Method、Contructor、Package等等
二、一个类中的每个成员都是可以用相应的反射API类中的一个实例对象来表示,痛过调用Class类的方法可以得到这些实例对象。
19构造方法的反射应用
Constructor类代表某个类中的一个构造方法
<!--[if !supportLists]-->1、<!--[endif]-->得到某个类所有的构造方法:
例子:
Constructor[]cnstructor=Class.forName(“java.lang.String”).getConstructors();
2、得到某一个构造方法:
例子:
Constructor cnstructor=Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);
//获得方法时要用到类型。例如
int.class,(int []).class
int [] ints = new int[0];
ints.getClass();
<!--[if !supportLists]-->3、<!--[endif]-->创建实例对象
通常方法:String str=new String(new StringBuffer("zyj"));
反射方法:String str=(String) constructor1.newInstance(new StringBuffer("zyj"));//通常获得的方法时要用到上面相同类型的实例对象
<!--[if !supportLists]-->4、<!--[endif]-->Class.newInstance()方法
例子:
String str =Class.forName(“java.lang.String”). newInstance();
*该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。
*该方法内部的具体代码时用到了缓存机制来保存默认构造方法的实例对象。所以反射比较消耗资源,利用了缓存,会导致系统性能严重下降。(看Class类中newInstance()方法)
示例代码:
//new String(new StringBuffer("zyj"));与下面的功能相同
Constructor<String>constructor=String.class.getConstructor(StringBuffer.class);
String str2=constructor.newInstance(new StringBuffer("zyj "));
System.out.println(str2.charAt(2));
20成员变量的反射 21成员变量反射的综合案例
Field类代表某个类中的一个成员变量
示例代码:
package cn.zyj2021.review; public class ReflectPoint { private int x; public int y; public String str1="ball"; public String str2="basketball"; public String str3="zyj"; public ReflectPoint(int x, int y) { super(); this.x = x; this.y = y; } @Override public String toString() { return "ReflectPoint [str1=" + str1 + ", str2=" + str2 + ", str3=" + str3 + "]"; } } package cn.zyj2021.review; import java.lang.reflect.Field; public class ReflectTest { public static void main(String[] args) throws Exception { ReflectPoint reflectPoint=new ReflectPoint(3, 6); Field fieldx=reflectPoint.getClass().getDeclaredField("x");//可以访问不可见的属性 fieldx.setAccessible(true); System.out.println(fieldx.get(reflectPoint)); //fieldy的值是多少?是6,错!fieldY不是对象身上的变量,而是类上,代表某个字节码上的变量,要用它去取某个对象上对应的值 Field fieldy=reflectPoint.getClass().getField("y");//只能访问可见的属性 System.out.println(fieldy.get(reflectPoint)); changeStringValue(reflectPoint); System.out.println(reflectPoint); } //将任意一个对象中的所有String类型的成员变量所对应的字符串内容中的"b"改成"a"。 private static void changeStringValue(Object object) throws Exception { Field[] fields=object.getClass().getDeclaredFields(); for (Field field : fields) { if (field.getType()==String.class) {//不用equals(),因为他们是只有一份字节码 field.setAccessible(true); String temp=(String) field.get(object); field.set(object, temp.replace('b', 'a')); } } } /* 一个问题,我把自己的变量定义成private,就是不想让人家访问,可是,现在人家用暴力反射还是能够访问我,这说不通啊,能不能让人家用暴力反射也访问不了我。 首先,private主要是给javac编译器看的,希望在写程序的时候,在源代码中不要访问我,是帮组程序员实现高内聚、低耦合的一种策略。你这个程序员不领情,非要去访问,那我拦不住你,由你去吧。 同样的道理,泛型集合在编译时可以帮助我们限定元素的内容,这是人家提供的好处,而你非不想要这个好处,怎么办?绕过编译器,就可以往集合中存入另外类型了。 */ }
22成员方法的反射
<!--[if !supportLists]-->1、 <!--[endif]-->Method 代表某个类中的一个成员方法
<!--[if !supportLists]-->2、 <!--[endif]-->得到类中的一个方法:
例子:
Method method=String.class.getMethod("charAt",int.class);
<!--[if !supportLists]-->3、<!--[endif]-->调用方法:
通常方式:str1.charAt(1);
反射方式:method.invoke(str1, 1);
如果传递给Method对象的invoke()方法的第一个参数为null,这说明该Method对象对应的是一个静态方法。
<!--[if !supportLists]-->4、<!--[endif]-->jdk1.4和jdk1.5的invoke方法的区别:
jdk1.5:public Object invoke(Object obj,Object… args)//args参数用Class对象表示
jdk1.4:public Object invoke(Object obj,Object[] args)
//反射不能读这种非public类
发表评论
-
43 通过反射获得泛型的实际类型参数
2011-12-24 00:01 1935public static void applyV ... -
42 自定义泛型类的应用
2011-12-23 09:50 1634l 如果类的实例对 ... -
40 自定义泛型方法及其应用41 自定义泛型方法的练习与类型推断总结
2011-12-23 09:49 164240 自定义泛型方法及其应用 l <!--[e ... -
38 泛型的通配符扩展应用39 泛型集合的综合应用案例
2011-12-23 09:49 125138 泛型的通配符扩展应用 泛型中的?通配符: l问 ... -
36 入门泛型的基本应用37 泛型的内部原理及更深应用
2011-12-23 09:49 118336 入门泛型的基本应用 <!--[if !su ... -
33了解和入门注解的应用34 注解的定义与反射调用35为注解增加各种属性
2011-12-23 09:49 163633 了解和入门注解 ... -
32 使用BeanUtils工具包操作JavaBean
2011-12-22 10:02 1535Beanutils工具包: l 演示用eclipse ... -
30-31内省访问JavaBean属性的两种方法
2011-12-22 10:02 224030 对JavaBean的简单内省操作 //pt ... -
29 由内省引出JavaBean的讲解
2011-12-22 10:02 1395IntroSpector内省—> ... -
28 用类加载器的方式管理资源和配置文件
2011-12-22 10:01 1524/*getRealPath();//金山词霸/内部 ... -
27框架的概念及用反射技术开发框架的原理
2011-12-21 09:38 1139反射的作用à实现框架功能 *框架与框架要解决的 ... -
解释equals(),hashcode()和==
2011-12-21 09:38 1607简单的结论:当对象类没有不符合规范的override e ... -
26 ArrayList_HashSet的比较及Hashcode分析
2011-12-21 09:38 1650只有类的实例对象要被采用哈希算法进行存储和检索时,这个类 ... -
23对接收数组参数的成员方法进行反射24 数组与Object的关系及其反射类型25 数组的反射应用
2011-12-21 09:37 128323对接收数组参数的成员方法进行反射 packa ... -
17 透彻分析反射的基础_Class类
2011-12-20 11:16 1404Java类用于描述一类事物的共性,该类事物有什么属性,没 ... -
12-16 jdk5枚举
2011-12-20 10:55 1293模拟枚举,其实枚举编译后就是如此: pac ... -
11 jdk5基本数据类型的自动拆箱与装箱
2011-12-20 10:36 1625package cn.zyj11.revie ... -
09jdk5可变参数与OverLoad;10java5的增加for循环
2011-12-20 10:34 1374package cn.zyj0910.review ... -
08 jdk5的静态导入
2011-12-20 10:31 1226import语句可以导入一个类或某个包中的所有类 im ...
相关推荐
5.4.1 对象封装的概念理解124 5.4.2 类的理解125 5.4.3 Java类模板创建125 5.4.4 Java中对象的创建和使用127 5.5 属性130 5.5.1 属性的定义130 5.5.2 变量131 5.6 方法132 5.6.1 方法的定义132 5.6.2 构造方法135 ...
成员变量反射的综合案例 - 综合案例可能涉及利用反射来动态地创建对象并设置其私有成员变量。 ##### 6. 成员方法的反射 - 可以使用`Class`对象的`getDeclaredMethods()`方法获取类的所有成员方法,使用`invoke`...
15. **反射**:C#的反射能力允许在运行时检查和操作程序集、类型、成员等,案例可能涉及如何利用反射实现动态类型操作。 16. **委托和事件**:C#的委托和事件机制是实现回调和响应机制的关键,案例会教你如何使用...
19. **反射机制**:学习运行时动态加载类,获取类信息,以及调用方法和访问属性。 20. **集合框架的高级特性和Lambda表达式**:涵盖Stream API,Optional类,以及Java 8引入的Lambda表达式。 最后,通过实际项目或...
6.6.1 调用不存在的方法或成员变量 87 6.6.2 用空引用进行调用 88 6.6.3 数组的空引用问题 89 6.7 局部变量 89 6.7.1 局部变量的作用域 89 6.7.2 局部变量的初始化 90 6.8 this预定义对象引用 92 6.9...
第一篇 基础篇 第1章 Java简介(精彩视频:33分钟) 21 1.1 Java的平台简介 21 1.2 安装工具包 22 1.2.1 下载JDK 22 1.2.2 安装JDK 24 1.2.3 查看与设置环境变量 25 1.2.4 JDK常用命令 27 1.2.5 Java各个目录含义 28...
在C#编程语言的学习过程中,实例程序是理解概念和掌握技术的关键。"C#100个实例程序"集合提供了一套丰富的实践案例,旨在帮助初学者和有经验的开发者巩固基础,提升技能。以下是对这100个实例可能涵盖的一些核心知识...
20. **反射**:在运行时动态获取类信息,创建对象,调用方法的能力。 21. **Java API与标准库**:介绍Java标准库中的常用类和接口,如日期时间API、网络编程API等。 这个Java JDK 6学习笔记的PPT可能会深入每个...
19. **泛型**:泛型类、泛型方法、通配符和类型擦除的概念。 20. **Lambda表达式**:Java 8引入的新特性,简化函数式编程,理解函数式接口和方法引用来使用Lambda。 以上知识点构成了Java基础的主体,通过深入理解...
2. **数据类型与变量**:理解基本数据类型(如int、float、char)与引用数据类型(如类、接口、数组)的区别,以及声明、初始化和使用变量的方法。 3. **运算符与流程控制**:掌握算术、比较、逻辑、位运算符,以及...
13. **反射**:通过反射机制动态访问和操作程序集、类型、成员等,提升程序灵活性。 14. **单元测试**:通过实例学习如何使用 MSTest 或 NUnit 进行单元测试,确保代码质量。 15. **Windows Forms 和 WPF**:如果...
本书为中南大学精品教材立项项目,分为上下两篇共21章,涵盖了面向对象技术中Java开发环境配置、程序设计基础、面向对象原理以及UML的知识。本书使用的开发环境是JDK 1.6+Eclipse 3.3+Rational Rose 2003,逐步引领...
8. **反射API**:利用反射动态调用方法、获取类信息、创建对象,理解其在程序设计中的应用。 9. **网络编程**:Socket编程,TCP和UDP通信,以及HTTP协议的简单实现。 10. **文件与目录操作**:文件的读写、复制、...
- **题目3**:编写一个程序,该程序能够指定调用类的构造方法,并将操作信息输出到控制台。 - 示例代码: ```java public class ReflectionDemo { public static void main(String[] args) { try { Class<?> ...
内部类是一种定义在另一个类内部的类,它可以访问外部类的成员变量和方法。 #### 8.2 对象包装器 对象包装器是将基本数据类型包装为对象类型的类,如Integer、Double等。 #### 8.3 装箱和拆箱 装箱是将基本类型...
《Effective C#》一书由Bill Wagner撰写,旨在帮助C#程序员提高编程技能,通过50种具体的方法改进C#程序的质量。以下是书中部分章节及其关键知识点的详细解析: ### 第一章:C#语言元素 #### 原则1:始终能的使用...
20. **Java应用部署**:学习如何打包应用为JAR或WAR文件,以及使用Tomcat等应用服务器部署Web应用。 这个课程"cursoJava:库索德Java教授内里奥·阿尔维斯(NélioAlves)"将涵盖以上所有知识点,通过深入浅出的讲解...
《Java JDK 7学习笔记》是作者多年来教学实践的经验总结,汇集了学员在教学过程中遇到的概念、操作、应用或认证考试上的各种问题及解决方案。 《Java JDK 7学习笔记》详细介绍了JVM、JRE、Java SE API、JDK与IDE...