一.JAVA 注解
萊山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!1. 概念
Annotation(注解)是 Java 提供的一種對(duì)元程序中元素關(guān)聯(lián)信息和元數(shù)據(jù)(metadata)的途徑和方法。Annatation(注解)是一個(gè)接口,程序可以通過反射來獲取指定程序中元素的 Annotation對(duì)象,然后通過該 Annotation 對(duì)象來獲取注解中的元數(shù)據(jù)信息。
2. 4 種標(biāo)準(zhǔn)元注解
元注解的作用是負(fù)責(zé)注解其他注解。 Java5.0 定義了 4 個(gè)標(biāo)準(zhǔn)的 meta-annotation 類型,它們被用來提供對(duì)其它 annotation 類型作說明。
@Target 修飾的對(duì)象范圍
@Target說明了Annotation所修飾的對(duì)象范圍: Annotation可被用于 packages、types(類、接口、枚舉、Annotation 類型)、類型成員(方法、構(gòu)造方法、成員變量、枚舉值)、方法參數(shù)和本地變量(如循環(huán)變量、catch 參數(shù))。在 Annotation 類型的聲明中使用了 target 可更加明晰其修飾的目標(biāo)
@Retention 定義 被保留的時(shí)間長(zhǎng)短
Retention 定義了該 Annotation 被保留的時(shí)間長(zhǎng)短:表示需要在什么級(jí)別保存注解信息,用于描述注解的生命周期(即:被描述的注解在什么范圍內(nèi)有效),取值(RetentionPoicy)由:
SOURCE:在源文件中有效(即源文件保留)
CLASS:在 class 文件中有效(即 class 保留)
RUNTIME:在運(yùn)行時(shí)有效(即運(yùn)行時(shí)保留)
@Documented ?述-javadoc
@ Documented 用于描述其它類型的 annotation 應(yīng)該被作為被標(biāo)注的程序成員的公共 API,因此可以被例如 javadoc 此類的工具文檔化。
@Inherited 闡述了某個(gè)被標(biāo)注的類型是被繼承的
@Inherited 元注解是一個(gè)標(biāo)記注解,@Inherited 闡述了某個(gè)被標(biāo)注的類型是被繼承的。如果一個(gè)使用了@Inherited 修飾的 annotation 類型被用于一個(gè) class,則這個(gè) annotation 將被用于該class 的子類。
3. 注解處理器
如果沒有用來讀取注解的方法和工作,那么注解也就不會(huì)比注釋更有用處了。使用注解的過程中,很重要的一部分就是創(chuàng)建于使用注解處理器。Java SE5 擴(kuò)展了反射機(jī)制的 API,以幫助程序員快速的構(gòu)造自定義注解處理器。下面實(shí)現(xiàn)一個(gè)注解處理器。
二.JAVA 內(nèi)部類
Java 類中不僅可以定義變量和方法,還可以定義類,這樣定義在類內(nèi)部的類就被稱為內(nèi)部類。根據(jù)定義的方式不同,內(nèi)部類分為靜態(tài)內(nèi)部類,成員內(nèi)部類,局部?jī)?nèi)部類,匿名內(nèi)部類四種。
1. 靜態(tài)內(nèi)部類
定義在類內(nèi)部的靜態(tài)類,就是靜態(tài)內(nèi)部類。
1. 靜態(tài)內(nèi)部類可以訪問外部類所有的靜態(tài)變量和方法,即使是 private 的也一樣。
2. 靜態(tài)內(nèi)部類和一般類一致,可以定義靜態(tài)變量、方法,構(gòu)造方法等。
3. 其它類使用靜態(tài)內(nèi)部類需要使用“外部類.靜態(tài)內(nèi)部類”方式,如下所示:Out.Inner inner =new Out.Inner();inner.print();
4. Java集合類HashMap內(nèi)部就有一個(gè)靜態(tài)內(nèi)部類Entry。Entry是HashMap存放元素的抽象,HashMap 內(nèi)部維護(hù) Entry 數(shù)組用了存放元素,但是 Entry 對(duì)使用者是透明的。像這種和外部類關(guān)系密切的,且不依賴外部類實(shí)例的,都可以使用靜態(tài)內(nèi)部類。
2. 成員內(nèi)部類
定義在類內(nèi)部的非靜態(tài)類,就是成員內(nèi)部類。成員內(nèi)部類不能定義靜態(tài)方法和變量(final 修飾的除外)。這是因?yàn)槌蓡T內(nèi)部類是非靜態(tài)的,類初始化的時(shí)候先初始化靜態(tài)成員,如果允許成員內(nèi)部類定義靜態(tài)變量,那么成員內(nèi)部類的靜態(tài)變量初始化順序是有歧義的。
3. 局部?jī)?nèi)部類(定義在方法中的類)
定義在方法中的類,就是局部類。如果一個(gè)類只在某個(gè)方法中使用,則可以考慮使用局部類。
4. 匿名內(nèi)部類(要繼承一個(gè)父類或者實(shí)現(xiàn)一個(gè)接口、直接使用
new 來生成一個(gè)對(duì)象的引用)
匿名內(nèi)部類我們必須要繼承一個(gè)父類或者實(shí)現(xiàn)一個(gè)接口,當(dāng)然也僅能只繼承一個(gè)父類或者實(shí)現(xiàn)一個(gè)接口。同時(shí)它也是沒有 class 關(guān)鍵字,這是因?yàn)槟涿麅?nèi)部類是直接使用 new 來生成一個(gè)對(duì)象的引用。
三.JAVA 泛型
泛型提供了編譯時(shí)類型安全檢測(cè)機(jī)制,該機(jī)制允許程序員在編譯時(shí)檢測(cè)到非法的類型。泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。比如我們要寫一個(gè)排序方法,能夠?qū)φ蛿?shù)組、字符串?dāng)?shù)組甚至其他任何類型的數(shù)組進(jìn)行排序,我們就可以使用 Java 泛型。
1. 泛型方法(
你可以寫一個(gè)泛型方法,該方法在調(diào)用時(shí)可以接收不同類型的參數(shù)。根據(jù)傳遞給泛型方法的參數(shù)類型,編譯器適當(dāng)?shù)靥幚砻恳粋€(gè)方法調(diào)用。
1. extends T>表示該通配符所代表的類型是 T 類型的子類。
2. super T>表示該通配符所代表的類型是 T 類型的父類。
2. 泛型類
泛型類的聲明和非泛型類的聲明類似,除了在類名后面添加了類型參數(shù)聲明部分。和泛型方法一樣,泛型類的類型參數(shù)聲明部分也包含一個(gè)或多個(gè)類型參數(shù),參數(shù)間用逗號(hào)隔開。一個(gè)泛型參數(shù),也被稱為一個(gè)類型變量,是用于指定一個(gè)泛型類型名稱的標(biāo)識(shí)符。因?yàn)樗麄兘邮芤粋€(gè)或多個(gè)參數(shù),這些類被稱為參數(shù)化的類或參數(shù)化的類型。
3. 類型通配符?
類型通配符一般是使用 ? 代替具體的類型參數(shù)。例如 List> 在邏輯上是List
4. 類型擦除
Java 中的泛型基本上都是在編譯器這個(gè)層次來實(shí)現(xiàn)的。在生成的 Java 字節(jié)代碼中是不包含泛型中的類型信息的。使用泛型的時(shí)候加上的類型參數(shù),會(huì)被編譯器在編譯的時(shí)候去掉。這個(gè)過程就稱為類型擦除。如在代碼中定義的 List
四. JAVA 序列化(創(chuàng)建可復(fù)用的 Java 對(duì)象)
保存(持久化)對(duì)象及其狀態(tài)到內(nèi)存或者磁盤
Java 平臺(tái)允許我們?cè)趦?nèi)存中創(chuàng)建可復(fù)用的 Java 對(duì)象,但一般情況下,只有當(dāng) JVM 處于運(yùn)行時(shí),這些對(duì)象才可能存在,即,這些對(duì)象的生命周期不會(huì)比 JVM 的生命周期更長(zhǎng)。但在現(xiàn)實(shí)應(yīng)用中,就可能要求在JVM停止運(yùn)行之后能夠保存(持久化)指定的對(duì)象,并在將來重新讀取被保存的對(duì)象。Java 對(duì)象序列化就能夠幫助我們實(shí)現(xiàn)該功能。
序列化對(duì)象以字節(jié)數(shù)組保持-靜態(tài)成員不保存
使用 Java 對(duì)象序列化,在保存對(duì)象時(shí),會(huì)把其狀態(tài)保存為一組字節(jié),在未來,再將這些字節(jié)組裝成對(duì)象。必須注意地是,對(duì)象序列化保存的是對(duì)象的”狀態(tài)”,即它的成員變量。由此可知,對(duì)象序列化不會(huì)關(guān)注類中的靜態(tài)變量。
序列化用戶遠(yuǎn)程對(duì)象傳輸
除了在持久化對(duì)象時(shí)會(huì)用到對(duì)象序列化之外,當(dāng)使用 RMI(遠(yuǎn)程方法調(diào)用),或在網(wǎng)絡(luò)中傳遞對(duì)象時(shí),都會(huì)用到對(duì)象序列化。Java序列化API為處理對(duì)象序列化提供了一個(gè)標(biāo)準(zhǔn)機(jī)制,該API簡(jiǎn)單易用。
Serializable 實(shí)現(xiàn)序列化
在 Java 中,只要一個(gè)類實(shí)現(xiàn)了 java.io.Serializable 接口,那么它就可以被序列化。ObjectOutputStream 和 ObjectInputStream 對(duì)對(duì)象進(jìn)行序列化及反序列化通過 ObjectOutputStream 和 ObjectInputStream 對(duì)對(duì)象進(jìn)行序列化及反序列化。
writeObject 和 readObject 自定義序列化策略
在類中增加 writeObject 和 readObject 方法可以實(shí)現(xiàn)自定義序列化策略。
序列化 ID
虛擬機(jī)是否允許反序列化,不僅取決于類路徑和功能代碼是否一致,一個(gè)非常重要的一點(diǎn)是兩個(gè)類的序列化 ID 是否一致(就是 private static final long serialVersionUID)
序列化并不保存靜態(tài)變量
序列化子父類說明
要想將父類對(duì)象也序列化,就需要讓父類也實(shí)現(xiàn) Serializable 接口。
Transient 關(guān)鍵字阻止該變量被序列化到文件中
1. 在變量聲明前加上 Transient 關(guān)鍵字,可以阻止該變量被序列化到文件中,在被反序列化后,transient 變量的值被設(shè)為初始值,如 int 型的是 0,對(duì)象型的是 null。
2. 服務(wù)器端給客戶端發(fā)送序列化對(duì)象數(shù)據(jù),對(duì)象中有一些數(shù)據(jù)是敏感的,比如密碼字符串等,希望對(duì)該密碼字段在序列化時(shí),進(jìn)行加密,而客戶端如果擁有解密的密鑰,只有在客戶端進(jìn)行反序列化時(shí),才可以對(duì)密碼進(jìn)行讀取,這樣可以一定程度保證序列化對(duì)象的數(shù)據(jù)安全。
五. JAVA 復(fù)制
將一個(gè)對(duì)象的引用復(fù)制給另外一個(gè)對(duì)象,一共有三種方式。第一種方式是直接賦值,第二種方式是淺拷貝,第三種是深拷貝。所以大家知道了哈,這三種概念實(shí)際上都是為了拷貝對(duì)象。
1. 直接賦值復(fù)制
直接賦值。在 Java 中,A a1 = a2,我們需要理解的是這實(shí)際上復(fù)制的是引用,也就是說 a1 和 a2 指向的是同一個(gè)對(duì)象。因此,當(dāng) a1 變化的時(shí)候,a2 里面的成員變量也會(huì)跟著變化。
2. 淺復(fù)制(復(fù)制引用但不復(fù)制引用的對(duì)象)
創(chuàng)建一個(gè)新對(duì)象,然后將當(dāng)前對(duì)象的非靜態(tài)字段復(fù)制到該新對(duì)象,如果字段是值類型的,那么對(duì)該字段執(zhí)行復(fù)制;如果該字段是引用類型的話,則復(fù)制引用但不復(fù)制引用的對(duì)象。因此,原始對(duì)象及其副本引用同一個(gè)對(duì)象。
3. 深復(fù)制(復(fù)制對(duì)象和其應(yīng)用對(duì)象)
深拷貝不僅復(fù)制對(duì)象本身,而且復(fù)制對(duì)象包含的引用指向的所有對(duì)象。
4. 序列化(深 clone 一中實(shí)現(xiàn))
在 Java 語言里深復(fù)制一個(gè)對(duì)象,常??梢韵仁箤?duì)象實(shí)現(xiàn) Serializable 接口,然后把對(duì)象(實(shí)際上只是對(duì)象的一個(gè)拷貝)寫到一個(gè)流里,再從流里讀出來,便可以重建對(duì)象。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。