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

Java学习提要——"反射"获取方法信息(成员函数、成员变量 、构造函数)

2016-10-31 08:15 706 查看

1.查看Class的类名称

public class ClassName {
public static void main(String[] args) {
Class c1 = int.class;  //int的类类型
Class c2 = String.class;  //String类的类类型
Class c3 = double.class;  //表示double这个数据类型的类类型
Class c4 = Double.class;  //表示Double这个类的类类型
Class c5 = void.class;

System.out.println(c1.getName());
System.out.println(c2.getName());
System.out.println(c2.getSimpleName());  //不包含类名称的名称
System.out.println(c5.getName());
}
}


2.查看成员函数

import java.lang.reflect.Method;

public class FoundClassMethod {
//打印类的成员函数
public static void printClassMessage(Object obj) {
//获取类类型
Class c = obj.getClass();  //传递的是哪一个子类的对象,c就是那个子类的类型
//获取类名称
System.out.println("类名称:" + c.getName());
/*一个成员方法就是一个Method对象
*getMethods()方法获取是所有public的函数,包括父类继承来的
*getDeclaredMethods()获取的是所有的该类自己声明的方法,不问访问权限
*/
Method[] ms = c.getMethods();//c.getDeclaredMethods();
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 [] paramTypes = ms[i].getParameterTypes();
for (Class class1 : paramTypes) {
System.out.print(class1.getName() + ",");
}
System.out.println(")");

}

}
}


//调用上面的函数
public class UseFoundClassMethod {
public static void main(String[] args) {
String s = "hello";
FoundClassMethod.printClassMessage(s);
}
}


3.查看成员变量

import java.lang.reflect.Field;

public class FoundClassMethod {
//打印类的成员变量
public static void printFieldMessage(Object obj) {
Class c = obj.getClass();
/*
* java.lang.reflect.Field
* Field类封装了关于成员变量的操作
* getFields()方法获取的是所有public的成员变量的信息
* getDeclaredFields获取的是该类自己声明的成员变量的信息
*/
//Field[] fs = c.getFields();
Field[] fs = c.getDeclaredFields();
for (Field field : fs) {
//得到成员变量的类型的类类型
Class fieldType = field.getType();
String typeName = fieldType.getName();
//得到成员变量的名称
String fieldName = field.getName();
System.out.println(typeName + " " + fieldName);
}
}
}


//调用上面的函数
public class UseFoundClassMethod {
public static void main(String[] args) {
String s = "hello";
FoundClassMethod.printFieldMessage(s);
}
}


4.查看构造函数

import java.lang.reflect.Constructor;

public class FoundClassMethod {
//打印类的构造函数
public static void printConMessage(Object obj) {
Class c = obj.getClass();
/*
* java.lang.Constructor中封装了构造函数的信息
* getConstructors获取所有的public的构造函数
* get.DeclaredConstructors得到所有的构造函数
*/
//Constructor[] cs = c.getConstructor();
Constructor[] cs = c.getDeclaredConstructors();
for (Constructor constructor : cs) {
System.out.print(constructor.getName() + "(");
//获得构造函数的参数列表,得到的是参数列表的类类型
Class[] paramTypes = constructor.getParameterTypes();
for (Class class1 : paramTypes) {
System.out.print(class1.getName() + ",");
}
System.out.println(")");
}
}
}


//调用上面的函数
public class UseFoundClassMethod {
public static void main(String[] args) {
String s = "hello";
FoundClassMethod.printConMessage(s);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