黑马程序员——Java学习笔记之13——“反射”总结
来源:互联网 发布:淘宝卖家可以改名字吗 编辑:程序博客网 时间:2024/06/05 11:53
----------- android培训、java培训、期待与您交流! ------------
反射:就是将Java类中的各种成分映射成相应的Java类。
Class类:Class类是一种用来描述类的类。它描述了Java中所有类对象的属性,包括:字段(Field),方法(Method),构造函数(Constructor),实现的接口(Interface)等等。我们知道Class文件是反射的基础。(一个类的Class文件在内存中只能存在一份,这也是为什么在多线程安全问题中,我们可以用一个类的字节码文件作为锁的原因)通常,获取一个类的字节码文件的方法又以下3种:
这里还涉及到了一点小知识,就是可以通过isPrimitive()来判断一个类是否是基本类型。
9个预定义的Class实例对象包括:byte.class、short.class、char.class、boolean.class、int.class、float.class、long.class、double.class外加void.class。判断示例如下:
System.out.println(void.class.isPrimitive());//返回true
通过反射获取一个类的构造函数(Constructor):
通过getConstructor(parameterTypes)方法可以获得某个类中具有某种特定参数类型的构造函数。
通过getConstructors()方法可以获取到某个类中所有的构造方法
还可以通过getDeclaredConstructor(parameter Types)方法来获取到私有的构造方法。具体示例如下:
通过反射获取一个类的字段(Field):
可以通过getField(String args)获得该类中的某个字段
可以通过getFields()方法获得该类所有的字段
如果要获取私有的成员变量,就要使用getDeclaredFields(),并使用setAccessible(true)来实现对该成员的访问。实例如下:
通过反射获取一个类的方法(Method):
通过getMethod(函数名,函数对应的参数列表) 获取类中的一个指定方法。如果没有参数,可以为null,也可以直接不写
getMethods()方法可以获取到所有的类中方法。
使用getDeclaredMethod(函数名,函数对应的参数列表) 可以获得类中的私有方法。具体示例如下:
假设自定义的一个Person类中有一个静态方法,private setName(String name); 那么,要获取到该方法,可以:
Person p = new Person();
Method setMethod=Person.class.getDeclaredMethod(“setName”,String.class);
setMethod.setAccessable(true);
setMethod.invoke(p,"zby");//调用invoke方法执行该对象的setName方法。
通过反射来调用数组。
首先,具有相同纬度且元素类型相同的数组的字节码文件是相同的,即它们具有相同的Class对象。其次,要验证一个Class对象的父类是不是Object,可以用getSuperClass()方法来验证。其它的结合以下示例来说明:
下面为数组的反射调用实例:
----------- android培训、java培训、期待与您交流! ------------
- 黑马程序员——Java学习笔记之13——“反射”总结
- 黑马程序员——JAVA笔记之Java反射
- 黑马程序员——Java学习总结:反射
- 黑马程序员:Java学习笔记——反射
- 黑马程序员——学习笔记14.Java反射机制
- 黑马程序员 JAVA学习笔记 ——反射
- 黑马程序员 java学习笔记——反射
- 黑马程序员java学习笔记——正则表达式、反射
- 黑马程序员——java学习笔记--反射机制
- 黑马程序员——Java反射总结
- 黑马程序员——【学习笔记】反射
- 黑马程序员——Java高新技术之反射学习总结一
- 黑马程序员——Java学习之反射技术
- 黑马程序员—Java基础加强学习笔记之枚举&反射
- 黑马程序员—Java学习笔记之必须掌握的反射技术
- 黑马程序员—java基础学习--反射
- 黑马程序员——Java之反射
- 黑马程序员——Java之反射
- 测试4——shrink和move产生的redo log量的比较
- python学习(windows编程工具安装)
- apache并发数调整
- ZOJ 2001水题
- Ubuntu下手动安装openssh
- 黑马程序员——Java学习笔记之13——“反射”总结
- poj3213
- 无向图的深度优先遍历
- 浅淡C/C++中的typedef和#define
- (摘抄笔记)人脸识别经典算法二:LBP方法
- Leetcode: Maximum Depth of Binary Tree 理解分析
- Oracle几种表的简介
- OpenRisc-66-基于ORPSoC对linux进行RTL仿真
- java的注释快捷键