摘要:注解之后新特性對元素進(jìn)行說明包類字段方法局部變量,方法參數(shù)注解與注釋的區(qū)別注解用特定格式名稱說明程序,給計算機(jī)看的注釋用文字說明程序,給程序員看的作用分類編寫文檔的注解生成文檔寫在注釋中代碼分析的注解對代碼進(jìn)行分析反射編譯檢查的注解進(jìn)行編譯
注解
1、JDK 1.5之后新特性
2、對元素進(jìn)行說明(包、類、字段、方法、局部變量,方法參數(shù))
注解與注釋的區(qū)別
注解:用特定格式名稱說明程序,給計算機(jī)看的 注釋: 用文字說明程序,給程序員看的
作用分類
1、編寫文檔的注解:生成Apidoc文檔(寫在注釋中) 2、代碼分析的注解:對代碼進(jìn)行分析(反射) 3、編譯檢查的注解:進(jìn)行編譯檢查(@override)
注解使用格式
@注解名稱 編寫文檔:@since、@author、@version、@param、@return 一般都是JDK內(nèi)置的,無法自定義 編譯檢查:@override 一般都是JDK內(nèi)置的,無法自定義
JDK內(nèi)置注解
@override 檢查標(biāo)注的方法是否是父類(接口)的方法 @Deprecated 標(biāo)注過時 @SuppressWarnings 抑制警告提示,一般用法@SuppressWarnings("all")
自定義注解 —— 格式
元注解 public @interface 注解名稱{ 屬性列表; }
自定義注解 —— 本質(zhì)
自定義注解 本質(zhì)上就是一個接口,默認(rèn)繼承Annotation接口,所謂屬性列表就是抽象方法
自定義注解 —— 屬性返回值的數(shù)據(jù)類型
基本數(shù)據(jù)類型 String 注解 枚舉 以上類型的數(shù)組 @MyAnno(value=12,per=Sex.MAN,anno=@person,name="wt")
自定義注解 —— 在使用時屬性賦值
1、定義屬性默認(rèn)值,使用關(guān)鍵字default,使用注解時,可以不用屬性賦值 2、如果注解中只定義到一個屬性,而且屬性名為value,則value可以省略 3、屬性的數(shù)據(jù)類型為數(shù)組時,值使用{}包裹,如果數(shù)組中只有一個值,則{}可以省略
自定義注解 —— 元注解
元注解:用于描述注解的注解,JDK內(nèi)置 @Target:描述注解作用的位置 @Retention: 描述注解被保留到哪個階段 @Documented:描述注解是否被提取到api文檔中 @Inherited:描述注解是否被子類繼承
@Target
ElementType取值: TYPE:可以作用于類上 METHOD:可以作用于方法上 FIELD:可以作用于成員屬性上
@Retention
SOURCE:編譯檢測 CLASS:注解會保留到class字節(jié)碼中,不被JVM讀取 RUNTIME:注解會保留到class字節(jié)碼中,被JVM讀取
自定義注解 —— 解析
//不使用注解 //1、加載配置文件 //創(chuàng)建Properties對象 Properties pro = new Properties(); //加載配置文件,轉(zhuǎn)化為一個流 //獲取classes目錄下的配置文件 ClassLoader classLoader = Person.class.getClassLoader(); InputStream is = classLoader.getResourceAsStream("pro.properties"); pro.load(is); //2、獲取配置文件中數(shù)據(jù) String className = pro.getProperty("className"); String methodName = pro.getProperty("methodName");
//1、獲取字節(jié)碼文件對象 Classp = Person.class; Pro an = p.getAnnotation(Pro.class); //2、獲取配置文件中數(shù)據(jù) String className = an.className(); String methodName = an.methodName();
//使用注解 Person p = new Person(); //1、獲取字節(jié)碼文件對象 Class cls = p.getClass(); //2、獲取所有方法 Method[] methods = cls.getMethods(); //3、判斷方法上是否有注解 for(Method method : methods){ if(method.isAnnotationPresent(Check.class)){ try{ mothed.invoke(p) } catch(Exception e) { } } }泛型
是一種未知的數(shù)據(jù)類型,當(dāng)我們定義時不知使用什么數(shù)據(jù)類型,就可以使用泛型
E e:Element 元素 (這只是語義化定義,你隨便定義字母都可以,A/B/C/D...,除問號)
T t:Type 類型 (這只是語義化定義,你隨便定義字母都可以,A/B/C/D...,除問號)
集合大量使用泛型
作用
靈活地將數(shù)據(jù)類型應(yīng)用到不同的類、方法、接口中去,將數(shù)據(jù)類型作為參數(shù)進(jìn)行傳遞 對于集合來說 1、無需再轉(zhuǎn)數(shù)據(jù)類型 2、運(yùn)行期的異常提前到編譯期 3、集合存儲數(shù)據(jù)類型受到限制
定義
// 定義一個含有泛型的類 public class GenericClass{ private E name; public E getName(){ return this.name; } public void setName(E name){ this.name = name; } } // 定義一個含有泛型的方法 public static E test(E e){ return e; } public E test(E e){ return e; } // 定義一個帶有泛型的接口 public interface GenericClass { public abstract void test(E e); }
使用
使用時才確定數(shù)據(jù)類型,如果不指定,默認(rèn)就是Object類型
// 含有泛型的類使用 GenericClassgc = new GenericClass (); String name = gc.getName(); // 含有泛型的方法使用(調(diào)用方法的時候才確定數(shù)據(jù)類型) GenericClass.test("123"); // 含有泛型的接口使用(有2種方法) 1、繼承時確定類型 public class GernericClassImpl implements GenericClass { public String test(String e){ return e; } } 2、創(chuàng)建對象時確定類型 public class GernericClassImpl implements GenericClass { public E test(E e){ return e; } } GernericClassImpl gc = new GernericClassImpl ();
通配符
通配符> (與、 要區(qū)分)
用途: 1、不能用于定義類、接口,不能用于創(chuàng)建對象 2、只能用于方法傳參和方法返回值 Listlist1 = new ArrayList (); List list2 = new ArrayList (); public void test(List> list){ Iterator> it = list.iterator(); while(it.hasNext()){ Object ob = it.next(); // 由于傳入的類型要調(diào)用方法才能確定所以獲取的都是Object類型 System.out.println(ob); } } public List> test(){}
高級使用: 泛型的上限限定(子類及本身) : extends Class> 泛型的下限限定(父類及本身) : super String>JUnit單元測試
測試分為 黑盒測試 和 白盒測試,JUnit 屬于 白盒測試
以前測試做法
創(chuàng)建2個類文件: 一個是業(yè)務(wù)類UserService 另一個是業(yè)務(wù)類對應(yīng)的測試類UserServiceTest 測試類UserServiceTest主要使用main方法進(jìn)行測試,由于一個類中只存在一個main方法,所以如果你要測試多個方法,測試很繁瑣
JUnit單元測試做法
步驟: 1、定義一個測試類(測試用例) 建議: 測試類包名(類的包名.test) 測試類名(類名+Test) 2、定義一個測試方法 測試方法名(test+被測試的方法名,例如:testAdd) 測試方法返回值(void) 測試方法傳參(空) 3、給方法增加@Test 4、添加預(yù)言(建議不要使用打印控制臺system.out.println)
補(bǔ)充
@Before : 修飾的方法會在測試方法之前會被自動執(zhí)行,一般用于資源的申請 @After : 修飾的方法會在測試方法之后會被自動執(zhí)行,一般用于資源的釋放枚舉
枚舉 和 類、接口 同級,其實(shí)枚舉也是一個類,只是該類的對象給限定了(定義在第一行)
枚舉是JDK1.5帶來的新特性
作用
讓一個類的對象是有限且固定,例如性別:不是男就是女
定義枚舉
public enum Sex{ MALE,FEMALE; } public enum Sex { MALE("男"),FEMALE("女"); private final String name; private Sex(String name){ this.name = name; } public String getName() { return name; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/71579.html
摘要:下一代服務(wù)端開發(fā)下一代服務(wù)端開發(fā)第部門快速開始第章快速開始環(huán)境準(zhǔn)備,,快速上手實(shí)現(xiàn)一個第章企業(yè)級服務(wù)開發(fā)從到語言的缺點(diǎn)發(fā)展歷程的缺點(diǎn)為什么是產(chǎn)生的背景解決了哪些問題為什么是的發(fā)展歷程容器的配置地獄是什么從到下一代企業(yè)級服務(wù)開發(fā)在移動開發(fā)領(lǐng)域 《 Kotlin + Spring Boot : 下一代 Java 服務(wù)端開發(fā) 》 Kotlin + Spring Boot : 下一代 Java...
摘要:第章元編程與注解反射反射是在運(yùn)行時獲取類的函數(shù)方法屬性父類接口注解元數(shù)據(jù)泛型信息等類的內(nèi)部信息的機(jī)制。本章介紹中的注解與反射編程的相關(guān)內(nèi)容。元編程本質(zhì)上是一種對源代碼本身進(jìn)行高層次抽象的編碼技術(shù)。反射是促進(jìn)元編程的一種很有價值的語言特性。 第12章 元編程與注解、反射 反射(Reflection)是在運(yùn)行時獲取類的函數(shù)(方法)、屬性、父類、接口、注解元數(shù)據(jù)、泛型信息等類的內(nèi)部信息的機(jī)...
摘要:結(jié)構(gòu)型模式適配器模式橋接模式裝飾模式組合模式外觀模式享元模式代理模式。行為型模式模版方法模式命令模式迭代器模式觀察者模式中介者模式備忘錄模式解釋器模式模式狀態(tài)模式策略模式職責(zé)鏈模式責(zé)任鏈模式訪問者模式。 主要版本 更新時間 備注 v1.0 2015-08-01 首次發(fā)布 v1.1 2018-03-12 增加新技術(shù)知識、完善知識體系 v2.0 2019-02-19 結(jié)構(gòu)...
摘要:對象的自動清除對象回收是由垃圾回收線程負(fù)責(zé)方法可以要求系統(tǒng)進(jìn)行垃圾回收,僅僅是建議系統(tǒng)沒有析構(gòu)方法,但的有類似方法系統(tǒng)在回收時會自動調(diào)用對象的方法子類的方法可以在里面釋放系統(tǒng)資源,一般來說,子類的方法中應(yīng)該調(diào)用父類的方法。 對象的自動清除 對象回收是由垃圾回收線程負(fù)責(zé) System.gc()方法可以要求系統(tǒng)進(jìn)行垃圾回收,僅僅是建議系統(tǒng) java沒有析構(gòu)方法,但Object的final...
摘要:指定該策略的注解只能修飾成員變量。也可以在定義注解的成員變量時為其指定初始值,指定默認(rèn)值。根據(jù)注解是否可以包含成員變量,可以把注解分為標(biāo)記注解沒有定義成員變量的注解類型被稱為標(biāo)記。 @Override 是告訴編譯器檢查這個方法,保證父類要包含一個被該方法重寫的方法,否則編譯出錯。 只能修飾方法,不能修飾其他程序元素 。 Java 9 增強(qiáng)的@Deprecated 表示某個程...
閱讀 2645·2021-09-13 10:26
閱讀 1907·2021-09-03 10:28
閱讀 1977·2019-08-30 15:44
閱讀 794·2019-08-29 14:07
閱讀 386·2019-08-29 13:12
閱讀 2144·2019-08-26 11:44
閱讀 2337·2019-08-26 11:36
閱讀 2003·2019-08-26 10:19