#Zeroから始めるJava#Java學(xué)習(xí)筆記(2020/2/20)

一斥季、Junit單元測試

導(dǎo)入Junit依賴后,可以自定義測試類午笛,在方法前加上:
@Test
那么可以單獨執(zhí)行這個方法李丰。

斷言:Assert.assertEquals(期望的結(jié)果,運算的結(jié)果);
常常使用斷言來判斷是否與期望的結(jié)果一致

@Before:
修飾的方法會在測試方法之前被自動執(zhí)行
@After:
修飾的方法會在測試方法執(zhí)行之后自動被執(zhí)行

二苦锨、反射

將類的各個部分,封裝成一個個的對象趴泌,就是反射
類對象未被new創(chuàng)建前舟舒,會被Class類保存在內(nèi)存中。

類對象階段

Java文件的三個階段:source階段嗜憔,class階段秃励,runtime階段

  • 獲取Class對象的方式:
    1. Class.forName("全類名"):將字節(jié)碼文件加載進內(nèi)存,返回Class對象
    多用于配置文件吉捶,將類名定義在配置文件中夺鲜。讀取文件,加載類
    2. 類名.class:通過類名的屬性class獲取
    多用于參數(shù)的傳遞
    3. 對象.getClass():getClass()方法在Object類中定義著呐舔。
    多用于對象的獲取字節(jié)碼的方式
    \color{red}{注意點:}
    \color{red}{同一個字節(jié)碼文件(*.class)在一次程序運行過程中}
    \color{red}{币励,只會被加載一次,不論通過哪一種方式獲取的Class對象都是同一個珊拼。}

三食呻、反射訪問非public的部分

Field類、Constructor類澎现、Method類都有setAccessible(true)方法,可以讓忽略訪問權(quán)限的檢查仅胞,這樣就能訪問非public的部分了

Class類中的方法可以來獲取Field類、Constructor類昔头、Method類的對象

            1. 獲取成員變量們
                Field[] getFields() :獲取所有public修飾的成員變量
                Field getField(String name)   獲取指定名稱的 public修飾的成員變量

                Field[] getDeclaredFields()  獲取所有的成員變量饼问,不考慮修飾符
                Field getDeclaredField(String name)  
            2. 獲取構(gòu)造方法們
                Constructor<?>[] getConstructors()  
                Constructor<T> getConstructor(類<?>... parameterTypes)  

                Constructor<T> getDeclaredConstructor(類<?>... parameterTypes)  
                Constructor<?>[] getDeclaredConstructors()  
            3. 獲取成員方法們:
                Method[] getMethods()  
                Method getMethod(String name, 類<?>... parameterTypes)  

                Method[] getDeclaredMethods()  
                Method getDeclaredMethod(String name, 類<?>... parameterTypes)  

            4. 獲取全類名    
                String getName()  

Field類可以來設(shè)置成員變量

            1. 設(shè)置值
                void set(Object obj, Object value)  
            2. 獲取值
                get(Object obj) 
            3. 忽略訪問權(quán)限修飾符的安全檢查
                setAccessible(true):暴力反射

Constructor類可以來新建對象

Constructor:構(gòu)造方法
         創(chuàng)建對象:
            T newInstance(Object... initargs)  
                        
            如果使用空參數(shù)構(gòu)造方法創(chuàng)建對象,操作可以簡化:Class對象的newInstance方法

Method類可以來執(zhí)行方法

        執(zhí)行方法:
            Object invoke(Object obj, Object... args)  

        獲取方法名稱:
            String getName:獲取方法名

使用反射的好處揭斧,可以僅僅修改配置文件執(zhí)行不同類中的不同方法,而不用修改類文件峻堰。

四讹开、注解

比如像是@Override就是一個注解
注解的作用:
①編寫文檔:通過代碼里標(biāo)識的注解生成文檔(Javadoc)
【生成文檔doc文檔】
②代碼分析:通過代碼里標(biāo)識的注解對代碼進行分析
【使用反射】
③編譯檢查:通過代碼里標(biāo)識的注解讓編譯器能夠?qū)崿F(xiàn)基本的編譯檢查【Override】

