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

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

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

難度入門
時長 1小時20分
學習人數
綜合評分9.67
760人評價 查看評價
9.9 內容實用
9.6 簡潔易懂
9.5 邏輯清晰
  • 方法的反射 - Java獲取類的方法信息 /** * 打印類的信息,包括類的成員函數、成員變量(只獲取成員函數) * @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(")"); } }
    查看全部
  • 基本的數據類型 void關鍵字 都存在類類型
    查看全部
  • new 靜態加載類 在編譯時刻加載
    查看全部
  • forName 動態加載類,在運行時刻加載 功能性的類,一般都使用動態加載,而不是靜態加載
    查看全部
  • forName - 介紹 Class.forName("類的全程");
    查看全部
  • 反射機制三種表現方式 1.類名.class 2.對象名.getClass(); 3.forName(); //Foo的實例對象如何表示 Foo foo1 = new Foo();//foo1就表示出來了. //Foo這個類 也是一個實例對象,Class類的實例對象,如何表示呢 //任何一個類都是Class的實例對象,這個實例對象有三種表示方式 //第一種表示方式--->實際在告訴我們任何一個類都有一個隱含的靜態成員變量class Class c1 = Foo.class; //第二中表達方式 已經知道該類的對象通過getClass方法 Class c2 = foo1.getClass(); /*官網 c1 ,c2 表示了Foo類的類類型(class type) * 萬事萬物皆對象, * 類也是對象,是Class類的實例對象 * 這個對象我們稱為該類的類類型 * */ //不管c1 or c2都代表了Foo類的類類型,一個類只可能是Class類的一個實例對象 System.out.println(c1 == c2); //第三種表達方式 Class c3 = null; try { c3 = Class.forName("com.imooc.reflect.Foo"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(c2==c3); //完全可以通過類的類類型創建該類的對象實例---->通過c1 or c2 or c3創建Foo的實例對象 try { Foo foo = (Foo)c1.newInstance();//需要有無參數的構造方法 foo.print(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); }
    查看全部
    0 采集 收起 來源:Class類的使用

    2018-03-22

  • 靜態成員,普通數據類型不是對象
    查看全部
    0 采集 收起 來源:Class類的使用

    2017-01-06

  • class.forName("類的全名稱(包名)")得到一個Class實例對象
    查看全部
    0 采集 收起 來源:Class類的使用

    2018-03-22

  • Java反射機制——通過反射了解集合泛型的本質 1:反射的操作都是編譯之后的操作;就是運行階段 2:java中集合的泛型是防止錯誤輸入的;只在編譯階段有效,只要繞過編譯就無效啦 我們可以通過方法的反射來操作,繞過編譯 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集合的,會報類型轉換錯誤
    查看全部
  • 如何獲取某個方法: 方法的名稱和方法的參數列表才能唯一決定某個方法 方法反射的操作: method.invoke(對象,參數列表) //獲取方法print(int,int) // Method m = c.getMethod("print", new Class[]{int.class,int.class}); Method m = c.getMethod("print", int.class,int.class); //a1.print(10,20); //方法的反射操作是用m對象來進行方法調用,和a1.print調用的效果完全相同 //方法如果沒有返回值則返回null,有返回值返回具體的返回值 // Object o = m.invoke(a1, new Object[]{10,20}); Object o = m.invoke(a1, 10,20);
    查看全部
  • 類類型可以創建對象,照你這么說,void d= new void(); 應該也是可以的,可是為什么就不行了?請給解釋。 [最新 Dragon223 的回答] 因為new 是靜態加載類對象,需要調用無參的構造方法,而Void的無參構造方法是私有的,所有不能直接new出來。如果要實例化,只能通過Class.forName()方式。
    查看全部
  • getMethods()方法獲取的是所有的public的函數,包括父類繼承而來的 getDeclaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權限
    查看全部
  • 編譯的時候指定字符集,此處應該使用 javac -encoding UTF-8 OfficeBetter.java 進行編譯。(注意 UTF-8 那個地方要是你的源文件的字符集)
    查看全部
  • 反射可以獲得一個class實體的方法信息和成員信息
    查看全部
  • 編譯時刻加載類-->靜態加載 運行時刻加載類-->動態加載
    查看全部

舉報

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

微信掃碼,參與3人拼團

微信客服

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

幫助反饋 APP下載

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

公眾號

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

友情提示:

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