版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、北京傳智播客教育 Java基礎(chǔ)加強(qiáng)方立勛Eclipse的使用工作空間(workspace)、工程(project)在eclipse下Java程序的編寫(xiě)和運(yùn)行,及java運(yùn)行環(huán)境的配置??旖萱I的配置,常用快捷鍵:內(nèi)容提示:Alt + / 快速修復(fù):Ctrl + 1導(dǎo)包:Ctrl + shift + O格式化代碼塊:ctrl + shift + F向前向后:Alt + 方向鍵添加注釋 Ctrl+Shift+/除去注釋 Ctrl+Shift+程序的調(diào)試和運(yùn)行F5(跳入) F6(跳過(guò)) F7(跳出)JunitJDK 5.0 新特性JDK5中新增了很多新的java特性,利用這些新語(yǔ)法可以幫助開(kāi)發(fā)人員編寫(xiě)
2、出更加高效、清晰,安全的代碼。 靜態(tài)導(dǎo)入自動(dòng)裝箱/拆箱增強(qiáng)for循環(huán)可變參數(shù)枚舉泛型元數(shù)據(jù)靜態(tài)導(dǎo)入靜態(tài)導(dǎo)入用于簡(jiǎn)化程序?qū)︻?lèi)靜態(tài)屬性和方法的調(diào)用。語(yǔ)法:Import static 包名.類(lèi)名.靜態(tài)屬性|靜態(tài)方法|*例如:import static java.lang.System.outimport static java.lang.Math.*Jdk5自動(dòng)裝箱/拆箱自動(dòng)裝箱:指開(kāi)發(fā)人員可以把一個(gè)基本數(shù)據(jù)類(lèi)型直接賦給對(duì)應(yīng)的包裝類(lèi)。自動(dòng)拆箱:指開(kāi)發(fā)人員可以把一個(gè)包裝類(lèi)對(duì)象直接賦給對(duì)應(yīng)的基本數(shù)據(jù)類(lèi)型。典型應(yīng)用:List list = new ArrayList();list.add(1);int j
3、 = (Integer)list.get(0);增強(qiáng)for循環(huán)引入增強(qiáng)for循環(huán)的原因:在JDK5以前的版本中,遍歷數(shù)組或集合中的元素,需先獲得數(shù)組的長(zhǎng)度或集合的迭代器,比較麻煩!因此JDK5中定義了一種新的語(yǔ)法增強(qiáng)for循環(huán),以簡(jiǎn)化此類(lèi)操作。增強(qiáng)for循環(huán)只能用在數(shù)組、或?qū)崿F(xiàn)Iterable接口的集合類(lèi)上語(yǔ)法格式: for(變量類(lèi)型 變量:需迭代的數(shù)組或集合)增強(qiáng)for循環(huán)使用增強(qiáng)for循環(huán)的幾個(gè)注意事項(xiàng)(以下程序的輸出結(jié)果?)int arr = new int5;for(int num : arr)num = 1;System.out.println(arr0);List list = n
4、ew ArrayList();list.add(xxx);for(String str : list)str = yyy;System.out.println(list.get(0);可變參數(shù)測(cè)試JDK中具有可變參數(shù)的類(lèi)Arrays.asList()方法。分別傳多個(gè)參、傳數(shù)組,傳數(shù)組又傳參的情況。注意:傳入基本數(shù)據(jù)類(lèi)型數(shù)組的問(wèn)題。從JDK 5開(kāi)始, Java 允許為方法定義長(zhǎng)度可變的參數(shù)。語(yǔ)法:public void foo(int args)注意事項(xiàng):調(diào)用可變參數(shù)的方法時(shí), 編譯器將自動(dòng)創(chuàng)建一個(gè)數(shù)組保存?zhèn)鬟f給方法的可變參數(shù),因此,程序員可以在方法體中以數(shù)組的形式訪問(wèn)可變參數(shù)可變參數(shù)只能處于參
5、數(shù)列表的最后, 所以一個(gè)方法最多只能有一個(gè)長(zhǎng)度可變的參數(shù)枚舉類(lèi)為什么需要枚舉?一些方法在運(yùn)行時(shí),它需要的數(shù)據(jù)不能是任意的,而必須是一定范圍內(nèi)的值,此類(lèi)問(wèn)題在JDK5以前采用自定義帶有枚舉功能的類(lèi)解決,Java5以后可以直接使用枚舉予以解決。JDK 5新增的 enum 關(guān)鍵字用于定義一個(gè)枚舉類(lèi)。枚舉類(lèi)枚舉類(lèi)具有如下特性:枚舉類(lèi)也是一種特殊形式的Java類(lèi)。枚舉類(lèi)中聲明的每一個(gè)枚舉值代表枚舉類(lèi)的一個(gè)實(shí)例對(duì)象。與java中的普通類(lèi)一樣,在聲明枚舉類(lèi)時(shí),也可以聲明屬性、方法和構(gòu)造函數(shù),但枚舉類(lèi)的構(gòu)造函數(shù)必須為私有的(這點(diǎn)不難理解)。枚舉類(lèi)也可以實(shí)現(xiàn)接口、或繼承抽象類(lèi)。JDK5中擴(kuò)展了swith語(yǔ)句,它
6、除了可以接收int, byte, char, short外,還可以接收一個(gè)枚舉類(lèi)型。若枚舉類(lèi)只有一個(gè)枚舉值,則可以當(dāng)作單態(tài)設(shè)計(jì)模式使用。練習(xí):請(qǐng)編寫(xiě)一個(gè)關(guān)于星期幾的枚舉WeekDay,要求:枚舉值:MON,TUE,WED,THU,FRI,SAT,SUN 該枚舉要有一個(gè)方法,調(diào)用該方法返回中文格式的星期。枚舉類(lèi)Java中聲明的枚舉類(lèi),均是java.lang.Enum類(lèi)的孩子,它繼承了Enum類(lèi)的所有方法。常用方法:name()ordinal()valueof(Class enumClass, String name)values() 此方法雖然在JDK文檔中查找不到,但每個(gè)枚舉類(lèi)都具有該方法,它
7、遍歷枚舉類(lèi)的所有枚舉值非常方便。反射一個(gè)類(lèi)有多個(gè)組成部分,例如:成員變量,方法,構(gòu)造方法等。反射就是加載類(lèi),并解剖出類(lèi)的各個(gè)組成部分。編程時(shí)什么情況下才需要加載類(lèi),并解剖出類(lèi)的各個(gè)組成部分呢?加載類(lèi)Java中有一個(gè)Class類(lèi)用于代表某一個(gè)類(lèi)的字節(jié)碼。Class類(lèi)即然代表某個(gè)類(lèi)的字節(jié)碼,它當(dāng)然就要提供加載某個(gè)類(lèi)字節(jié)碼的方法:forName()。forName方法用于加載某個(gè)類(lèi)的字節(jié)碼到內(nèi)存中,并使用class對(duì)象進(jìn)行封裝另外兩種得到class對(duì)象的方式類(lèi)名.class對(duì)象.getClass() 解剖類(lèi)Class對(duì)象提供了如下常用方法:Public Constructor getConstruc
8、tor(Class.parameterTypes) Public Method getMethod(Stringname, Class.parameterTypes) Public Field getField(Stringname) publicpublic Constructor getDeclaredConstructor(Class. parameterTypes)public Method getDeclaredMethod(String name,Class. parameterTypes)public Field getDeclaredField(String name)這些方法
9、分別用于從類(lèi)中解剖出構(gòu)造函數(shù)、方法和成員變量(屬性)。解剖出的成員分別使用Constructor、 Method 、 Field 對(duì)象表示。思考:假設(shè)你是一個(gè)框架的設(shè)計(jì)者,解剖出這些成員后你會(huì)干什么?利用Constructor創(chuàng)建對(duì)象Constructor類(lèi)提供了如下方法,用于創(chuàng)建類(lèi)的對(duì)象:public Object newInstance(Object. initargs)initargs用于指定構(gòu)造函數(shù)接收的參數(shù)練習(xí):反射類(lèi)無(wú)參、有參、私有的構(gòu)造函數(shù),創(chuàng)建類(lèi)的對(duì)象。多學(xué)一招:sun公司為簡(jiǎn)化開(kāi)發(fā)人員創(chuàng)建對(duì)象,它在class對(duì)象中也提供了一個(gè)newInstance方法,用于創(chuàng)建類(lèi)的對(duì)象。這樣
10、開(kāi)發(fā)人員可以避免每次都需要去反射Constructor 類(lèi)以創(chuàng)建對(duì)象。不過(guò)需要注意的是:class.newInstance方法內(nèi)部是反射類(lèi)無(wú)參的構(gòu)造函數(shù)創(chuàng)建的對(duì)象,所以利用此種方式創(chuàng)建類(lèi)對(duì)象時(shí),類(lèi)必須有一個(gè)無(wú)參的構(gòu)造函數(shù)。利用Method執(zhí)行方法Method對(duì)象提供了如下方法,用于執(zhí)行它所代表的方法:public Object invoke(Object obj,Object. args)練習(xí):使用Method分別執(zhí)行無(wú)參、有參、多個(gè)參(帶數(shù)組和基本數(shù)據(jù)類(lèi)型)、靜態(tài)、私有的方法。jdk1.4和jdk1.5的invoke方法的區(qū)別:Jdk1.5:public Object invoke(Obje
11、ct obj,Object. args)Jdk1.4:public Object invoke(Object obj,Object args),練習(xí):利用Method執(zhí)行main方法問(wèn)題:?jiǎn)?dòng)Java程序的main方法的參數(shù)是一個(gè)字符串?dāng)?shù)組,即public static void main(String args),通過(guò)反射方式來(lái)調(diào)用這個(gè)main方法時(shí),如何為invoke方法傳遞參數(shù)呢?按jdk1.5的語(yǔ)法,整個(gè)數(shù)組是一個(gè)參數(shù),而按jdk1.4的語(yǔ)法,數(shù)組中的每個(gè)元素對(duì)應(yīng)一個(gè)參數(shù),當(dāng)把一個(gè)字符串?dāng)?shù)組作為參數(shù)傳遞給invoke方法時(shí),javac會(huì)到底按照哪種語(yǔ)法進(jìn)行處理呢?jdk1.5肯定要兼容
12、jdk1.4的語(yǔ)法,會(huì)按jdk1.4的語(yǔ)法進(jìn)行處理,即把數(shù)組打散成為若干個(gè)單獨(dú)的參數(shù)。所以,在給main方法傳遞參數(shù)時(shí),不能使用代碼mainMethod.invoke(null,new String“xxx”),javac只把它當(dāng)作jdk1.4的語(yǔ)法進(jìn)行理解,而不把它當(dāng)作jdk1.5的語(yǔ)法解釋?zhuān)虼藭?huì)出現(xiàn)參數(shù)類(lèi)型不對(duì)的問(wèn)題。解決辦法:mainMethod.invoke(null,new Objectnew Stringxxx);mainMethod.invoke(null,(Object)new Stringxxx); ,編譯器會(huì)作特殊處理,編譯時(shí)不把參數(shù)當(dāng)作數(shù)組看待,也就不會(huì)數(shù)組打散成若干個(gè)
13、參數(shù)了利用Field訪問(wèn)屬性Field對(duì)象提供了如下方法,用于設(shè)置、獲取對(duì)象屬性的值:public void set(Object obj,Object value)public Object get(Object obj)練習(xí):利用Field分別設(shè)置和獲取公有、私有的屬性。內(nèi)省(Introspector)為什么要學(xué)內(nèi)???開(kāi)發(fā)框架時(shí),經(jīng)常需要使用java對(duì)象的屬性來(lái)封裝程序的數(shù)據(jù),每次都使用反射技術(shù)完成此類(lèi)操作過(guò)于麻煩,所以sun公司開(kāi)發(fā)了一套API,專(zhuān)門(mén)用于操作java對(duì)象的屬性。什么是Java對(duì)象的屬性和屬性的讀寫(xiě)方法?內(nèi)省訪問(wèn)JavaBean屬性的兩種方式:通過(guò)PropertyDescr
14、iptor類(lèi)操作Bean的屬性通過(guò)Introspector類(lèi)獲得Bean對(duì)象的 BeanInfo,然后通過(guò) BeanInfo 來(lái)獲取屬性的描述器( PropertyDescriptor ),通過(guò)這個(gè)屬性描述器就可以獲取某個(gè)屬性對(duì)應(yīng)的 getter/setter 方法,然后通過(guò)反射機(jī)制來(lái)調(diào)用這些方法。內(nèi)省beanutils工具包 Sun公司的內(nèi)省API過(guò)于繁瑣,所以Apache組織結(jié)合很多實(shí)際開(kāi)發(fā)中的應(yīng)用場(chǎng)景開(kāi)發(fā)了一套簡(jiǎn)單、易用的API操作Bean的屬性BeanUtilsBeanutils工具包的常用類(lèi):BeanUtilsPropertyUtilsConvertUtils.regsiter(Co
15、nverter convert, Class clazz)自定義轉(zhuǎn)換器泛型(Generic)泛形的作用JDK5以前,對(duì)象保存到集合中就會(huì)失去其特性,取出時(shí)通常要程序員手工進(jìn)行類(lèi)型的強(qiáng)制轉(zhuǎn)換,這樣不可避免就會(huì)引發(fā)程序的一些安全性問(wèn)題。例如:ArrayList list = new ArrayList();list.add(abc);Integer num = (Integer) list.get(0); /運(yùn)行時(shí)會(huì)出錯(cuò),但編碼時(shí)發(fā)現(xiàn)不了list.add(new Random();list.add(new ArrayList();for(int i=0;ilist.size();i+)(?)lis
16、t.get(i); /此處取出來(lái)的對(duì)象應(yīng)轉(zhuǎn)換成什么類(lèi)型泛型(Generic) 泛形的作用JDK5中的泛形允許程序員在編寫(xiě)集合代碼時(shí),就限制集合的處理類(lèi)型,從而把原來(lái)程序運(yùn)行時(shí)可能發(fā)生問(wèn)題,轉(zhuǎn)變?yōu)榫幾g時(shí)的問(wèn)題,以此提高程序的可讀性和穩(wěn)定性(尤其在大型程序中更為突出)。注意:泛型是提供給javac編譯器使用的,它用于限定集合的輸入類(lèi)型,讓編譯器在源代碼級(jí)別上,即擋住向集合中插入非法數(shù)據(jù)。但編譯器編譯完帶有泛形的java程序后,生成的class文件中將不再帶有泛形信息,以此使程序運(yùn)行效率不受到影響,這個(gè)過(guò)程稱(chēng)之為“擦除”。泛形的基本術(shù)語(yǔ),以ArrayList為例:念著typeofArrayList中
17、的E稱(chēng)為類(lèi)型參數(shù)變量ArrayList中的Integer稱(chēng)為實(shí)際類(lèi)型參數(shù)整個(gè)稱(chēng)為ArrayList泛型類(lèi)型整個(gè)ArrayList稱(chēng)為參數(shù)化的類(lèi)型ParameterizedType 泛型典型應(yīng)用使用迭代器迭代泛形集合中的元素。使用增強(qiáng)for循環(huán)迭代泛形集合中的元素。存取HashMap中的元素。使用泛形時(shí)的幾個(gè)常見(jiàn)問(wèn)題:使用泛形時(shí),泛形類(lèi)型須為引用類(lèi)型,不能是基本數(shù)據(jù)類(lèi)型ArrayList list = new ArrayList();ArrayList list = new ArrayList(); ArrayList list = new ArrayList ();ArrayList list
18、 = new ArrayList();自定義泛形泛型方法Java程序中的普通方法、構(gòu)造方法和靜態(tài)方法中都可以使用泛型。方法使用泛形前,必須對(duì)泛形進(jìn)行聲明,語(yǔ)法: ,T可以是任意字母,但通常必須要大寫(xiě)。通常需放在方法的返回值聲明之前。例如:public static void doxx(T t);練習(xí):編寫(xiě)一個(gè)泛形方法,實(shí)現(xiàn)數(shù)組元素的交換。編寫(xiě)一個(gè)泛形方法,接收一個(gè)任意數(shù)組,并顛倒數(shù)組中的所有元素。注意:只有對(duì)象類(lèi)型才能作為泛型方法的實(shí)際參數(shù)。在泛型中可以同時(shí)有多個(gè)類(lèi)型,例如:public static V getValue(K key) return map.get(key);如果一個(gè)類(lèi)多處都
19、要用到同一個(gè)泛型,這時(shí)可以把泛形定義在類(lèi)上(即類(lèi)級(jí)別的泛型),語(yǔ)法格式如下:public class GenericDao private T field1;public void save(T obj)public T getId(int id)注意,靜態(tài)方法不能使用類(lèi)定義的泛形,而應(yīng)單獨(dú)定義泛形。泛形的典型應(yīng)用:BaseDao和反射泛型泛型的高級(jí)應(yīng)用通配符定義一個(gè)方法,接收一個(gè)集合,并打印出集合中的所有元素,如下所示: void print (Collection c) for (String e : c) System.out.println(e); 問(wèn)題:該方法只能打印保存了Objec
20、t對(duì)象的集合,不能打印其它集合。通配符用于解決此類(lèi)問(wèn)題,方法的定義可改寫(xiě)為如下形式: void print (Collection c) /Collection(發(fā)音為:collection of unknown) for (Object e : c) System.out.println(e);此種形式下需要注意的是:由于print方法c參數(shù)的類(lèi)型為Collection,即表示一種不確定的類(lèi)型,因此在方法體內(nèi)不能調(diào)用與類(lèi)型相關(guān)的方法,例如add()方法??偨Y(jié):使用?通配符主要用于引用對(duì)象,使用了?通配符,就只能調(diào)對(duì)象與類(lèi)型無(wú)關(guān)的方法,不能調(diào)用對(duì)象與類(lèi)型有關(guān)的方法。泛型的高級(jí)應(yīng)用有限制的通配符
21、限定通配符的上邊界:正確:Vector x = new Vector();錯(cuò)誤:Vector x = new Vector();限定通配符的下邊界:正確:Vector x = new Vector();錯(cuò)誤:Vector x = new Vector();public void add(List list)list.add(abc);問(wèn)題:以下代碼行不行?Annotation(注解) 概述從 JDK 5.0 開(kāi)始, Java 增加了對(duì)元數(shù)據(jù)(MetaData) 的支持, 也就是 Annotation(注解)。什么是Annotation,以及注解的作用?三個(gè)基本的 Annotation:Over
22、ride: 限定重寫(xiě)父類(lèi)方法, 該注解只能用于方法Deprecated: 用于表示某個(gè)程序元素(類(lèi), 方法等)已過(guò)時(shí)SuppressWarnings: 抑制編譯器警告. Annotation 其實(shí)就是代碼里的特殊標(biāo)記, 它用于替代配置文件,也就是說(shuō),傳統(tǒng)方式通過(guò)配置文件告訴類(lèi)如何運(yùn)行,有了注解技術(shù)后,開(kāi)發(fā)人員可以通過(guò)注解告訴類(lèi)如何運(yùn)行。在Java技術(shù)里注解的典型應(yīng)用是:可以通過(guò)反射技術(shù)去得到類(lèi)里面的注解,以決定怎么去運(yùn)行類(lèi)。掌握注解技術(shù)的要點(diǎn):如何定義注解如何反射注解,并根據(jù)反射的注解信息,決定如何去運(yùn)行類(lèi)自定義 Annotation定義新的 Annotation 類(lèi)型使用 interface
23、 關(guān)鍵字聲明注解的屬性注解屬性的作用:原來(lái)寫(xiě)在配置文件中的信息,可以通過(guò)注解的屬性進(jìn)行描述。Annotation 的屬性聲明方式:String name();屬性默認(rèn)值聲明方式:String name() default “xxx”;特殊屬性value:如果注解中有一個(gè)名稱(chēng)value的屬性,那么使用注解時(shí)可以省略value=部分,如MyAnnotation(“xxx)特殊屬性value;JDK 的元 Annotation元 Annotation指修飾Annotation的Annotation。JDK中定義了如下元Annotation:Retention: 只能用于修飾一個(gè) Annotation
24、 定義, 用于指定該 Annotation 可以保留的域, Rentention 包含一個(gè) RetentionPolicy 類(lèi)型的成員變量, 通過(guò)這個(gè)變量指定域。RetentionPolicy.CLASS: 編譯器將把注解記錄在 class 文件中. 當(dāng)運(yùn)行 Java 程序時(shí), JVM 不會(huì)保留注解. 這是默認(rèn)值RetentionPolicy.RUNTIME:編譯器將把注釋記錄在 class 文件中. 當(dāng)運(yùn)行 Java 程序時(shí), JVM 會(huì)保留注解. 程序可以通過(guò)反射獲取該注釋RetentionPolicy.SOURCE: 編譯器直接丟棄這種策略的注釋JDK 的元 Annotation 2Ta
25、rget:指定注解用于修飾類(lèi)的哪個(gè)成員. Target 包含了一個(gè)名為 value,類(lèi)型為ElementType的成員變量。Documented: 用于指定被該元 Annotation 修飾的 Annotation 類(lèi)將被 javadoc 工具提取成文檔.Inherited: 被它修飾的 Annotation 將具有繼承性.如果某個(gè)類(lèi)使用了被 Inherited 修飾的 Annotation, 則其子類(lèi)將自動(dòng)具有該注解提取 Annotation 信息JDK 5.0 在 java.lang.reflect 包下新增了 AnnotationElement 接口, 該接口代表程序中可以接受注釋的程序
26、元素當(dāng)一個(gè) Annotation 類(lèi)型被定義為運(yùn)行時(shí) Annotation 后, 該注釋才是運(yùn)行時(shí)可見(jiàn), 當(dāng) class 文件被載入時(shí)保存在 class 文件中的 Annotation 才會(huì)被虛擬機(jī)讀取程序可以調(diào)用 AnnotationElement 對(duì)象的如下方法來(lái)訪問(wèn) Annotation 信息北京傳智播客教育 Tip:動(dòng)態(tài)代理明確兩個(gè)概念:代理對(duì)象存在的價(jià)值:主要用于攔截對(duì)真實(shí)業(yè)務(wù)對(duì)象的訪問(wèn)。代理對(duì)象有什么方法?現(xiàn)在要生成某一個(gè)對(duì)象的代理對(duì)象,這個(gè)代理對(duì)象通常也要編寫(xiě)一個(gè)類(lèi)來(lái)生成,所以首先要編寫(xiě)用于生成代理對(duì)象的類(lèi)。如何編寫(xiě)生成代理對(duì)象的類(lèi),兩個(gè)要素:代理誰(shuí)如何生成代理對(duì)象代理誰(shuí)?設(shè)計(jì)一
27、個(gè)類(lèi)變量,以及一個(gè)構(gòu)造函數(shù),記住代理類(lèi) 代理哪個(gè)對(duì)象。如何生成代理對(duì)象?設(shè)計(jì)一個(gè)方法生成代理對(duì)象(在方法內(nèi)編寫(xiě)代碼生成代理對(duì)象是此處編程的難點(diǎn))北京傳智播客教育 Tip:動(dòng)態(tài)代理 Java提供了一個(gè)Proxy類(lèi),調(diào)用它的newInstance方法可以生成某個(gè)對(duì)象的代理對(duì)象,使用該方法生成代理對(duì)象時(shí),需要三個(gè)參數(shù):1.生成代理對(duì)象使用哪個(gè)類(lèi)裝載器2.生成哪個(gè)對(duì)象的代理對(duì)象,通過(guò)接口指定3.生成的代理對(duì)象的方法里干什么事,由開(kāi)發(fā)人員編寫(xiě)handler接口的實(shí)現(xiàn)來(lái)指定。初學(xué)者必須理解,或不理解必須記住的2件事情:Proxy類(lèi)負(fù)責(zé)創(chuàng)建代理對(duì)象時(shí),如果指定了handler(處理器),那么不管用戶調(diào)用代理
28、對(duì)象的什么方法,該方法都是調(diào)用處理器的invoke方法。由于invoke方法被調(diào)用需要三個(gè)參數(shù):代理對(duì)象、方法、方法的參數(shù),因此不管代理對(duì)象哪個(gè)方法調(diào)用處理器的invoke方法,都必須把自己所在的對(duì)象、自己(調(diào)用invoke方法的方法)、方法的參數(shù)傳遞進(jìn)來(lái)。北京傳智播客教育 Tip:動(dòng)態(tài)代理代理類(lèi)public Object invoke(Object proxy, Method method,Object args)doSomething.void run(“aaa”)void eat(“bbb”)invoke(this,run,”aaa”)invoke(this,eat,”bbb”)處理器代
29、理對(duì)象void run(“aaa”)void eat(“bbb”)被代理對(duì)象北京傳智播客教育 Tip:動(dòng)態(tài)代理應(yīng)用在動(dòng)態(tài)代理技術(shù)里,由于不管用戶調(diào)用代理對(duì)象的什么方法,都是調(diào)用開(kāi)發(fā)人員編寫(xiě)的處理器的invoke方法(這相當(dāng)于invoke方法攔截到了代理對(duì)象的方法調(diào)用)。并且,開(kāi)發(fā)人員通過(guò)invoke方法的參數(shù),還可以在攔截的同時(shí),知道用戶調(diào)用的是什么方法,因此利用這兩個(gè)特性,就可以實(shí)現(xiàn)一些特殊需求,例如:攔截用戶的訪問(wèn)請(qǐng)求,以檢查用戶是否有訪問(wèn)權(quán)限、動(dòng)態(tài)為某個(gè)對(duì)象添加額外的功能。類(lèi)加載器類(lèi)加載器負(fù)責(zé)將 .class 文件(可能在磁盤(pán)上, 也可能在網(wǎng)絡(luò)上) 加載到內(nèi)存中, 并為之生成對(duì)應(yīng)的 ja
30、va.lang.Class 對(duì)象當(dāng) JVM 啟動(dòng)時(shí),會(huì)形成由三個(gè)類(lèi)加載器組成的初始類(lèi)加載器層次結(jié)構(gòu): 類(lèi)加載器之間的父子關(guān)系和管轄范圍圖BootStrapExtClassLoaderAppClassLoaderItcastClassLoaderMyClassLoaderSystemclassLoaderJRE/lib/rt.jarJRE/lib/ext/*.jarCLASSPATH指定的所有jar或目錄傳智播客指定的特殊目錄bootstrap classloaderbootstrap classloader:引導(dǎo)(也稱(chēng)為原始)類(lèi)加載器,它負(fù)責(zé)加載Java的核心類(lèi)。這個(gè)加載器的是非常特殊的,它實(shí)際
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版桉樹(shù)生物質(zhì)能源開(kāi)發(fā)合同2篇
- 二零二五年房地產(chǎn)銷(xiāo)售代理合同中止及終止協(xié)議6篇
- 二零二五版智能倉(cāng)儲(chǔ)貨物承包運(yùn)輸一體化合同3篇
- 二零二五年智能空調(diào)銷(xiāo)售及綠色環(huán)保安裝合同樣本3篇
- 二零二五年度車(chē)庫(kù)產(chǎn)權(quán)買(mǎi)賣(mài)及物業(yè)服務(wù)合同范本3篇
- 二零二五年文化藝術(shù)品油漆保護(hù)修復(fù)合同3篇
- 二零二五年度消防產(chǎn)品認(rèn)證與檢測(cè)服務(wù)合同2篇
- 二零二五年度電腦租賃及網(wǎng)絡(luò)接入服務(wù)合同3篇
- 二零二五版企業(yè)數(shù)據(jù)安全與隱私保護(hù)合同2篇
- 二零二五年度干粉砂漿生產(chǎn)設(shè)備租賃合同6篇
- 春節(jié)文化常識(shí)單選題100道及答案
- 24年追覓在線測(cè)評(píng)28題及答案
- TGDNAS 043-2024 成人靜脈中等長(zhǎng)度導(dǎo)管置管技術(shù)
- 《陸上風(fēng)電場(chǎng)工程概算定額》NBT 31010-2019
- FZ∕T 63006-2019 松緊帶
- 罐區(qū)自動(dòng)化系統(tǒng)總體方案(31頁(yè))ppt課件
- BIQS評(píng)分表模板
- 工程建設(shè)項(xiàng)目?jī)?nèi)外關(guān)系協(xié)調(diào)措施
- 招投標(biāo)法考試試題及答案
- 皮帶輸送機(jī)工程施工電氣安裝措施要點(diǎn)
- 藥房(冰柜)溫濕度表
評(píng)論
0/150
提交評(píng)論