Using Java Reflection
Reflection is a feature in the Java programming language. It allows an executing Java program to examine or "introspect" upon itself, and manipulate internal properties of the program. For example, it's possible for a Java class to obtain the names of all its members and display them.
The ability to examine and manipulate a Java class from within itself may not sound like very much, but in other programming languages this feature simply doesn't exist. For example, there is no way in a Pascal, C, or C++ program to obtain information about the functions defined within that program.
One tangible use of reflection is in JavaBeans, where software components can be manipulated visually via a builder tool. The tool uses reflection to obtain the properties of Java components (classes) as they are dynamically loaded.
A Simple Example
To see how reflection works, consider this simple example:
package org.duke.java.reflect;
import java.lang.reflect.Method;
public class DumpMethods {
public static void main(String[] args) {
try {
args = new String[] { "java.util.Stack" };
Class c = Class.forName(args[0]);
// Returns an array of Method objects reflecting all the methods
// declared by the class or interface represented by this Class
// object.
Method m[] = c.getDeclaredMethods();
for (int i = 0; i < m.length; i++)
System.out.println(m[i].toString());
System.out.println("--------------------");
// Returns an array containing Method objects reflecting all the
// public member methods of the class or interface represented by
// this Class object, including those declared by the class or
// interface and those inherited from superclasses and
// superinterfaces.
Method[] methods = c.getMethods();
for (Method method : methods) {
System.out.println(method.toString());
}
} catch (Throwable e) {
System.err.println(e);
}
}
}
the output is:
public synchronized boolean java.util.Stack.empty()
public synchronized java.lang.Object java.util.Stack.peek()
public synchronized java.lang.Object java.util.Stack.pop()
public java.lang.Object java.util.Stack.push(java.lang.Object)
public synchronized int java.util.Stack.search(java.lang.Object)
--------------------
public synchronized java.lang.Object java.util.Vector.clone()
public synchronized boolean java.util.Vector.equals(java.lang.Object)
public synchronized int java.util.Vector.hashCode()
public synchronized java.lang.String java.util.Vector.toString()
public synchronized boolean java.util.Vector.add(java.lang.Object)
public synchronized boolean java.util.Vector.addAll(java.util.Collection)
public void java.util.Vector.clear()
public boolean java.util.Vector.contains(java.lang.Object)
public synchronized boolean java.util.Vector.containsAll(java.util.Collection)
public synchronized boolean java.util.Vector.isEmpty()
public java.util.Iterator java.util.AbstractList.iterator()
public boolean java.util.Vector.remove(java.lang.Object)
public synchronized boolean java.util.Vector.removeAll(java.util.Collection)
public synchronized boolean java.util.Vector.retainAll(java.util.Collection)
public synchronized int java.util.Vector.size()
public synchronized java.lang.Object[] java.util.Vector.toArray()
public synchronized java.lang.Object[] java.util.Vector.toArray(java.lang.Object[])
public void java.util.Vector.add(int,java.lang.Object)
public synchronized boolean java.util.Vector.addAll(int,java.util.Collection)
public java.lang.Object java.util.Vector.get(int)
public int java.util.Vector.indexOf(java.lang.Object)
public synchronized int java.util.Vector.lastIndexOf(java.lang.Object)
public java.util.ListIterator java.util.AbstractList.listIterator()
public java.util.ListIterator java.util.AbstractList.listIterator(int)
public synchronized java.lang.Object java.util.Vector.remove(int)
public synchronized java.lang.Object java.util.Vector.set(int,java.lang.Object)
public synchronized java.util.List java.util.Vector.subList(int,int)
public synchronized void java.util.Vector.addElement(java.lang.Object)
public synchronized int java.util.Vector.capacity()
public synchronized void java.util.Vector.copyInto(java.lang.Object[])
public synchronized java.lang.Object java.util.Vector.elementAt(int)
public java.util.Enumeration java.util.Vector.elements()
public synchronized void java.util.Vector.ensureCapacity(int)
public synchronized java.lang.Object java.util.Vector.firstElement()
public synchronized int java.util.Vector.indexOf(java.lang.Object,int)
public synchronized void java.util.Vector.insertElementAt(java.lang.Object,int)
public synchronized java.lang.Object java.util.Vector.lastElement()
public synchronized int java.util.Vector.lastIndexOf(java.lang.Object,int)
public synchronized void java.util.Vector.removeAllElements()
public synchronized boolean java.util.Vector.removeElement(java.lang.Object)
public synchronized void java.util.Vector.removeElementAt(int)
public synchronized void java.util.Vector.setElementAt(java.lang.Object,int)
public synchronized void java.util.Vector.setSize(int)
public synchronized void java.util.Vector.trimToSize()
public synchronized boolean java.util.Stack.empty()
public synchronized java.lang.Object java.util.Stack.peek()
public synchronized java.lang.Object java.util.Stack.pop()
public java.lang.Object java.util.Stack.push(java.lang.Object)
public synchronized int java.util.Stack.search(java.lang.Object)
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
That is, the method names of class java.util.Stack are listed, along with their fully q
补充:软件开发 , Java ,