标签:style class blog c code java
能够分析类的功能的程序称为反射程序,反射机制的功能相当强大,几个基本的应用是:
当程序运行时,Java运行时系统维持一份包含每个对象运行时类型标记的信息。这个信息标记了每个对象所属的类型。运行时类型
信息为虚拟机找到正确的函数提供了依据。但这个信息可以通过类的getClass方法得到!
内存中每个Class对象只有唯一的一个:
这里用==号,而不是equals.
Class对象的另外一个重要的用途是在线创建对象:
Class的forName方法和newInstance方法,以及Java的class文件只有在执行时才装载的特性,这几点
位Java在运行时动态执行“未来的”类提供了重要的基础,借助它,你可以方便的实现构件化组装式的应用架构。
可以按照下面这种方式来实现:
1) 主程序中可以不知道构建的具体实现类,而是依据一个配置文件获得构建的具体实现类名;
2) 主程序执行时,从配置文件中读取构建的具体类名,然后用forName的方法和newInstance方法创建类的对象。
2. 使用反射机制来分析类的功能:
上面这段打印一个类的所有信息:
2 class java.util.Date
3 {
4 public java.util.Date();
5 public java.util.Date(long);
6 public java.util.Date(int, int, int, int, int);
7 public java.util.Date(int, int, int, int, int, int);
8 public java.util.Date(java.lang.String);
9 public java.util.Date(int, int, int);
10
11 public long getTime();
12 public void setTime(long);
13 public int getHours();
14 public int getMinutes();
15 public int getMonth();
16 public int getSeconds();
17 public int getYear();
18 public static long UTC(int, int, int, int, int, int);
19 private static final class java.lang.StringBuilder convertToAbbr(java.lang.StringBuilder, java.lang.String);
20 private final class sun.util.calendar.BaseCalendar$Date getCalendarDate();
21 private static final class sun.util.calendar.BaseCalendar getCalendarSystem(sun.util.calendar.BaseCalendar$Date);
22 private static final class sun.util.calendar.BaseCalendar getCalendarSystem(int);
23 private static final class sun.util.calendar.BaseCalendar getCalendarSystem(long);
24 public int getDay();
25 private static final synchronized class sun.util.calendar.BaseCalendar getJulianCalendar();
26 static final long getMillisOf(java.util.Date);
27 private final long getTimeImpl();
28 public int getTimezoneOffset();
29 public void setDate(int);
30 public void setHours(int);
31 public void setMinutes(int);
32 public void setMonth(int);
33 public void setSeconds(int);
34 public void setYear(int);
35 public class java.lang.String toGMTString();
36 public class java.time.Instant toInstant();
37 public class java.lang.String toLocaleString();
38 public int getDate();
39 public static class java.util.Date from(java.time.Instant);
40 public boolean equals(java.lang.Object);
41 public class java.lang.String toString();
42 public int hashCode();
43 public class java.lang.Object clone();
44 public int compareTo(java.util.Date);
45 public volatile int compareTo(java.lang.Object);
46 private void readObject(java.io.ObjectInputStream);
47 private void writeObject(java.io.ObjectOutputStream);
48 private final class sun.util.calendar.BaseCalendar$Date normalize();
49 private final class sun.util.calendar.BaseCalendar$Date normalize(sun.util.calendar.BaseCalendar$Date);
50 public static long parse(java.lang.String);
51 public boolean after(java.util.Date);
52 public boolean before(java.util.Date);
53
54 private static final sun.util.calendar.BaseCalendar gcal;
55 private static sun.util.calendar.BaseCalendar jcal;
56 private transient long fastTime;
57 private transient sun.util.calendar.BaseCalendar$Date cdate;
58 private static int defaultCenturyStart;
59 private static final long serialVersionUID;
60 private static final [Ljava.lang.String; wtb;
61 private static final [I ttb;
62
63 }
2. 利用反射机制来进行运行时的对象分析:
在程序初始化时就已经设置好的数据域是很好观察的,但反射机制可以观察运行时的数据域信息。
Java面向对象程序设计--Java反射机制,布布扣,bubuko.com
标签:style class blog c code java
原文地址:http://www.cnblogs.com/jiangheng/p/3749988.html