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