java反射学习(二)--得到类的信息

来源:互联网 发布:薛之谦的淘宝店女装 编辑:程序博客网 时间:2024/04/30 01:08

利用java的反射机制可以得到一个类的所有信息,下面演示怎么得到一个类的名称,成员方法,成员变量,构造方法等,还可以得到接口之类的,这里省略。。。。。

不多说,直接上代码:

package com.quan.inflect;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;/*得到类的信息,包括类名,类的成员函数,类的成员变量 * @param 改对象所属类的信息 * *//** * @author quan * */public class ClassUtil {/*打印类的成员变量信息*/public static void printFieldsMessage(Object obj){//要获取类的信息,首先要获取类的类类型Class c=obj.getClass();//得到传入对象的类类型//获取类的名称System.out.println("类的名称"+c.getName());/*获取类的成员变量 * Field类,成员的类类型 * 一个成员函数就是一个Method的实例 * getFields获取的是所有的public的成员变量,包括从父类继承的 * getDeclaredFields获取的是该类定义的所有成员变量,不论访问权限 * */Field[] fields=c.getDeclaredFields();for (Field field : fields) {//若想得到私有属性的成员变量,需将field的setAccessible()设置为truefield.setAccessible(true);//得到成员变量的类型Class fieldType=field.getType();System.out.print(fieldType.getName()+" ");//打印成员变量名称System.out.println(field.getName());}}/**打印类的成员函数信息 * @param obj */public static void printMethodsMessage(Object obj) {/*万物皆对象 * Method类,方法的类类型 * 一个成员函数就是一个Method的实例 * getMethods获取的是所有的public的函数,包括从父类继承的 * getDeclaredMethods获取的是该类定义的所有方法,不论访问权限 * */Class c=obj.getClass();Method[] methods=c.getMethods();Method[] methods1=c.getDeclaredMethods();for (Method method : methods) {//得到方法的返回值的类类型Class returnType =method.getReturnType();System.out.print(returnType+" ");//得到方法的名称System.out.print(method.getName()+"(");//得到方法的参数名称的类类型Class[] paramsType =method.getParameterTypes();for (Class class1 : paramsType) {System.out.print(class1.getName()+",");}System.out.println(")");}}/**获取类的构造方法 * @param obj */public static void printConStructorMessage(Object obj){Class c=obj.getClass();/*java.lang.reflect.Constructor封装了构造方法的操作 *  * */Constructor[] constructors=c.getConstructors();for (Constructor constructor : constructors) {System.out.print(constructor.getName()+"(");//得到构造方法的参数,即得到参数列表的类类型Class[] paramTypes=constructor.getParameterTypes();for (Class class1 : paramTypes) {//打印构造方法的参数类型System.out.print(class1.getName()+",");}System.out.println(")");}}}

还有测试类:

package com.quan.inflect;/** * @author quan * */public class Test3 {public static void main(String[] args){String s="hello";int i=1;ClassUtil.printFieldsMessage(s);ClassUtil.printMethodsMessage(i);ClassUtil.printConStructorMessage(i);}}
控制台打印的结果:
类的名称java.lang.String
[C value
int offset
int count
int hash
long serialVersionUID
[Ljava.io.ObjectStreamField; serialPersistentFields
java.util.Comparator CASE_INSENSITIVE_ORDER
int hashCode()
int reverseBytes(int,)
int compareTo(java.lang.Object,)
int compareTo(java.lang.Integer,)
boolean equals(java.lang.Object,)
class java.lang.String toString(int,int,)
class java.lang.String toString(int,)
class java.lang.String toString()
class java.lang.String toHexString(int,)
class java.lang.Integer decode(java.lang.String,)
class java.lang.Integer valueOf(java.lang.String,)
class java.lang.Integer valueOf(java.lang.String,int,)
class java.lang.Integer valueOf(int,)
int reverse(int,)
byte byteValue()
double doubleValue()
float floatValue()
int intValue()
long longValue()
short shortValue()
int parseInt(java.lang.String,)
int parseInt(java.lang.String,int,)
int bitCount(int,)
class java.lang.Integer getInteger(java.lang.String,)
class java.lang.Integer getInteger(java.lang.String,int,)
class java.lang.Integer getInteger(java.lang.String,java.lang.Integer,)
int highestOneBit(int,)
int lowestOneBit(int,)
int numberOfLeadingZeros(int,)
int numberOfTrailingZeros(int,)
int rotateLeft(int,int,)
int rotateRight(int,int,)
int signum(int,)
class java.lang.String toBinaryString(int,)
class java.lang.String toOctalString(int,)
void wait()
void wait(long,int,)
void wait(long,)
class java.lang.Class getClass()
void notify()
void notifyAll()
java.lang.Integer(java.lang.String,)
java.lang.Integer(int,)

0 0
原创粉丝点击