Java反射机制剖析(二)-功能以及举例
来源:互联网 发布:数据分析师待遇 编辑:程序博客网 时间:2024/05/02 01:47
从《java反射机制剖析(一)》的API我们看到了许多接口和类,我们能够通过这些接口做些什么呢?
从上篇API中我们能看到它能够完成下面的这些功能:
1) 获得类
A. 运用getClass() (每个class都有此函数)
i. String str = "abc";
ii. Class c1 = str.getClass();
B. 运用Class.forName() (static method 最常被使用)
i. Class c1 = Class.forName ("java.lang.String");
ii. Class c2 = Class.forName ("java.awt.Button");
C. 运用 .class 语法
i. Class c1 = String.class;
ii. Class c2 = java.awt.Button.class;
iii. Class c4 = int.class;
iv. Class c5 = int[].class;
D. 运用 TYPE语法 ( primitive wrapper classes 基本数据类型包装类的 TYPE语法)
i. Class c1 = Boolean.TYPE;
2) 获得属性(这个功能的实例见Java反射机制剖析(2))
以下四个方法可以获得属性,主要参见的是Java.lang.class
Public Field getField
(String name)
返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段
public Field[] getFields()
返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段
Public Field
getDeclaredField(String name)
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段
public Field[]
getDeclaredFields()
返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段
3) 获得方法()
以下四个方法可以获得方法,要参见的是Java.lang.class
public Method
getMethod(String name,
... )
返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法
public Method[] getMethods()
返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法
public Method
getDeclaredMethod(String name,…)
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法
public Method[]
getDeclaredMethods()
返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法
4) 获取类的构造器
以下四个方法可以获得方法,要参见的是Java.lang.class
public Constructor
getConstructor(Class<?>... )
返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法
public Constructor<?>[]
getConstructors()
返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法
Public Constructor<T>
getDeclaredConstructor(Class<?>...)
返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法
public Constructor<?>[]
getDeclaredConstructors()
返回 Constructor 对象的一个数组,这些对象反映此 Class 对象表示的类声明的所有构造方法。它们是公共、保护、默认(包)访问和私有构造方法
示例代码:
- import java.lang.reflect.Constructor;
- public class TestConstructor {
- /**
- * @param args
- * @throws ClassNotFoundException
- * @throws SecurityException
- * @throws NoSuchMethodException
- */
- public static void main(String[] args) throws Exception {
- // TODO Auto-generated method stub
- Class classType=Class.forName(args[0]);
- Constructor Constructor= classType.getConstructor();
- System.out.println(Constructor.toString());
- }
- }
5) 新建类的实例
调用类的Class对象的newInstance方法
示例:
- import java.lang.reflect.Constructor;
- public class TestConstructor {
- /**
- * @param args
- * @throws ClassNotFoundException
- * @throws SecurityException
- * @throws NoSuchMethodException
- */
- public static void main(String[] args) throws Exception {
- // TODO Auto-generated method stub
- Class classType=Class.forName(args[0]);
- //Constructor Constructor= classType.getConstructor();
- Object inst=classType.newInstance();
- System.out.println(inst);
- }
- }
调用默认Constructor对象的newInstance方法
示例:
- import java.lang.reflect.Constructor;
- public class TestConstructor {
- /**
- * @param args
- * @throws ClassNotFoundException
- * @throws SecurityException
- * @throws NoSuchMethodException
- */
- public static void main(String[] args) throws Exception {
- // TODO Auto-generated method stub
- Class classType=Class.forName(args[0]);
- Constructor Constructor= classType.getConstructor();
- Object inst=Constructor.newInstance();
- System.out.println(inst);
- }
- }
调用带参数Constructor对象的newInstance方法
示例:
- Class classType=User.class
- Constructor constructor2 =
- classType.getDeclaredConstructor(int.class, String.class);
- Object inst = constructor2.newInstance(1, "123");
- System.out.println(inst);
- Java反射机制剖析(二)-功能以及举例
- Java反射机制剖析(二)-功能以及举例
- Java反射机制剖析(二)-功能以及举例
- Java反射机制剖析(二)-功能以及举例
- Java反射机制剖析(二)-功能以及举例
- Java反射机制剖析(二)-功能以及举例
- Java反射机制剖析(二)-功能以及举例
- Java 反射机制 举例
- java反射机制剖析(二)— Class Loader
- java反射机制剖析(二)— Class Loader
- java 反射机制剖析
- JAVA 反射机制剖析
- Java反射机制剖析
- Java反射机制剖析
- Java反射机制剖析
- java类反射机制举例,
- Java反射机制(2)--反射的用途举例
- Java反射机制(二)
- sort函数cmp函数集合
- 保定成为“畿辅节点”背后:习近平亲自推动
- Java反射机制剖析(一)-定义和API
- 【Bitmap】亲测解决Bitmap出现 decoder->decode returned false 错误
- Android - LayoutInflate用法
- Java反射机制剖析(二)-功能以及举例
- socket 的流 不支持reset 不要这样用
- 求表示方法数-递归法
- Java反射机制剖析(三)-简单谈谈动态代理
- Yaf学习笔记之Yaf_View_Simple
- Uva-825 Walking on the Safe Side 水DP
- Java反射机制剖析(四)-深度剖析动态代理原理及总结
- 黑马程序员-IOS-C语言预处理指令及杂项小计
- pull 方式解析xml文件