博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java反射机制剖析(二)-功能以及举例
阅读量:6111 次
发布时间:2019-06-21

本文共 4092 字,大约阅读时间需要 13 分钟。

从的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);

 

 

 

 

转自:http://blog.csdn.net/lfsf802/article/details/7239711

 

你可能感兴趣的文章
解决ros建***能登录不能访问内网远程桌面的问题
查看>>
pfsense锁住自己
查看>>
vsftpd 相关总结
查看>>
bash complete -C command
查看>>
解决zabbix 3.0中1151端口不能运行问题
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
Get到的优秀博客网址
查看>>
dubbo
查看>>
【Git入门之四】操作项目
查看>>
老男孩教育每日一题-第107天-简述你对***的理解,常见的有哪几种?
查看>>
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
高利率时代的结局,任重道远,前途叵测
查看>>
Debian 6.05安装后乱码
查看>>
欢迎大家观看本人录制的51CTO精彩视频课程!
查看>>
IntelliJ IDEA中设置忽略@param注释中的参数与方法中的参数列表不一致的检查
查看>>
关于软件开发的一些感悟
查看>>
uva 10806
查看>>
纯CSS3绘制的黑色图标按钮组合
查看>>
Linux中环境变量文件及配置
查看>>