码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA反射学习

时间:2016-08-04 10:10:45      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

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()
获取方法列表结束

 

JAVA反射学习

标签:

原文地址:http://www.cnblogs.com/huoxiayu/p/5735503.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!