|
ReflectionDemo |
|
1 // Example 8.3 joi/examples/ReflectionDemo.java
2 //
3 //
4 // Copyright 2003 Bill Campbell and Ethan Bolker
5
6 import java.lang.reflect.*;
7
8 // A short program to illustrate how Java uses
9 // class information dynamically.
10 //
11 // This file declares class Greeting as well as class
12 // ReflectionDemo. Java requires that a public class be
13 // declared in a file that matches its name, but Greeting
14 // is not marked public.
15 //
16 // %> java ReflectionDemo
17 // Greeting@93dee9 is an instance of class Greeting
18 // classOfG.toString(): class Greeting
19 // classOfG.getName(): Greeting
20 // fields in class Greeting (not inherited):
21 // name: message, type: class java.lang.String
22 // methods in class Greeting (not inherited):
23 // invoking hello
24 // hello, world!
25 // Creating an object when you know the name of its class:
26 // g = (Greeting)Class.forName("Greeting").newInstance();
27 // g.toString(): Greeting@6f0472
28 // Try to create an instance of nonexistent class Foo:
29 // java.lang.ClassNotFoundException: Foo
30
31 public class ReflectionDemo
32 {
33 public static void main( String[] args )
34 {
35 Greeting g = new Greeting();
36 Class classOfG = g.getClass();
37 out(g.toString() + " is an instance of " +
38 classOfG.toString());
39 out("classOfG.toString(): " + classOfG.toString());
40 out("classOfG.getName(): " + classOfG.getName());
41
42 out("fields in class Greeting (not inherited):");
43
44 Field[] greetingFields = classOfG.getFields();
45 for (int i=0; i < greetingFields.length; i++) {
46 Field f = greetingFields[i];
47 if (f.getDeclaringClass() == classOfG) {
48 out("name: " + f.getName() + ", type: " + f.getType());
49 }
50 }
51
52 out("methods in class Greeting (not inherited):");
53
54 Method[] greetingMethods = classOfG.getMethods();
55 for (int i=0; i < greetingMethods.length; i++) {
56 Method m = greetingMethods[i];
57 if (m.getDeclaringClass() == classOfG) {
58 out("invoking " + m.getName());
59 try {
60 m.invoke(g, null);
61 }
62 catch( Exception e) {
63 out(e.toString());
64 }
65 }
66 }
67
68 out("Creating an object when you know the name of its class:");
69 out("g = (Greeting)Class.forName(\"Greeting\").newInstance();");
70 try {
71 g = (Greeting)Class.forName("Greeting").newInstance();
72 out( "g.toString(): " + g.toString());
73 }
74 catch (Exception e) { // couldn't find class
75 out(e.toString());
76 }
77
78 out("Try to create an instance of nonexistent class Foo:");
79 Object o;
80 try {
81 o = Class.forName("Foo").newInstance();
82 }
83 catch (Exception e) { // couldn't find class
84 out(e.toString());
85 }
86 }
87
88 // too lazy to type "System.out.println()
89 public static void out( String s )
90 {
91 System.out.println(s);
92 }
93 }
94
95 class Greeting
96 {
97 public String message = "hello, world";
98
99 public void hello()
100 {
101 System.out.println(message + "!");
102 }
103 }
104
|
ReflectionDemo |
|