Java之反射機制【入門版(3)】

來源:互聯網
上載者:User

標籤:物件導向   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)】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.