標籤:物件導向 java
java 反射
java.lang.Class
物件導向的原理一般認為萬物萬事皆對象
a.類名.class
b.如果對象存在可以直接對象.getClass
c.Class.forName("類的全稱");
例子:
package corelesson;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import javax.swing.JButton;
public class ClassDemo3 {
public static void main(String[] args) {
//ClassDemo3.class.getClassLoader()得到類載入器對象
System.out.println(ClassDemo3.class.getClassLoader().getClass().getName());
printClassMessage(new JButton());
}
public static void printClassMessage(Object obj){
//要擷取類資訊,先擷取類類型,3種方式根據已有條件選擇
Class c = obj.getClass();
//擷取類名
System.out.println(c.getName());
//擷取不包含包名的類名
System.out.println(c.getSimpleName());
//擷取類的方法--》java.lang.reflect.Method類的對象
/*getMethod擷取了所有的public的方法
* 父類繼承的也是
* getDeclaredMethods()是自己聲明的方法,不問存取權限
* 繼承的得不到
* */
Method[] ms = c.getMethods();
for(int i = 0;i < ms.length;i++){
//擷取的是方法的返回值類型的類類型
Class returnType = ms[i].getReturnType();
System.out.print(returnType.getName()+ " ");
System.out.print(ms[i].getName()+"(");
//擷取的是方法的參數列表類類型
Class[] paramsType = ms[i].getParameterTypes();
for(int j = 0;j <paramsType.length;j++){
System.out.print(paramsType[j]+",");
}
System.out.println(")");
}
System.out.println("+++++++++++++++++++++++++++++++++");
/*成員變數也是對象java.lang.reflect.Field;
* getDeclatredFields擷取所有自己聲明的成員變數
* getFields方法擷取所有public 的成員變數
*
*
* */
Field[] fs = c.getDeclaredFields();
for(Field field :fs){
//擷取的是成員變數的類類型
Class fieldType = field.getType();
//擷取成員變數的類型和名字
System.out.println(fieldType.getName()+" "+field.getName());
}
System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
/*所有的建構函式都是java.lang.reflect.Constructor類的對象
* getDeclaredConstructors(擷取所有)
* getConstructor擷取公有的
*
* */
Constructor[] cs = c.getDeclaredConstructors();
for(Constructor constructor : cs){
System.out.print(constructor.getName()+"(");
//擷取建構函式的參數列表的類類型
Class[] paramsType = constructor.getParameterTypes();
for(Class class1: paramsType){
System.out.print(class1.getName()+",");
}
System.out.println(")");
}
}
}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Java之反射機制【入門版(3)】