Java之反射机制【入门版(三)】
Java之反射机制【入门版(3)】
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(")");
}
}
}
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(")");
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。