亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

反射——Java高級開發必須懂的

難度入門
時長 1小時20分
學習人數
綜合評分9.67
760人評價 查看評價
9.9 內容實用
9.6 簡潔易懂
9.5 邏輯清晰
  • Class.forName("類的全稱") 表示:1動態加載類 2類類型 編譯:靜態加載類 new屬于靜態加載類 在編譯時會加載所有用到的類 運行:動態加載類 只在運行期才會去關心里面的類有沒有 解決: 當設計實現時,使用接口來實現具體類,Class c=Class.forName("com.entity.Office"); OfficeBetter oa=(OfficeBetter)c.newInstance(); 用接口來接收返回
    查看全部
  • 內容概要: Class類的使用 方法的反射 成員變量的反射 構造函數的反射 java類加載機制
    查看全部
    0 采集 收起 來源:Class類的使用

    2016-08-19

  • Java反射機制——通過反射了解集合泛型的本質 1:反射的操作都是編譯之后的操作;就是運行階段 2:編譯之后集合是去泛型化的,Java中集合的泛型,是防止錯誤輸入的,只在編譯階段有效,繞過編譯就無效了; 3:反射的操作、Class的操作、Method操作、Field的操作都是編譯后的操作。 我們可以通過方法的反射來操作,繞過編譯 eg: ArrayList list1=new ArrayList(); ArrayList<String> list2=new ArrayList<String>(); Class c1=list1.getClass(); Class c2=list2.getClass(); System.out.print(c1==c2);//true Method m=c2.getMethod("add",Object.class); m.invoke(list2,20);//向list2集合中添加一個int 型的值;繞過編譯 當然是不能直接foreach list2集合的,會報類型轉換錯誤
    查看全部
  • 如何獲取某個方法:方法的【名稱】和【方法的參數列表】才能【唯一確定】某個方法 1、要獲取一個類的某個方法,需要先得到類類型 2、通過Class.getMethod(name,parameterTypes)獲得public的該方法:如c.getMethod("print",new Class[]{int.class,int.class})或者參數寫成int,int; ——> 來獲取 public void print(int a,int b) 3、同樣getDeclaredMethdo(name,paramterTypes)獲得自己聲明的該方法 二:方法的反射操作;就是用method對象進行方法調用;當然還是需要傳參的 method.invoke(對象實例,參數列表) 2.1:invoke(user,new Object[]{10,20})倘若沒有參數就可省略:invoke(user) 2.2:invoke(user,10,20)//直接傳參
    查看全部
  • Java反射機制——獲取成員變量&構造函數 一、成員變量是java.lang.reflect.Field的對象 1、Field類封裝了關于成員變量的操作 2、Field[] fs = c.getFields()方法獲取所有public的成員變量Field[]信息 3、c.getDeclaredFields獲取的是該類自己聲明的成員變量信息 4、field.getType()獲得成員類型的類類型 5、field.getName()獲得成員的名稱 二、構造函數是java.lang.Constructor類的對象 1、通過Class.getConstructor()獲得Constructor[]所有公有構造方法信息 2、建議getDeclaredConstructors()獲取自己聲明的構造方法 3、Constructor.getName():String 4、Constructor.getParameterTypes():Class[] 萬物皆對象 為什么
    查看全部
  • /** * 打印類的信息,包括類的成員函數、成員變量(只獲取成員函數) * @param obj 該對象所屬類的信息 */ public static void printClassMethodMessage(Object obj){ //要獲取類的信息 首先要獲取類的類類型 Class c = obj.getClass();//傳遞的是哪個子類的對象 c就是該子類的類類型 //獲取類的名稱 System.out.println("類的名稱是:"+c.getName()); /* * Method類,方法對象 * 一個成員方法就是一個Method對象 * getMethods()方法獲取的是所有的public的函數,包括父類繼承而來的 * getDeclaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權限 */ Method[] ms = c.getMethods();//c.getDeclaredMethods() 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[] paramTypes = ms[i].getParameterTypes(); for (Class class1 : paramTypes) { System.out.print(class1.getName()+","); } System.out.println(")"); } }
    查看全部
  • 使用new創建對象 是靜態加載類,在編譯時刻就需要加載所有的可能用到的類; 而使用動態加載類則是運行時加載所需的類,動態類加載:Class.forName("類的全稱"); 此種編碼方式 適用于:軟件功能升級
    查看全部
  • Class類 1)在面向對象的世界里,萬事萬物皆對象。 類是對象,類是java.lang.Class類的實例對象。 There is a class named Class 2)//Foo的實例對象如何表示 Foo foo1=new Foo();//foo1就表示出來了 //Foo這個類也是一個實例對象,Class類的實例對象,如何表示呢? //任何一個類都是Class的實例對象,這個實例對象有三種表示方式 //第一種表示方式--->實際在告訴我們任何一個類都有一個隱含的靜態成員變量class Class c1=Foo.class; //第二種表達方式--->已經知道該類的對象通過getClassF方法 Class c2=foo1.getClass(); //官網c1,c2表示了Foo類的類類型(class type),萬事萬物皆對象,類也是對象,是Class類的實例對象 //這個對象我們稱為該類的類類型 //不管c1 or c2都代表了Foo類的類類型,一個類只可能是Class類的一個實例對象 //第三種表達方式 Class c3=null; c3=Class.forName("com.imooc.reflect.Foo"); //我們完全可以通過類的類類型創建類的對象實例--->通過c1 or c2 or c3創建Foo的實例對象 Foo foo=(Foo)c1.newInstance();//需要有無參數的構造方法
    查看全部
    1 采集 收起 來源:Class類的使用

    2018-03-22

  • Class類的三種表示方式: 1:類名.class 2: 對象.getClass() 3: Class.forName("類的全稱")
    查看全部
    0 采集 收起 來源:Class類的使用

    2018-03-22

  • 動態加載類,不管該類存不存在,都可以通過編譯,當運行的時候有該類就可以了 很經典啊, Office of=Class.forName(args[0]); OfficeAble oa=(OfficeAble)of.newInstance();
    查看全部
  • new是靜態加載類,編譯時需要編譯所有的類,動態加載類
    查看全部
  • OfficeAble接口
    查看全部
  • 1.Class.forName("類的全稱")不僅表示了類得類類型,還代表了動態加載類 編譯時刻加載類是靜態加載類、運行時刻加載類是動態加載。 2.new 創建對象是靜態加載類,在編譯時刻就需要加載所有的可能使用到的類;通過動態加載類可以實現這個問題 Class c = Class.forName(args[0]); 通過類類型,創建該類對象。 OfficeAble oa=(OfficeAble)c.newInstance();//在此之前應該定義個接口Interface OfficeAble,并且讓子類實現它。 oa.start(); 。。。。在編譯時Word.java需要重新編譯,而OfficeBetter.java不需要,每次添加新的功能的時候只用編譯使用了接口的子類,然后運行時輸入 java OfficeBetter Word,這時oa是Word類 3.在線升級用的就是動態加載類。功能性的類,要使用動態加載,而不能使用靜態加載。
    查看全部
  • 1、靜態加載類,是編譯時刻加載;動態加載類,是運行時刻加載 2、new創建對象:是靜態加載類,在編譯時刻就需要加載所有的【可能使用到的類】。有一個類有問題(如不存在),都不能通過編譯,會報錯。
    查看全部
  • 區分編譯和運行
    查看全部

舉報

0/150
提交
取消
課程須知
童鞋們,學習本課程前需要熟悉Java面向對象的思想,并能掌握Java IO輸入輸出流、集合和泛型等知識??蓞⒖寄秸n網Java入門的一、二、三季以及我的文件我做主——Java IO流課程。
老師告訴你能學到什么?
1、能夠理解并應用反射機制。 2、能夠了解反射機制在集合泛型中的應用。 3、有利于更好的學習框架等Java高級技術。

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!