JDK內(nèi)置的注解:
@Deprecated
可以標(biāo)記方法已經(jīng)過時了,但是還是可以使用捐名。

image.png

@Override
判斷是不是重寫了父類的方法

自定義注解
格式:
元注解:用來解釋注解的注解
public @interface 注解名稱{
屬性列表;
}

元注解:用于描述注解的注解
@Target:描述注解能夠作用的位置
ElementType取值:
TYPE:可以作用于類上
METHOD:可以作用于方法上
FIELD:可以作用于成員變量上

@Retention:描述注解被保留的階段
@Retention(RetentionPolicy.RUNTIME):當(dāng)前被描述的注解旦万,會保留到class字節(jié)碼文件中,并被JVM讀取到
@Documented:描述注解是否被抽取到api文檔中
@Inherited:描述注解是否被子類繼承

image.png

本質(zhì):注解本質(zhì)上就是一個接口镶蹋,該接口默認繼承Annotation接口
public interface MyAnno extends java.lang.annotation.Annotation {}
屬性的數(shù)據(jù)類型:
基本數(shù)據(jù)類型
String
枚舉
注解
以上類型的數(shù)組

使用注解的方式加載配置文件信息

* 在程序使用(解析)注解:獲取注解中定義的屬性值
    1. 獲取注解定義的位置的對象  (Class成艘,Method,Field)
    2. 獲取指定的注解
         getAnnotation(Class)
        //其實就是在內(nèi)存中生成了一個該注解接口的子類實現(xiàn)對象

                public class ProImpl implements Pro{
                    public String className(){
                        return "cn.itcast.annotation.Demo1";
                    }
                    public String methodName(){
                        return "show";
                    }
                }
    3. 調(diào)用注解中的抽象方法獲取配置的屬性值

關(guān)于注解
1. 以后大多數(shù)時候赏半,我們會使用注解,而不是自定義注解
2. 注解給誰用淆两?
①. 編譯器
②.給解析程序用
3. 注解不是程序的一部分断箫,可以理解為注解就是一個標(biāo)簽

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市秋冰,隨后出現(xiàn)的幾起案子仲义,更是在濱河造成了極大的恐慌,老刑警劉巖剑勾,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埃撵,死亡現(xiàn)場離奇詭異,居然都是意外死亡虽另,警方通過查閱死者的電腦和手機暂刘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捂刺,“玉大人谣拣,你說我怎么就攤上這事〉迹” “怎么了芝发?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長苛谷。 經(jīng)常有香客問我辅鲸,道長,這世上最難降的妖魔是什么腹殿? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任独悴,我火速辦了婚禮,結(jié)果婚禮上锣尉,老公的妹妹穿的比我還像新娘刻炒。我一直安慰自己,他們只是感情好自沧,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布坟奥。 她就那樣靜靜地躺著,像睡著了一般拇厢。 火紅的嫁衣襯著肌膚如雪爱谁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天孝偎,我揣著相機與錄音访敌,去河邊找鬼。 笑死衣盾,一個胖子當(dāng)著我的面吹牛寺旺,可吹牛的內(nèi)容都是我干的爷抓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼阻塑,長吁一口氣:“原來是場噩夢啊……” “哼蓝撇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叮姑,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤唉地,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后传透,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耘沼,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年朱盐,在試婚紗的時候發(fā)現(xiàn)自己被綠了群嗤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡兵琳,死狀恐怖狂秘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情躯肌,我是刑警寧澤者春,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站清女,受9級特大地震影響钱烟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嫡丙,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一拴袭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧曙博,春花似錦拥刻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惠窄,卻和暖如春逝她,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背睬捶。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留近刘,地道東北人擒贸。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓臀晃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親介劫。 傳聞我的和親對象是個殘疾皇子徽惋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容