一. Class類
類就是對象,類是java.lang.Class類的實例對象
萬事萬物皆是對象,
類也是對象赫编,是Class類的實例對象
這個對象我們稱為該類的類類型
There is a class named Class
//第一種表達方式 任何一個類都有一個隱含的靜態(tài)成員變量Class
Class c1 = Foo.class
//第二種表達方式 已經(jīng)知道該類的對象通過getClass方法
Class c2 = foo1.getClass();
/*官網(wǎng) c1,c2表示了Foo類的類類型(class type)*/
//不管c1 or c2都代表了Foo類的類類型玷坠,一個類只可能是Class類的一個實例對象
System.out.println(c1 == c2);
//第三種表達方式
Class c3=null;
c3=Class.forName("com.imooc.reflect.Foo");
//我們完全可以通過類的類類型創(chuàng)建類的對象實例--->通過c1 or c2 or c3創(chuàng)建Foo的實例對象
Foo foo=(Foo)c1.newInstance();//需要有無參數(shù)的構(gòu)造方法
二. Java動態(tài)加載類
1) 靜態(tài)加載類,是編譯時刻加載者疤;動態(tài)加載類,是運行時刻加載
2) new創(chuàng)建對象,是靜態(tài)加載類吧慢,在編譯時刻就需要加載所有的"可能使用到的類"。有一個類可能有問題(如不存在)赏表,都不能通過編譯检诗,會報錯。
3) Class.forName("類的全稱") 通過動態(tài)加載類瓢剿,可以用到一個類時逢慌,才進行加載。
【功能性的類盡量使用動態(tài)加載间狂,并對新添加的類實現(xiàn)功能性接口(標準)攻泼,這樣就不用重新編譯】
Class c = Class.forName(args[0]) 動態(tài)加載類
Office oa = (Office)c.newInstance();
使用子類實現(xiàn)這個接口,編譯時javac office word即可
三. Java獲取方法信息
基本數(shù)據(jù)類型鉴象,void關(guān)鍵字都存在類類型
class.getMethods()方法獲取是該類的所有public方法忙菠,包括從父類繼承的方法;
class.getDeclareMethods()方法獲取該類自行聲明的所有方法纺弊,不論訪問權(quán)限牛欢;
method.getName()獲取方法名
method.getReturnType()獲取方法的返回值
method.getParameterTypes(),獲取方法的參數(shù)類型的類類型數(shù)組class[]
Class c1 = int.class; int的類類型
Class c2 = String.class; String類的類類型 String類字節(jié)碼
Class c3 = double.class; double這個數(shù)據(jù)類類型的字節(jié)碼表示方式
Class c4 = Double.class; Double這個類的類類型字節(jié)碼表示方式
Class c5 = void.class; 表達了void這個類的類類型
getName為這個類的類類型的具體名稱
c1.getName ---> int
c2.getName ---> java.lang.String 類的全稱
c2.getSimpleName ---> String 不包含包名的類的名稱
四. Java方法反射的基本操作
1.獲取A類中的print(int,int)方法:
①要獲取一個方法就是獲取類的信息俭尖,獲取類的信息首先要獲取類的類類型
A a1=new A();
Class c= a1.getClass();
②獲取方法 由名稱和參數(shù)列表來決定
getMethod獲取的是public方法氢惋,
getDelcaredMethod獲取自己聲明的方法
Method m =c.getMethod(methodName,paramtypes); //paramtypes可以用數(shù)組的形式 表示new Class[]{int.class,int.class}洞翩,也可以直接列舉類類型
2.方法的反射操作:是用m對象來進行方法調(diào)用,和a1.print(10,20)調(diào)用的方法相同 m.invoke(a1焰望,new Object[]{10,20})
Object o=m.invoke(對象名,參數(shù));//方法如果沒有返回值返回null骚亿,如果有返回值返回具體值,參數(shù)可用數(shù)組的方式表示熊赖,也可以直接列舉来屠,沒有參數(shù)就不寫。