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

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

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

難度入門
時長 1小時20分
學習人數
綜合評分9.67
760人評價 查看評價
9.9 內容實用
9.6 簡潔易懂
9.5 邏輯清晰
  • 泛型只在編譯階段起作用,是為了防止錯誤輸入 通過方法的反射可以繞過編譯,繞過泛型
    查看全部
  • 方法的反射
    查看全部
  • 獲取構造方法
    查看全部
  • 獲取成員變量的信息
    查看全部
  • 查看全部
  • 咯哦哦
    查看全部
  • 方法的反射: 1.獲取A類中的print(int,int)方法: ①要獲取一個方法就是獲取類的信息,獲取類的信息首先要獲取類的類類型 A a1=new A(); Class c= a1.getClass(); ②獲取方法 由名稱和參數列表來決定,getMethod獲取的是public方法,getDelcaredMethod獲取自己聲明的方法 Method m =c.getMethod(methodName,paramtypes);//paramtypes可以用數組的形式 表示new Class[]{int.class,int.class},也可以直接列舉類類型 2.方法的反射操作:是用m對象來進行方法調用,和a1.print(10,20)調用的方法相同 m.invoke(a1,new Object[]{10,20}) Object o=m.invoke(對象名,參數);//方法如果沒有返回值返回null,如果有返回值返回具體值,參數可用數組的方式表示,也可以直接列舉,沒有參數就不寫 public Class A{ public void print(){}; public void Print(Sting a,String b){} public void Print(int a,int b){}; } public Class B{ public static void main(String[] args){ A a1 = new A(); Class c= a1.getclass; Method getMet=c.getMethod("print",String.class,String.class); Object obj=getMet.invoke(a1,"df","df"); } }
    查看全部
  • 要獲取類的信息,先獲取類的類類型,即Class c = obj.getClass(); 1.成員變量也是對象,Java.lang.reflect.Field Field類封裝了關于成員變量的操作 2.Field[]gs=c.getFields();獲取的是所有public的成員變量的信息,getDeclaredFields()獲取的是該類自己聲明的成員變量的信息 3.Class fieldType=field.getType();得到成員變量的類型的類類型;String fieldname=field.getName();得到成員變量的名稱 4.構造函數也是對象,java.lang.Constructor中封裝了構造函數的信息,getConstructor()獲取所有的public的構造函數,getDeclaredConstructor()得到所有的構造函數(必須是自己聲明的) 5.Class[]paramTypes=constructor.getParameterTypes();獲取構造函數的參數列表--->得到的是參數列表類型的類類型;
    查看全部
  • Class c1 = int.class; // int基本類型的類類型 Class c2 = String.class; // String類的類類型 c1.getName(); // 返回int c2.getName(); // 返回java.lang.String c2.getSimpleName(); // 返回String Methods[] ms = c1.getMethods(); // 獲取該類的所有公有方法,包括繼承的方法 Methods[] ms = c1.getDeclaredMethods(); / 獲取所有自己聲明的方法,包括私有方法 for(int i=0;i<ms.length;i++){ Class returnType = ms[i].getReturnType; // 獲取這個方法的返回值的類類型 returnType.getName(); // 該方法的返回值的類類型的名稱 ms[i].getName(); // 該方法的名稱 Class[] paramTypes = ms[i].getParameterType(); // 獲取該方法的參數的類型的類類型的數組 for(Class class1: paramType){ class1.getName(); // 獲取該參數的類型的名稱 } }
    查看全部
  • new創建對象是靜態加載類,在編譯時進行加載,如果程序中其他的類有問題,那么沒有問題的類也是無法執行的 解決這個問題可以使用動態加載 Word w=new Word();靜態加載 Class c=Class.forName(類的絕對路徑);動態加載 c叫做類的類類型,也可以通過類類型創建實例 c.newInstance(); 功能性的類最好使用動態加載,而不是靜態加載。動態加載類指的是程序運行時加載類,而靜態加載指的是編譯時加載類,編譯時加載的缺點是程序中所有的功能都不能有差錯,否則的話程序就不能用了,而動態加載類的好處就是我們需要使用哪一個類虛擬機就會動態加載根據我們的需要動態的加載這個類,這樣程序的使用就不會受到其他的影響
    查看全部
  • 普通數據類型,靜態的成員不是面向對象 類是對象,類是java.lang.Class類的實例對象 任何一個類都是Class的實例對象,這個實例對象的官方叫法也可以叫做我們寫的class的類類型,這個類類型有三種表示方式: 1.Class c= Foo.class; 2.Class c = foo1.getClass();已知Foo類的實例對象foo1; 3.Class c= Class.forName("com.imooc.reflect.Foo");括號里面是類的全稱 一個類只可能是Class類的實例對象. 我們可以用這個類類型來new一個該類的實例對象,同樣也可以調用這個里面的方法,前提是這個類里面要有一個無參的構造方法。例如:A a=(A)c.newInstance();
    查看全部
    0 采集 收起 來源:Class類的使用

    2018-03-22

  • 反射操作 繞過編譯 運行時操作
    查看全部
  • 三種獲得類類型的方法 class表示類,object表示該類的對象, Class c=class.class; Class c=object.getClass(); Class c=Class.forName(class類的絕對路徑);
    查看全部
  • new創建對象是靜態加載類,在編譯時進行加載,如果程序中其他的類有問題,那么沒有問題的類也是無法執行的 解決這個問題可以使用動態加載 Word w=new Word();靜態加載 Class c=Class.forName(類的絕對路徑);動態加載 c叫做類的類類型,也可以通過類類型創建實例 c.newInstance();
    查看全部
  • class對象三種獲取方式 1.Class c1= A.class; 2.Class c2=a.getClass() 3.Class c3 = forNameClass(pakcage.A) 反射機制是在編譯后的 所以可以繞過標準 所有的new 對象都是靜態編譯過程,就是必須編譯時會檢查 invoke方法是反射操作的核心 Mothed m = c1.getMethod(方法名 ,參數列表) m.invoke(代理的對象, 參數)
    查看全部

舉報

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

微信掃碼,參與3人拼團

微信客服

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

幫助反饋 APP下載

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

公眾號

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

友情提示:

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