标签:
1.Class类
1 package com.hxy; 2 3 class Foo{} 4 5 public class Reflect 6 { 7 public static void main(String[] args) 8 { 9 //1.获取Class对象 10 Class c1 = Foo.class; 11 12 Class c2 = new Foo().getClass(); 13 14 Class c3 = null; 15 try 16 { 17 c3 = Class.forName("com.hxy.Foo"); 18 } 19 catch (ClassNotFoundException e) 20 { 21 e.printStackTrace(); 22 } 23 24 System.out.println(c1 == c2); 25 System.out.println(c2 == c3); 26 //true 27 //true 28 29 //2.通过类的Class对象创建该类实例 30 try 31 { 32 //调用newInstance方法需要Foo类有无参数的构造方法 33 Foo foo1 = (Foo) c1.newInstance(); 34 } 35 catch (InstantiationException e) 36 { 37 e.printStackTrace(); 38 } catch (IllegalAccessException e) 39 { 40 e.printStackTrace(); 41 } 42 43 //3.动态加载类 44 45 //编译时刻加载类是“静态加载类” 46 //运行时刻加载类是“动态加载类” 47 48 //new创建对象是“静态加载类”,编译时刻就需要加载所有可能使用的类,无论是否可能用到 49 50 //Class.forName("完整类名")是动态加载类,要动态加载的类会在运行时加载 51 //好处:动态加载的类可以随意添加或者更改,而不需要编译此文件 52 53 //基本数据类型也有对应的Class 54 Class c4 = int.class; 55 Class c5 = Integer.class; 56 System.out.println(c4 == c5); 57 //false 58 59 //注:基本的数据类型和void都存在相应的Class对象 60 Class c6 = void.class; 61 62 //getName()获取类全称 63 //getSimpleName获取不包含包名的类的名称 64 System.out.println(c4.getName()); 65 System.out.println(c5.getName()); 66 System.out.println(c6.getName()); 67 //int 68 //java.lang.Integer 69 //void 70 } 71 }
2.获取类的方法列表
ClassUtil.java:
1 package com.hxy; 2 import java.lang.reflect.Method; 3 4 public class ClassUtil 5 { 6 //print该类的名称、成员变量和函数 7 8 public static void printMessage(Object obj) 9 { 10 Class c = obj.getClass(); 11 System.out.println("类的名称是:" + c.getName()); 12 //getMethods()方法获取的是所有public的函数,包括继承而来的 13 //getDeclaredMethods()方法获取的是所有该类自己声明的方法,不论访问权限 14 Method[] methods = c.getMethods(); 15 System.out.println("获取方法列表:"); 16 for(Method m: methods) 17 { 18 Class returnType = m.getReturnType(); 19 System.out.print(returnType.getName() + " " + m.getName() + "("); 20 Class[] paramTypes = m.getParameterTypes(); 21 for(int i = 0; i < paramTypes.length; i++) 22 { 23 String info = paramTypes[i].getName(); 24 if(i != paramTypes.length - 1) 25 { 26 info = info + ", "; 27 } 28 System.out.print(info); 29 } 30 System.out.println(")"); 31 } 32 System.out.println("获取方法列表结束"); 33 } 34 }
ClassUtilTest.java:
1 package com.hxy; 2 3 class bar{} 4 5 public class ClassUtilTest 6 { 7 public static void main(String[] args) 8 { 9 ClassUtil.printMessage(new bar()); 10 } 11 }
运行结果:
类的名称是:com.hxy.bar 获取方法列表: void wait() void wait(long, int) void wait(long) boolean equals(java.lang.Object) java.lang.String toString() int hashCode() java.lang.Class getClass() void notify() void notifyAll() 获取方法列表结束
标签:
原文地址:http://www.cnblogs.com/huoxiayu/p/5735503.html