-
筆記總結(jié)1查看全部
-
xx的類類型? xx類的類類型
查看全部 -
動(dòng)態(tài)加載類,在運(yùn)行時(shí)刻加載
Class c = Class.forName("類的全稱");
//通過(guò)類類型,創(chuàng)建該類對(duì)象
OfficeAble oa = (OfficeAble)c.newInstance():
查看全部 -
new 創(chuàng)建對(duì)象,是靜態(tài)加載類,在編譯時(shí)需要加載所有可能使用到的類
查看全部 -
class Foo
Foo foo1 = new Foo();
Class c1 = Foo.class;
Class c2 = foo1.getClass();
Class c3 = Class.forName("com.imooc.reflect.Foo"); //完整路徑
通過(guò)類的類類型創(chuàng)建該類的對(duì)象實(shí)例--》通過(guò) c1 or c2 or c3創(chuàng)建Foo的實(shí)例
Foo foo = (Foo) c1.newInstance();//需要有無(wú)參數(shù)的構(gòu)造方法
查看全部 -
Demo?demo?=?new?Demo(); Class?c1?=?Demo.class; Class?c2?=?demo.getClass(); Class?c3?=?Class.forName("Demo在src下的絕對(duì)路徑");
c1 = c2 = c3 (即三者都是指向同一個(gè)引用對(duì)象)
實(shí)例化則可以通過(guò)Demo demo = (Demo)c1(or c2 or c3).newInstance()獲取demo對(duì)象。但需要注意:newInstance()會(huì)調(diào)用Demo類的無(wú)參構(gòu)造函數(shù),如果沒(méi)有無(wú)參的構(gòu)造函數(shù)會(huì)報(bào)錯(cuò)。
查看全部 -
這個(gè)時(shí)候word這個(gè)類已經(jīng)有了,所以可以加載到,但是Excel沒(méi)有存在,所以加載不到,編譯不通過(guò)。
但是這個(gè)時(shí)候程序還是無(wú)法執(zhí)行,因?yàn)殪o態(tài)加載機(jī)制中,只要有1個(gè)加載不到導(dǎo)致其他的都不能編譯通過(guò),但是我們想要的就是需要用到哪一個(gè)就去加載哪一個(gè)
查看全部 -
功能性的類使用動(dòng)態(tài)加載而不是靜態(tài)加載,類類型是在運(yùn)行時(shí)加載類,new的方式是在編譯的時(shí)候加載全部的類,屬于靜態(tài)加載類
查看全部 -
動(dòng)態(tài)加載類:
1、使用反射的方式,運(yùn)行時(shí)加載所需類
2、使用類類型實(shí)例化具體對(duì)象,并返回統(tǒng)一接口的實(shí)例對(duì)象
3、主只需要編譯一次
查看全部 -
通過(guò)Class,Method來(lái)認(rèn)識(shí)泛型的本質(zhì)(javafanshe);
ArryList<String> list= new ArrayList<String>(); ?往集合添加值時(shí),只能添加String類型。
反射的操作都是編譯之后的操作
Java中集合的泛型,是防止錯(cuò)誤輸入的,只在編譯階段有效,繞過(guò)編譯就無(wú)效了。
查看全部 -
用java反射獲取print()方法:
首先需要獲取類的信息--A a1=new A(); ? ?Class c=a1.getClass();
獲取方法-(由名稱和參數(shù)列表來(lái)決定)-----Method m=c.getMethod("print",int.class,int.class); ?其中print 是方法名稱
方法的反射操作--Object 0 = m.invoke(a1,10,20);
查看全部 -
Object 0 = m.invoke(a1,10,20);其中a1是A這個(gè)類的實(shí)例對(duì)象。
查看全部 -
參數(shù)列表就是參數(shù)已逗號(hào)隔開所形成的列表
1)如何獲取某個(gè)方法
方法的名稱和方法的參數(shù)列表才能唯一決定某個(gè)方法
2)方法的反射操作
method.invoke(對(duì)象,參數(shù)列表)
反射:方法調(diào)用的參數(shù)列表
查看全部 -
關(guān)于反射的相關(guān)信息--第二節(jié)
成員變量也是對(duì)象
java.lang.reflect.Field ? ?Field類封裝了關(guān)于成員變量的操作
Field ?c.getDeclaredFields(); 獲取的是該類自己聲明的成員變量的信息
(c為類的信息 ?obj.getClass())
Class field.getType(); ? 得到成員變量的類型的類類型 例如 ?int.class
String field.getName(); 得到成員變量的名稱
構(gòu)造函數(shù)也是對(duì)象 ? ?java.lang.Constructor封裝了構(gòu)造函數(shù)的信息
Constructor[] ?c.getDeclaredConstructor();獲取所有本類中自身創(chuàng)建所有的構(gòu)造函數(shù)
Class[] constructor.getParameterTypes();得到的是參數(shù)列表的類類型
查看全部 -
java反射相關(guān)知識(shí)點(diǎn):
要獲取類的信息 首先要獲取類的類型
Class c= obj.getClass(); ? ? ?c.getName();獲取類的名稱
Method類,方法對(duì)象 ?一個(gè)成員方法,就是一個(gè)Method對(duì)象
Method[] c.getDeclaredMethods(); ? 獲取本類的所有聲明的方法
Class ??c.getDeclaredMethods().getReturnType();得到方法的返回值類型
Class??c.getDeclaredMethods()[i].getParameterTypes();得到參數(shù)列表的類型的類類型
查看全部
舉報(bào)