在上一篇中說到了Java的四大特性瘟忱,里面出現(xiàn)了很多名次蚀狰,包括以后學(xué)習(xí)Java中也會出現(xiàn)很多常用到的名次,對初學(xué)者來說可能不知道是什么意思薄疚,或者是對這些刺耳的理解不是特別透徹碧信,這里我就我自己的理解來解釋下這些詞的意思。
包
在Java中常說某個(gè)包下面的某個(gè)類街夭。那么什么是包呢砰碴?在平時(shí)操作電腦時(shí),我們常江某個(gè)文檔板丽,視頻呈枉,音頻等問價(jià)放在某個(gè)文件夾下,而這個(gè)文件夾在Java中就就叫做包檐什。其實(shí)飽和文件夾在某種意義上來說是等同的,只是在Java中將其叫做包而不叫做文件夾弱卡。
類
放在包下面的一個(gè)個(gè)并且是以.java結(jié)尾的文件就是類乃正。前面有說道對想是Java程序的核心,而類描述了對象的屬性和對象的行為婶博,類是對象模板【類是對對象的抽象瓮具,對象是對類的實(shí)例化】
類按類型分為普通類,抽象類凡人,接口名党,嵌套類等。按層級分又分為父類和子類
普通類
【訪問修飾符】 class 類名 【implements/extends? 類名】{? }挠轴,其中有一種特殊的類object類传睹,object類是所有類的父類,如果一個(gè)類沒有用extends明確指出繼承于某個(gè)類岸晦,那么它默認(rèn)繼承Object類欧啤。
抽象類
當(dāng)一個(gè)類中沒有足夠的信息描述一個(gè)具體的書屋時(shí),這個(gè)類就是抽象類启上。
語法:【訪問修飾符】 abstract class 類名{? ?}
特點(diǎn):
1邢隧、抽象類不能實(shí)例化
2、抽象類可以擁有構(gòu)造方法
3冈在、抽象類可以聲明實(shí)例變量倒慧,也可以聲明靜態(tài)變量,也可以存在普通方法和靜態(tài)方法,變量在抽象類中可以初始化
4纫谅、抽象類中還可以有抽象方法? 語法:【訪問修飾符】 abstract 返回值類型? 方法名? (【參數(shù)】)炫贤;
5、抽象類抽象方法系宜,有抽象類的子類來實(shí)現(xiàn)
6照激、如果一個(gè)類是抽象類,那么這個(gè)類的不一定有抽象方法盹牧,但如果一個(gè)類有抽象方法俩垃,那么這個(gè)類一定是抽象類
7、如果抽象類的子類沒有吧抽象類中的所有抽象方法實(shí)現(xiàn)汰寓,則子類也需要定義成抽象類口柳,有子類的子類負(fù)責(zé)實(shí)現(xiàn)剩余的抽象方法。
8有滑、普通方法在子類中與普通類一樣跃闹,可以實(shí)現(xiàn)也可以不實(shí)現(xiàn)
接口
就是對外提供了一系列功能的生命(也可以說接口中定義的方法只有方法的生命,沒有方法體)
語法:【訪問修飾符】 interface 接口名? {
//常量和方法的聲明
}
1publicinterface? demo{2inti=0;3publicvoid? add() ;? ? ? ? 4}
特點(diǎn):
1毛好、接口中聲明的方法沒有方法體望艺,只有方法的聲明
2、接口中聲明的成員屬性都是靜態(tài)的而且都是不可變的肌访,因?yàn)榻涌谥械某蓡T屬性默認(rèn)都是public? static? final 來修飾的
3找默、接口沒有構(gòu)造方法,也不能被實(shí)例化
4吼驶、接口可以實(shí)現(xiàn)多繼承惩激,接口之間用逗號隔開
5、接口中的方法只能被public來修飾蟹演,就算沒有明確的神明訪問修飾符风钻,默認(rèn)也是public
通過implements來實(shí)現(xiàn)接口,語法:
【訪問修飾符】 class? 類名? implements? 接口1酒请,接口2{? ?}
嵌套類
聲明在類的內(nèi)部的類稱之為嵌套類
語法:【訪問修飾符】 class 類名{
【訪問修飾符】【static】 class? 類名{
}
}
分類:內(nèi)部類:非靜態(tài)嵌套類
靜態(tài)嵌套類:用static修飾的嵌套類
內(nèi)部類:內(nèi)部類作為外部類的一個(gè)成員存在骡技,與外部類的成員變量,成員方法并列
局部內(nèi)部類:在方法體內(nèi)聲明的類羞反,可以訪問他所在方法中的final參數(shù)和final局部變量
靜態(tài)嵌套類中可聲明static成員或非靜態(tài)成員變量哮兰,但只能訪問外部類中的靜態(tài)成員
方法
方法就是實(shí)現(xiàn)某個(gè)功能的代碼塊
方法的定義語法:
1、無返回值無參數(shù)的方法? 【訪問修飾符】 void? 方法名(){ //方法的功能代碼?}
說明:void就是表示該方法是無返回值得(也就是說調(diào)用完該方法不會返回一個(gè)結(jié)果)
2苟弛、無返回值有參數(shù)的方法? ? 【訪問修飾符】? void? 方法名(數(shù)據(jù)類型? ?參數(shù)名喝滞,...){//方法的功能代碼}
說明:方法中的參數(shù)又稱為形參(形式意義的參數(shù)),調(diào)用該方法時(shí)傳遞的數(shù)據(jù)稱為實(shí)參(實(shí)際的數(shù)據(jù))膏秫,傳遞的參數(shù)要和方法中的參數(shù)類型匹配
3右遭、有返回值無參數(shù)的方法? ?【訪問修飾符】? 返回值類型? ?方法名稱(){? ?return? ?返回值做盅;? }
說明:1、返回值類型有放回值來決定
? ? ? ? ? ? 2窘哈、在由返回值得方法的最后一句代碼吹榴,一定是? return? 返回值;滚婉。
4图筹、有返回值有參數(shù)的方法? ? 【訪問修飾符】? 返回值類型? 方法名(參數(shù)列表){? return? ?返回值}
變量
定義:在Java中用來存儲數(shù)據(jù)的元素,而且該元素所存放的數(shù)據(jù)時(shí)可以變化的让腹,所以稱為變量
注意:變量也是標(biāo)識符的一部分
語法:1远剩、變身名變賦值? ?數(shù)據(jù)類型? ?變量名稱=變量值
? ? ?2、先聲明后賦值? 數(shù)據(jù)類型? 變量名稱骇窍;變量名稱=變量值瓜晤;
定義變量的四個(gè)步驟:
1、聲明數(shù)據(jù)類型其實(shí)就是為了根據(jù)數(shù)據(jù)類型開辟相應(yīng)的內(nèi)存空間
2腹纳、給變量命名痢掠,其實(shí)就會說為了能夠把變量名和數(shù)據(jù)類型所對應(yīng)的內(nèi)存空間進(jìn)行關(guān)聯(lián)
3、給變量賦值嘲恍,其實(shí)就是把數(shù)據(jù)存放到變量名所對應(yīng)的內(nèi)存空間
4足画、使用變量,其實(shí)就是把變量所對應(yīng)的內(nèi)存空間中的數(shù)據(jù)讀取出來
常量
定義:在程序中他的值是不可變的佃牛,這樣的冤死及時(shí)常量
語法:final? 數(shù)據(jù)類型? 常量名稱=常量值淹辞;
建議:常量名稱一般全部大寫
標(biāo)識符
標(biāo)識符就是類名,方法名吁脱,參數(shù)名桑涎,包名等元素命名時(shí)彬向,所寫的字符序列就統(tǒng)稱為標(biāo)識符
標(biāo)識符的命名規(guī)則:
1兼贡、有字幕,數(shù)字娃胆,下劃線遍希,和$組成
2、不能以數(shù)字開頭
3里烦、嚴(yán)格區(qū)分大小寫
4凿蒜、長度無限制
5、不能是Java的關(guān)鍵字和保留關(guān)鍵字
建議:見名知意
訪問修飾符
在定義類胁黑、屬性废封、方法時(shí)都需要指定訪問修飾符,以此來限定類丧蘸、屬性漂洋、方法的可訪問范圍。Java中的訪問修飾符有以下幾個(gè)關(guān)鍵字:
public:公共。該類或非該類均可訪問
private:私有的刽漂。只有在類的主體中才可以訪問演训。只能修飾屬性和方法,不能修飾類
protected:受保護(hù)贝咙。該類及子類的成員均可以訪問样悟,同一個(gè)包中的類也可以訪問。只能修飾屬性和方法庭猩,不能修飾類
默認(rèn):不使用修飾符论皆。只有相同包中的類才可以訪問
位置private默認(rèn)protectedpublic
同一個(gè)類是是是是
同一個(gè)包內(nèi)的類否是是是
不同保內(nèi)的類否否是是
不同包內(nèi)不同類否否否 是
關(guān)鍵字
在Java中被賦予了一定特殊意義和用途的單詞
保留關(guān)鍵字也是關(guān)鍵字阿浓,只是目前沒有任何的特殊意義和用途,保留使用。
this關(guān)鍵字
使用范圍:this關(guān)鍵字只能使用在沒有被static關(guān)鍵字修飾的方法中
作用:this關(guān)鍵字就會說對當(dāng)類某個(gè)對象的引用(簡單來說就是可以把this看做當(dāng)前類的一個(gè)對象丈挟,哪個(gè)對象調(diào)用當(dāng)前的方法,this關(guān)鍵字就指向該對象)
【當(dāng)局部變量和成員變量完全一致時(shí)伊约,以局部變量為主田绑,即就近原則】
用法:
1、當(dāng)方法中的參數(shù)名或變量名和成員變量完全一致時(shí)于样,可以通過this關(guān)鍵字來區(qū)分作用域
2疏叨、當(dāng)this關(guān)鍵字以this(參數(shù)列表)的形式,出現(xiàn)在構(gòu)造方法的第一句時(shí)穿剖,就表示當(dāng)前構(gòu)造方法調(diào)用了該類中其他的構(gòu)造方法蚤蔓。
final關(guān)鍵字
1、final修飾的變量等同于常量糊余,一旦賦值就無法更改(是指引用變量不能變秀又,引用變量所指向的對象的內(nèi)容還是可以改變的)
【final無論修飾全局變量還是局部變量,在定義時(shí)都必修要初始化才能使用】
2贬芥、final修飾方法中的參數(shù)稱為最終參數(shù)吐辙,在方法體中同樣也不能為最終參數(shù)重新賦值
3、final修飾類蘸劈,該類不能被繼承
4昏苏、final修飾的方法,不能被重寫
staitic關(guān)鍵字
static可以修飾變量威沫,方法贤惯,代碼塊
static修飾變量,也稱為類變量棒掠,因?yàn)閟tatic關(guān)鍵字修飾的變量孵构,方法,代碼塊都屬于類烟很,而不屬于某個(gè)對象
【實(shí)例變量:沒有被static修飾的成員屬性或方法都屬于某個(gè)對象颈墅,也叫做實(shí)例屬性或?qū)嵗椒ò艏伲瑢ο蟠嬖诹耍艜袑?shí)例變量開辟空間】
static修飾的屬相精盅、方法可以通過:類名.屬性名或l類名.方法(參數(shù))的形式來調(diào)用
特點(diǎn):
1帽哑、靜態(tài)方法中只能訪問靜態(tài)方法和靜態(tài)的成員變量
2、在非靜態(tài)方法中叹俏,既可以訪問非靜態(tài)的方法妻枕、屬性,也可以訪問靜態(tài)屬性和靜態(tài)方法
3粘驰、在靜態(tài)方法中不能使用this和supper關(guān)鍵字屡谐,因?yàn)閠his和supper表示對對象的引用,而static修飾的方法是屬于類蝌数,所以在語法上存在一定的沖突
靜態(tài)代碼塊:靜態(tài)代碼塊只能出現(xiàn)在類的內(nèi)部愕掏,任何方法的外部
靜態(tài)代碼塊語法:static{? ?}
靜態(tài)代碼塊作用:就是給靜態(tài)的成員屬性進(jìn)行初始化
靜態(tài)代碼塊的優(yōu)先級比構(gòu)造方法的優(yōu)先級高
方法中參數(shù)的傳遞
在Java中無論是基本數(shù)據(jù)類型還是引用數(shù)據(jù)類型,在進(jìn)行參數(shù)的傳遞時(shí)顶伞,都是采用的值傳遞(也就是傳遞的都是具體的數(shù)據(jù))
基本數(shù)據(jù)類型在進(jìn)行參數(shù)傳遞時(shí)饵撑,傳遞的值是副本,也就是說當(dāng)把當(dāng)前數(shù)據(jù)復(fù)制一份唆貌,然后再進(jìn)行穿絲滑潘,所以目標(biāo)方法中,對參數(shù)進(jìn)行修改锨咙,這個(gè)值得本身是沒有任何變化的
引用數(shù)據(jù)類型字進(jìn)行參數(shù)的傳遞時(shí)语卤,傳遞的是數(shù)據(jù)所在的內(nèi)存地址,所以在目標(biāo)方法中酪刀,對參數(shù)進(jìn)行修改粹舵,這個(gè)值本身也會發(fā)生相應(yīng)的變化
向上轉(zhuǎn)型和向下轉(zhuǎn)型
向上轉(zhuǎn)型:把一個(gè)子類的對象,賦值給父類骂倘,就會把該對象當(dāng)做父類對象來用
動態(tài)(延遲)綁定機(jī)制:在程序運(yùn)行期間眼滤,會根據(jù)對象的真正的創(chuàng)建者來決定調(diào)用那個(gè)方法
發(fā)生動態(tài)綁定機(jī)制的條件:1、繼承? 2稠茂、重寫? ?3柠偶、向上轉(zhuǎn)型? 4情妖、用向上轉(zhuǎn)型的對象調(diào)用被子類重寫的方法
向下轉(zhuǎn)型:把一個(gè)父類對象睬关,復(fù)制給某個(gè)子類,需要加上強(qiáng)制轉(zhuǎn)換符
向下轉(zhuǎn)型一定是在向上轉(zhuǎn)型的基礎(chǔ)上類型的還原
向下轉(zhuǎn)型調(diào)用子類中的沒有重寫的方法
可以通過instanceof關(guān)鍵字來判斷某個(gè)獨(dú)享是否屬于某各類 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??歡迎工作一到五年的Java工程師朋友們加入Java群:?741514154
群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用毡证、高并發(fā)电爹、高性能及分布式、Jvm性能調(diào)優(yōu)料睛、Spring源碼丐箩,MyBatis摇邦,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來學(xué)習(xí)提升自己,不要再用"沒有時(shí)間“來掩飾自己思想上的懶惰屎勘!趁年輕施籍,使勁拼,給未來的自己一個(gè)交代概漱!