Java反射机制剖析(二)-功能以及举例
2014-09-30 11:59
246 查看
转自:/article/1423458.html
从《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
3) 获得方法()
以下四个方法可以获得方法,要参见的是Java.lang.class
4) 获取类的构造器
以下四个方法可以获得方法,要参见的是Java.lang.class
示例代码:
[java] view
plaincopyprint?
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) 新建类的实例
转自:/article/1423458.html
从《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 对象所表示的类或接口所声明的所有字段 |
以下四个方法可以获得方法,要参见的是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 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法 |
以下四个方法可以获得方法,要参见的是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 对象表示的类声明的所有构造方法。它们是公共、保护、默认(包)访问和私有构造方法 |
[java] view
plaincopyprint?
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方法 | 示例: [java] view plaincopyprint? 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方法 | 示例: [java] view plaincopyprint? 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方法 | 示例: [java] view plaincopyprint? 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反射机制剖析(二)-功能以及举例
- STL string 的各种功能剖析 以及char字符串与string串的互相转换
- 主要机型对应的音频格式以及震动功能列表
- 全面剖析雅虎助手以及网络实名的流氓行径(9)
- 全面剖析雅虎助手以及网络实名的流氓行径(6)
- VB的ShowInTaskbar功能分析以及用VC的实现 如何隐藏对话框在工具栏上的按钮
- BlackBerry黑莓7230/7290等常用的功能简介以及技巧分类【转载】
- 全面剖析雅虎助手以及网络实名的流氓行径(1)
- 深入剖析MY123前生今世以及手工清除方法
- 全面剖析雅虎助手以及网络实名的流氓行径(7)
- Adobe (Acrobat)Reader 6.0以上版本支持对有特殊权限的PDF进行添加注释,填写标单以及保存的功能。
- 【转贴】剖析ASP.NET2.0站点导航功能之建立导航
- 【 应用以及剖析】之 java.util.Observer 观察者模式实现