您的位置:首页 > 编程语言 > Java开发

Java之反射机制【入门版(3)】

2015-08-02 11:15 585 查看
java 反射

java.lang.Class

面向对象的原理一般认为万物万事皆对象

a.类名.class

b.如果对象存在可以直接对象.getClass

c.Class.forName("类的全称");

例子:

package corelesson;

import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import javax.swing.JButton;

public class ClassDemo3 {

public static void main(String[] args) {

//ClassDemo3.class.getClassLoader()得到类加载器对象

System.out.println(ClassDemo3.class.getClassLoader().getClass().getName());

printClassMessage(new JButton());

}

public static void printClassMessage(Object obj){

//要获取类信息,先获取类类型,3种方式根据已有条件选择

Class c = obj.getClass();

//获取类名

System.out.println(c.getName());

//获取不包含包名的类名

System.out.println(c.getSimpleName());

//获取类的方法--》java.lang.reflect.Method类的对象

/*getMethod获取了所有的public的方法

* 父类继承的也是

* getDeclaredMethods()是自己声明的方法,不问访问权限

* 继承的得不到

* */

Method[] ms = c.getMethods();

for(int i = 0;i < ms.length;i++){

//获取的是方法的返回值类型的类类型

Class returnType = ms[i].getReturnType();

System.out.print(returnType.getName()+ " ");

System.out.print(ms[i].getName()+"(");

//获取的是方法的参数列表类类型

Class[] paramsType = ms[i].getParameterTypes();

for(int j = 0;j <paramsType.length;j++){

System.out.print(paramsType[j]+",");

}

System.out.println(")");

}

System.out.println("+++++++++++++++++++++++++++++++++");

/*成员变量也是对象java.lang.reflect.Field;

* getDeclatredFields获取所有自己声明的成员变量

* getFields方法获取所有public 的成员变量

*

*

* */

Field[] fs = c.getDeclaredFields();

for(Field field :fs){

//获取的是成员变量的类类型

Class fieldType = field.getType();

//获取成员变量的类型和名字

System.out.println(fieldType.getName()+" "+field.getName());

}

System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");

/*所有的构造函数都是java.lang.reflect.Constructor类的对象

* getDeclaredConstructors(获取所有)

* getConstructor获取公有的

*

* */

Constructor[] cs = c.getDeclaredConstructors();

for(Constructor constructor : cs){

System.out.print(constructor.getName()+"(");

//获取构造函数的参数列表的类类型

Class[] paramsType = constructor.getParameterTypes();

for(Class class1: paramsType){

System.out.print(class1.getName()+",");

}

System.out.println(")");

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: