DAY17復習
1 單元測驗方法
它是Java運行程式的最小單位
格式:@Test + public + void + 沒有引數
新手小白JUnit 使用手冊
2. 反射
2.1 反射的概念:
當我們想要使用別人的東西或者查看某些資源的時候,可以使用反射技術
再比如,開發的時候,有時并不能直接看到源代碼,也可以通過反射獲取
2.2 反射的前提:獲取位元組碼物件
位元組碼物件獲取的3種方式:
- 類名.class
- Class.forName(“目標類的全路徑”)
- 目標類物件.getClass()
注意: 位元組碼物件是獲取目標物件所有資訊的入口
2.3 反射的常用方法
獲取包物件:clazz.getPackage()
先獲取包物件,再獲取包物件的名字:clazz.getPackage().getName()
獲取類名:
clazz.getName()–列印的是全路徑名
clazz.getSimpleName()–列印的只有目標類的類名
3.注解
3.1 JDK自帶的注解(5個)
要求大家掌握的是@Override注解,這個注解可以加在方法上,用來表示這是一個重寫的方法
3.2 元注解5個
元注解是用來定義其他注解的注解,也就是說,注解的語法與JAVA不同,是靠注解來定義的
1. 定義注解的格式:@interface 注解名
2. 可以根據元注解對注解進行設定:
要求大家掌握的是
表示被描述的注解可以使用的位置:值可以多選
@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
表示被描述的注解的宣告周期:注意值只能3選1
@Retention(RentionPolicy.RUNTIME/SOURCE/CLASS)
3.3 自定義注解
1. 我們也可以根據自己的需求來定義個性化的注解
使用的是@interface 注解名來定義的,主要使用的就是上面的兩個元注解
2. 除此之外,我們還可以給注解加功能,比如注解的屬性:
格式:屬性型別 屬性名(); 比如:int age();
注意:定義了注解的普通屬性以后,使用注解時必須給屬性賦值,格式:@Rice(age=10)
如果給屬性設定了默認值,那么使用注解時就不需要給屬性賦值了,格式:int age() default 0;
3.我們還可以給注解添加特殊的屬性value,注意這個屬性名字必須是value,型別不作限制
注意:特殊屬性如果不設定默認值,使用注解時也需要賦值,不過賦值可以簡寫,比如@Rice("apple")
特殊屬性賦予默認值后,就可以直接使用注解了,賦予默認值的格式:String value() default "apple";
注意:如果有多個屬性,并且都沒有賦予默認值,那么使用注解時的格式:@Rice(value="apple",age=10)
4. 設計模式
- 概念:是一些前人總結出來的值得學習的編程“套路”,設計模式一共有23種
- 單例設計模式:確保代碼中本類的實體只有一個
- 實作思路:
方案一:餓漢式
1)把本類的構造方法私有化–為了不讓外界呼叫建構式來創建物件
2)通過本類的構造方法創建物件,并把這個物件也私有化,為了防止外界呼叫
3)提供一個公共且靜態的方法,回傳剛剛創建好的物件
注意:公共方法需要設定成靜態–需要跳過物件,通過類名直接呼叫這個回傳本類物件的公共方法
物件也需要設定成靜態的–這個物件需要在靜態方法中被回傳,而靜態只能呼叫靜態
方案二:懶漢式
==延遲加載的思想:==我們有的時候有些資源并不是需要第一時間就創建出來,所以需要延遲到需要時再創建,這樣既可以提升性能,又可以節省資源
1)把本類的構造方法私有化–為了不讓外界呼叫建構式來創建物件
2)創建了一個本型別別的參考型別變數【這個變數后續用來保存創建出來的物件的地址值】
3)提供一個公共且靜態的方法,回傳剛剛創建好的物件
注意:這個公共的方法里,需要做判斷
如果變數的值為初始值null:說明之前沒有創建過物件,創建物件后再將物件的地址值賦值給參考型別變數,并把它回傳
如果參考型別的變數值不為null,說明:之前已經創建過物件了,這個參考型別變數保存就是地址值,本次不再新建物件,直接回傳
注意:由于有共享資料,并且多條陳述句操作這個single2,所以注意同步
這個只是一個開始,遠遠沒有結束,大家還可以繼續拓展:裝飾者 建造者 工廠
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/339144.html
標籤:java
