java基礎(chǔ)一4new_第1頁
java基礎(chǔ)一4new_第2頁
java基礎(chǔ)一4new_第3頁
java基礎(chǔ)一4new_第4頁
java基礎(chǔ)一4new_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Java基礎(chǔ)一1、編譯原理簡單學(xué)習(xí)java編譯期編譯源文件生成字節(jié)碼文件的過程,以及如何通過java解釋器運(yùn)行字節(jié)碼文件。1.1、jdk的安裝我們首先可以通過 FilesJava下安裝jdk和jre運(yùn)行時(shí)環(huán)境。如圖:安裝完后我們可以選擇“開始”“運(yùn)行”,輸入cmd,點(diǎn)及回車鍵,彈出如下圖:在彈出的控制臺(tái)窗口中我們可以輸入:java version回車,彈出如下窗口表示jdk安裝成功。1.2、開發(fā)環(huán)境的配置我們程序員主要是編寫java源程序,即擴(kuò)展名是“.java”的文件稱為源文件。然后通過jdk自帶的編譯期javac.exe對源程序進(jìn)行編譯,生成可執(zhí)行的字節(jié)碼文件,即擴(kuò)展名為“.class”的

2、文件稱為字節(jié)碼文件,或稱為可執(zhí)行程序。編譯期和解釋器所在位置如圖:此時(shí)我們再控制臺(tái)輸入的任意目錄輸入“java”,結(jié)果如下圖:同樣在控制臺(tái)輸入“javac”,結(jié)果如下圖:結(jié)果表示沒有找到我們的javac編譯器,解決方法是:通過set path=“javac所在目錄”命令設(shè)置path環(huán)境變量,即可正常執(zhí)行javac.exe程序了,如圖:當(dāng)然這種對于環(huán)境變量的設(shè)置只對當(dāng)前窗口生效,對其他窗口無效,要想長期有效,我們可以通過“我的電腦”“屬性”“高級(jí)”標(biāo)簽下的“環(huán)境變量”按鈕設(shè)置:環(huán)境變量設(shè)置分為用戶級(jí)的和系統(tǒng)級(jí)的,我們可以在任意其一進(jìn)行設(shè)置。以用戶級(jí)為例:如果沒有變量名為path的,我們可以點(diǎn)擊新

3、建按鈕,在彈出的對話框中的變量名中輸入path,在變量值中輸入javac.exe所在的目錄即可。1.3、編譯與運(yùn)行我們的編譯器只能編譯文件擴(kuò)展名為“.java”的文件,文件中可以沒有任何內(nèi)容,但是如果有內(nèi)容必須符合java的語法規(guī)范,因?yàn)閖avac編譯器在編譯之前要先進(jìn)行語法等信息的檢查。以windows平臺(tái)為例,在編譯時(shí)文件名不區(qū)分大小寫。有文件如下:兩種類型的文件名都可以編譯通過,但是用中文作為源文件的文件名不推薦。注意在windows平臺(tái)上,文件名是不區(qū)分大小寫的。即TEST.java和Test.java和TeST.java是同名文件,不允許在同一目錄下同時(shí)存在。Java的解釋器java

4、.exe執(zhí)行的是類,即類的內(nèi)容,而非類所在的文件的文件名,所以java后跟的是類名,而非類所在的文件的文件名。如下:class Testpublic static void main(String args)System.out.println("Hello world.");Javac Test.java 生成Test.class文件,要想執(zhí)行當(dāng)前程序,可以這樣做:java Test 此時(shí)的Test是類名,而非文件名,如果我們這樣做:java test 則報(bào)錯(cuò):潛在說明類名是區(qū)分大小寫的。1.4、Hello world我們要想編寫第一個(gè)Helloworld程序,首先要將系

5、統(tǒng)內(nèi)部默認(rèn)的入口函數(shù)main方法顯示聲明,可以通過打印語句System.out.print(“Hello world.”);進(jìn)行打印。class Testpublic static void main(String args)System.out.println("Hello world.");每個(gè)類都有一個(gè)入口函數(shù):public static void main(String args) ,必須是public的,且要被static修飾。也就意味著我們要做的任何事情,都要在main方法中進(jìn)行編寫。當(dāng)運(yùn)行一個(gè)類時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用main方法,如果沒有聲明main方法,會(huì)報(bào)一個(gè)

6、錯(cuò)誤:“Exception in thread "main" java.lang.NoSuchMethodError: main”2、數(shù)據(jù)類型我們編寫的程序永遠(yuǎn)是以處理數(shù)據(jù)為核心,比如對數(shù)據(jù)的增刪改查。任何一個(gè)數(shù)據(jù)我們都應(yīng)該知道它的類型,才可以更好的應(yīng)用。比如在我沒有具體說明的情況下,請問:1是什么類型?有人可能要說是一個(gè)整數(shù)。但是我也可以說它就是一個(gè)編號(hào),是一個(gè)文本型的。因?yàn)?是一個(gè)常量。是一個(gè)具體值,只不過此時(shí)我們還沒有定義這個(gè)值的具體類型罷了。由此可見數(shù)據(jù)類型的重要性。Java中對于數(shù)據(jù)分為兩種類型,一種是基本數(shù)據(jù)類型,一種是引用型數(shù)據(jù)類型。當(dāng)我們需要的類型在jdk中

7、不存在時(shí),我們也可以通過class關(guān)鍵字定義。2.1、基本數(shù)據(jù)類型基本數(shù)據(jù)類型又叫原生數(shù)據(jù)類型,這種類型的數(shù)據(jù)是和變量名一并保存在相同的內(nèi)存中的,變量的本身就是數(shù)據(jù)。有別于后面的引用型?;緮?shù)據(jù)類型又分為如下幾種:1) 數(shù)值型:數(shù)值型包含整型(byte、short、int、long)和浮點(diǎn)型(float、double)2) 字符型:char類型3) 邏輯性:又叫布爾型(boolean),可取值只有true和false。以上就是我們常說的“四類八種“。2.2、引用型引用型的變量主要是通過類名稱定義的變量,或者是數(shù)組類型定義的變量。因?yàn)樽兞棵妥兞恐挡皇恰袄墶霸谝黄鸬?,變量名只保存了值的”地址?/p>

8、,而非值本身,我們可以理解變量就是操縱值的遙控器,所以我們叫這種類型為引用型。我們會(huì)在后面詳細(xì)介紹。2.3、變量聲明所謂變量的聲明就是在代碼塊中定義變量,同時(shí)我們可以為其賦一個(gè)初始值,這個(gè)動(dòng)作又叫變量的初始化。變量在使用之前必須保證初始化。class Testint i;/變量聲明public static void main(String args)int t = 6;/變量聲明并初始化Test2 t2;/變量聲明t2 = new Test2();/變量初始化class Test22.4、數(shù)據(jù)類型與運(yùn)算數(shù)值型數(shù)據(jù)常見的操作無外乎加減乘除(+、-、*、/、%)。而java又將數(shù)值型分為:編號(hào)類

9、型字節(jié)數(shù)1byte12short23int44long85float46double87char28booleantrue或者false基本數(shù)據(jù)類型中1到6為數(shù)值型,是可以參與運(yùn)算的,其中字符型的char也可以參與數(shù)學(xué)運(yùn)算,唯獨(dú)boolean類型無法參與數(shù)學(xué)運(yùn)算。2.4.1、變量與常量、運(yùn)算符使用常量是不可改變的量,而變量是可以改變的量。變量主要是用來存儲(chǔ)常量,可以實(shí)現(xiàn)常量的反復(fù)使用。Java中任意一個(gè)常量的默認(rèn)類型是int類型。任意一個(gè)浮點(diǎn)型的常量默認(rèn)為double類型。public static void main(String args) byte b = 12;/可以通過。byte b

10、2 = 128;/編譯不能通過,超出了byte的取值范圍。byte b3 = b + 12;/編譯也無法通過。b+=12;/可以通過。byte b4 = 127;b4+=1;/可以通過。 System.out.println(b4);/輸出結(jié)果是-128.以上程序告訴我們:當(dāng)一個(gè)int類型的常量沒有超出byte的取值范圍時(shí),系統(tǒng)會(huì)對該值進(jìn)行強(qiáng)制類型轉(zhuǎn)換,且不會(huì)造成精度丟失。而當(dāng)一個(gè)超出了byte取值范圍的int類型值(128)賦給byte類型變量時(shí),系統(tǒng)檢測到該值超出了byte的取值范圍,不會(huì)對該值進(jìn)行自動(dòng)強(qiáng)制類型轉(zhuǎn)換。所以在編譯時(shí)會(huì)報(bào)精度丟失錯(cuò)誤。要想編譯通過,我們可以手動(dòng)強(qiáng)制類型轉(zhuǎn)換。而當(dāng)

11、兩個(gè)不同類型的數(shù)值進(jìn)行運(yùn)算時(shí),系統(tǒng)會(huì)先找到類型更寬的類型,將窄類型先自動(dòng)強(qiáng)制轉(zhuǎn)換為寬類型。然后執(zhí)行運(yùn)算。運(yùn)算結(jié)果是寬類型的。表達(dá)式b+12的結(jié)果是一個(gè)int類型,b3是byte類型,賦值語句兩邊的類型不匹配,雖然表達(dá)式的結(jié)果沒有超出byte的取值范圍,但是系統(tǒng)不會(huì)自動(dòng)對表達(dá)式的結(jié)果進(jìn)行類型轉(zhuǎn)換。要想通過編譯,我們必須手動(dòng)強(qiáng)制類型轉(zhuǎn)換?!?=”的意思是先執(zhí)行加運(yùn)算,再執(zhí)行賦值語句。但是系統(tǒng)會(huì)自動(dòng)對運(yùn)算結(jié)果進(jìn)行強(qiáng)制類型轉(zhuǎn)換(當(dāng)運(yùn)算結(jié)果的類型寬于被賦值的變量的類型時(shí))。所以在使用“+=”符號(hào)時(shí)要注意,一定要保證其左邊的類型的寬度大于等于右邊的結(jié)果的類型。“+”運(yùn)算符在java中被重載了。其有兩個(gè)功能

12、,當(dāng)“+”符號(hào)左右只要有一個(gè)類型是非數(shù)值型的數(shù)據(jù),那么該符號(hào)就被充當(dāng)字符串連接符使用。如果左右都是數(shù)值型,那么該符號(hào)就充當(dāng)數(shù)學(xué)運(yùn)算符使用。public static void main(String args) System.out.println(12+23+"10");/結(jié)果是:3510System.out.println("10"+12+23);/結(jié)果是:101223Java中通過String定義字符串類型,String str = “I am teacher.”;任何類型和String類型執(zhí)行“+”運(yùn)算,其結(jié)果都是字符串類型?!?”和“-”運(yùn)算符

13、的使用,在變量之前,表示先執(zhí)行加(減)一之后,再使用變量。在變量之后,則表示先使用變量,再改變變量的值。public static void main(String args) int i = 5;System.out.println(i+);/5System.out.println(i);/6int j = 5;System.out.println(+j);/6System.out.println(j);/62.4.2、char類型Java采用的是unicode編碼。所以一個(gè)字符型的變量是可以存儲(chǔ)一個(gè)漢字的。其實(shí)字符型的底層是采用assics碼存儲(chǔ)的。char類型的變量即可被一個(gè)字符常量賦值

14、,也可以被一個(gè)整型常量賦值。并可以參與數(shù)學(xué)運(yùn)算。public static void main(String args) char c = 'a' , c2 = 65;System.out.println(c);/aSystem.out.println(int)c);/97System.out.println(c2);/ASystem.out.println(int)c2);/65System.out.println(c+c2);/1622.4.3、數(shù)據(jù)類型之間的轉(zhuǎn)換原則在整型中的轉(zhuǎn)換順序是:byte、short、charintlongfloatdoubleString。也就是

15、說byte、short、char在混合運(yùn)算時(shí),彼此之間不會(huì)相互轉(zhuǎn)換,它們統(tǒng)一轉(zhuǎn)換為int類型再運(yùn)算。float和long類型運(yùn)算的結(jié)果是float類型。public static void main(String args) byte b = 12;short s = 12;/s = s + b;報(bào)錯(cuò)。int i = s + b;char c = 12;/c = s + c;報(bào)錯(cuò)。i = s + c;long lg = 12;float f = 23.45f;f = f + lg;3、代碼塊在java中代碼塊分為普通代碼塊,靜態(tài)代碼塊,構(gòu)造代碼塊。首先代碼塊是在類體中定義的“”。我們編寫的代碼

16、必須要在代碼塊中或方法體中。不能直接寫在類體內(nèi)。3.1、普通代碼塊普通代碼塊是在方法中聲明的“”;在“”前也可以添加if、for、while、switch等關(guān)鍵字,就構(gòu)成了特定意義的普通代碼塊。public static void main(String args) System.out.println("這是普通代碼塊中的語句。");1) 在普通代碼塊前加if關(guān)鍵字,就是條件語句,if可以和else if 或者else配合使用,也可以單獨(dú)使用,但是else和else if不能單獨(dú)使用;2) 在普通代碼塊“”前添加“for(;)”就成了特殊的循環(huán)語句;3) 在普通代碼塊前還

17、可添加“while()”或者“do”、“switch(int類型)”等。public static void main(String args) int a = 10;if(a%2=0)System.out.println(a+"是偶數(shù)。");elseSystem.out.println(a+"是奇數(shù)。");If其后“()”中的表達(dá)式的結(jié)果必須是boolean類型的。public static void main(String args) System.out.println("打印1到10閉區(qū)間內(nèi)所有的偶數(shù)。");for(int i

18、=1;i<=10;i+)if(i%2=0)System.out.println("偶數(shù):"+i);elsecontinue;/表示直接進(jìn)入下次循環(huán),當(dāng)然此處可以不寫。for之后的“()”中有三個(gè)表達(dá)式,分別用兩個(gè)“;”隔開。第一個(gè)表達(dá)式也可以寫在for循環(huán)語句之前;第二個(gè)表達(dá)式的結(jié)果必須是一個(gè)boolean類型的。第三個(gè)表達(dá)式改變第二個(gè)表達(dá)式取值的一個(gè)量。也可以寫在循環(huán)體的內(nèi)部。如果“()”內(nèi)是三條空語句,則該循環(huán)是一個(gè)死循環(huán)。public static void main(String args) System.out.println("打印1到10閉區(qū)間

19、內(nèi)所有的偶數(shù)。");int i = 10;while(i>0)if(i%2=0)System.out.println("偶數(shù):"+i);i-;while之后的“()”中的表達(dá)式的結(jié)果必須是boolean類型的。public static void main(String args) int i = 2;switch(i)case 1:System.out.println("case 1.");case 2:System.out.println("case 2.");case 3:System.out.println(&

20、quot;case 3.");case 4:System.out.println("case 4.");break;case 5:System.out.println("case 5.");default:System.out.println("default.");Switch之后的“()”中的表達(dá)式的結(jié)果必須是int類型的。要想防止case語句穿透,必須使用break關(guān)鍵字結(jié)束。3.2、靜態(tài)代碼塊靜態(tài)代碼塊是在“”前添加static修飾,且靜態(tài)代碼塊是在方法之外,類體之內(nèi)聲明的。靜態(tài)代碼塊會(huì)在類加載時(shí)由系統(tǒng)默認(rèn)執(zhí)行,且在

21、main方法之前執(zhí)行。靜態(tài)代碼塊主要作用是對類變量進(jìn)行初始化。后面會(huì)詳細(xì)講解。public class Test2 staticSystem.out.println("靜態(tài)代碼塊。");public static void main(String args) System.out.println("入口方法main。");非main方法的Hello world如何編寫?如下:public class Test2 staticSystem.out.println("靜態(tài)代碼塊。");System.exit(1);/表示系統(tǒng)正常退出,不會(huì)

22、再向下查詢main方法。java.lang.System類的靜態(tài)方法exit(int)表示終止JVM的運(yùn)行。直接結(jié)束程序的意思。3.3、構(gòu)造代碼塊構(gòu)造代碼塊也是在類體的內(nèi)部,方法的外部聲明的,不加任何修飾的“”。構(gòu)造代碼塊會(huì)在實(shí)例化類對象時(shí),系統(tǒng)自動(dòng)執(zhí)行的代碼塊。構(gòu)造代碼塊的主要作用是對成員變量進(jìn)行初始化。會(huì)在后面進(jìn)行詳細(xì)講解。public class Test2 System.out.println("構(gòu)造代碼塊。");public static void main(String args) /構(gòu)造一個(gè)Test2類型的對象。程序運(yùn)行時(shí)會(huì)在main方法前自動(dòng)執(zhí)行構(gòu)造代碼塊。

23、new Test2();3.4、代碼塊與作用域作用域就是變量的可視范圍。代碼塊“”就是作用域,比如類體、方法體、普通代碼塊、靜態(tài)代碼塊、構(gòu)造代碼塊都稱之為作用域。除類體之外的作用域都稱之為局部作用域。3.4.1、局部作用域中的變量與內(nèi)存局部作用域中的變量的作用范圍是從變量的定義處起,到該變量所在的第一層“”的結(jié)束。局部變量是在內(nèi)存的棧區(qū)開辟空間的。public static void main(String args) /局部作用域:方法體。int i = 3;/局部作用域:普通代碼塊。System.out.println("i="+i);int j = 4;System.

24、out.println("j="+j); /int i = 4;報(bào)錯(cuò),已在方法體局部作用域中定義了同名變量。System.out.println("i="+i);/System.out.println("j="+j);此處已經(jīng)脫離了j的作用范圍。4、方法方法描述的是一段算法,是一個(gè)動(dòng)作,是一種功能。一個(gè)功能也可以理解為是一個(gè)事務(wù),一個(gè)完整的事務(wù)可能由一到多個(gè)子事務(wù)(功能)一起完成的。作業(yè):對一下語句進(jìn)行方法描述。1、 我去吃飯了。2、 我騎著自行車去上班。3、 我騎著自行車去上班了。4、 我一邊吃飯,一邊打游戲。5、 我吃完飯要去看電

25、影。6、 我每天晚上都會(huì)去操場跑步一圈,如果我每天晚上吃幾斤包子,我就多跑幾圈。比如吃3斤包子,就多跑三圈。4.1、一般方法一般方法的定義:修飾符1 修飾符2 返回值類型 方法名(形參列表)算法。這就是一個(gè)完整的方法定義,“”中是可選的。根據(jù)具體需要選擇。方法前如果有static修飾符修飾,該方法表示是一個(gè)靜態(tài)方法,也叫類方法。沒有static修飾的叫成員方法。類方法可以直接通過類名加引導(dǎo)符調(diào)用。成員方法要通過對象(或?qū)ο笠茫┘右龑?dǎo)符調(diào)用。在一類的內(nèi)部,非靜態(tài)方法和非靜態(tài)方法之間可以相互直接調(diào)用,非靜態(tài)方法也可以直接調(diào)用靜態(tài)的類方法。而類方法不能調(diào)用非靜態(tài)方法,靜態(tài)方法之間可以相互直接調(diào)用。

26、public class Test2 public void m1()System.out.println("m1()");void m2()m1();/非靜態(tài)方法之間可以相互直接調(diào)用。public static int m3(int a, int b)return a+b;/return表示方法的結(jié)束,跳到方法的調(diào)用處。static void m4()/m1();報(bào)錯(cuò),靜態(tài)方法中不能調(diào)用非靜態(tài)方法。System.out.println(m3(2,3);/靜態(tài)方法之間可以相互調(diào)用。public void m5()m4();/非靜態(tài)方法可以直接調(diào)用靜態(tài)方法。4.2、構(gòu)造方法構(gòu)

27、造方法的主要作用是初始化成員變量,創(chuàng)建對象。每個(gè)類都至少要有一個(gè)構(gòu)造方法,沒有構(gòu)造方法的類是不存在的。構(gòu)造方法沒有返回值類型,且構(gòu)造方法的方法名與類名完全一致。如果一個(gè)類沒有顯示的聲明構(gòu)造方法,JVM在編譯時(shí)也會(huì)為該類添加一個(gè)無參的、不加任何實(shí)現(xiàn)的構(gòu)造方法,該構(gòu)造方法又被稱為缺省的構(gòu)造方法。public class Test2 public Test2()System.out.println("構(gòu)造方法。");public class Test2 /該類在編譯時(shí)系統(tǒng)會(huì)添加缺省的構(gòu)造方法。4.3、方法的重載在一個(gè)類的內(nèi)部,多個(gè)方法的方法名相同,但是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的

28、類型不同,或者是相同參數(shù)個(gè)數(shù)的類型排列順序不同,就叫方法的重載。返回值類型的不同不能作為評(píng)判方法是否重載的依據(jù)。比如計(jì)算器上的“+”就是一個(gè)重載功能。方法重載的目的是為了簡化API的使用。同名的方法具備不同的功能。這樣在調(diào)用時(shí)會(huì)變得更加簡單。方法的重載也是一種多態(tài)的表現(xiàn)形式。在一個(gè)類的內(nèi)部之所以可以有多個(gè)同名方法存在,是因?yàn)閖ava采用的是“動(dòng)態(tài)綁定原則”。運(yùn)行時(shí)會(huì)根據(jù)參數(shù)選擇對應(yīng)的方法。public class Test2 public void get()/public int get()return 21;這個(gè)不是重載方法。public void get(int a)public voi

29、d get(int a,String b)public void get(String a, int b)4.4、對字節(jié)碼文件進(jìn)行反編譯我們在編寫源文件的時(shí)候,有可能沒有顯示的編寫構(gòu)造方法。但是我們定義一個(gè)類,難道真的可以沒有構(gòu)造方法嗎?不是的,在java中,沒有構(gòu)造方法的類可以理解為是不存在的。雖然我們可以不顯示的編寫構(gòu)造方法,但是JVM在編譯時(shí),會(huì)先執(zhí)行檢查,當(dāng)檢查到我們沒有定義構(gòu)造方法時(shí),系統(tǒng)會(huì)為我們的類添加一個(gè)缺省構(gòu)造方法??梢酝ㄟ^如下方法進(jìn)行驗(yàn)證:Test.java的源文件package java.basic1;public class Test public int a;void

30、run()System.out.println("run();");先編譯源文件,生成字節(jié)碼文件如下:這個(gè)文件的內(nèi)容我們是無法看懂的,那么要如何驗(yàn)證呢?可以通過反編譯命令:javap.exe我們可以通過反編譯的結(jié)果和源文件對比,字節(jié)碼文件中是有了構(gòu)造方法的。4.5、如何合理定義方法方法是一段算法的集合,而一段算法有可能又可以細(xì)分為多個(gè)子算法。我們可以將一段完整的算法理解為是一個(gè)完整的事務(wù),而在這個(gè)事務(wù)中又集合了多個(gè)子事務(wù)。因此我們有必要將這些個(gè)子事務(wù)也定義成方法。然后將這些個(gè)子方法按照業(yè)務(wù)邏輯組成一個(gè)完整的事務(wù)。這樣做的好處是:1) 子方法可以重復(fù)使用,達(dá)到了代碼復(fù)用的目的

31、;2) 代碼利于維護(hù),當(dāng)一個(gè)完整的事務(wù)的某一塊邏輯需要改變時(shí),我們可以定位到具體子方法,對具體子方法進(jìn)行修改即可因此,定義一個(gè)合理的方法應(yīng)做到如下幾點(diǎn):1) 一事一方法,方法的具體代碼片段不耦合;2) 確定方法所屬的類,合理的方法出現(xiàn)在適當(dāng)?shù)念愔小Ee例:“我每天騎自行車去上班?!比绾尉帉懛椒ǎ縞lass Bike/自行車類型。public void move()/自行車移動(dòng)功能。System.out.println("自行車 開始啟動(dòng)了");class Person/人類。String name;Person(String name) = name;pub

32、lic void ride(Bike bike)/騎自行車bike.move();public void goToWork(Bike bike)/騎自行車上班ride(bike);public static void main(String args) Person myself = new Person("我");/實(shí)例一個(gè)Person類型對象。myself.goToWork(new Bike();4.6、標(biāo)識(shí)符與命名規(guī)范在java中,凡是我們可以自行定義的地方都可以稱之為標(biāo)識(shí)符,比如:變量名、方法名、類名、包名等等。Java中標(biāo)識(shí)符由一下字符組成:字母、數(shù)字、下劃線“_

33、”、美元符號(hào)“$”。定義一個(gè)標(biāo)識(shí)符需要滿足如下幾點(diǎn):1) 不能以數(shù)字開頭2) 不能和java中的關(guān)鍵字沖突3) Java中的標(biāo)識(shí)符對字母的大小寫是敏感的,且不能出現(xiàn)非法字符命名規(guī)范之駝峰命名規(guī)范:我們在定義一個(gè)標(biāo)識(shí)符時(shí),盡量要做到見名知意,要做到見名知意,即要求標(biāo)識(shí)符的可讀性高,那么一個(gè)標(biāo)識(shí)符可能要出現(xiàn)多個(gè)單詞。駝峰命名要求:a) 標(biāo)識(shí)符作為類名,要求每個(gè)單詞的首字母要大寫b) 標(biāo)識(shí)符作為方法名和普通變量名,要求第一個(gè)單詞的首字母小寫,之后每個(gè)單詞的首字母大寫c) 標(biāo)識(shí)符作為包名,要求一層包使用一個(gè)單詞d) 標(biāo)識(shí)符作為常量名,要求每個(gè)單詞的每個(gè)字母都大寫,單詞間使用“_”線連接5、封裝:類與對

34、象類是一種抽象的概念,對象是客觀存在的實(shí)體。類可以對對象進(jìn)行定義;對象則是類的體現(xiàn)。俗語說:“物以類聚人以群分”;關(guān)鍵我們?nèi)绾畏诸?,如何?zhǔn)確分類。封裝,可以理解為是對一段算法的封裝。也可以是對具有相同屬性和相同功能的一類事物的抽象。Java中對封裝有更特點(diǎn)的意思,主要是針對simpleBean(簡單的實(shí)體類)。即成員變量私有化(private修飾),然后通過getXXX和setXXX方法進(jìn)行讀寫操作。class Personprivate String name;private int age;private String address;public String getName() ret

35、urn name;public void setName(String name) = name;public int getAge() return age;public void setAge(int age) this.age = age;public String getAddress() return address;public void setAddress(String address) this.address = address;5.1、類的概念在java中我們這樣對類進(jìn)行定義:具有相同屬性和相同功能的一類事物的集合。比如我們身邊有如下對象:猴子、電腦、

36、空調(diào)、人、桌子;我們?nèi)绾螌ζ溥M(jìn)行分類?如何我們從可視性上分,他們都是同一類事物固體;如果我們從生物和非生物角度分,又可以分為兩種生物和非生物;由此可見類型是無形的。關(guān)鍵看我們?nèi)绾螌ο髮傩赃M(jìn)行區(qū)分。不同的屬性集合,得到不同的類。類是對對象的定義。描述一組對象是同類事物的過程就叫“抽象”。5.2、對象對象就是以類為模板,將類中的各個(gè)屬性賦值之后就產(chǎn)生了對象。我們可以這樣理解對象,對象就是具有屬性值的類。5.3、類和對象之間的關(guān)系類是通過一組對象按相同屬性和相同功能抽取出來的結(jié)果。對象則是類的一個(gè)具體體現(xiàn)。在java程序語言中,我們這樣說:類是對象的模板(或者說類是對象的集合),對象是類的實(shí)例。每一

37、個(gè)對象都是同一種類型的,因?yàn)樗鼈冇邢嗤膶傩裕瑢傩远际呛皖惸0逡恢碌?。而每個(gè)對象又不同,因?yàn)槊總€(gè)對象的屬性值不同。class Person/對人類的抽象String name;/姓名int age;/年齡char sex;/性別Person(String n, int a, char s)/構(gòu)造方法保障對象的實(shí)例化name = n;age = a;sex = s;public static void main(String args) Person p1 = null;/定義Person類型的引用(變量)p1 = new Person("張三",45,'男'

38、);/通過構(gòu)造方法實(shí)例化對象System.out.println("p1="+p1);/打印該引用對應(yīng)的堆區(qū)中對象的地址System.out.println("="+);/該引用所指對象的name屬性5.4、類中屬性的默認(rèn)初始化規(guī)則我們知道在局部作用域中定義的變量在使用之前必須對其進(jìn)行手動(dòng)初始化。如果在使用之前得不到初始化,要報(bào)初始化錯(cuò)誤。而我們在方法之外,類的內(nèi)部定義的變量,即使在使用之前我們沒有手動(dòng)初始化,依然可以正常使用。為什么呢?難道是屬性不需要初始化嗎?顯然是不可能的。其實(shí)是JVM對其進(jìn)行了初始化。初始化原則如下:p

39、ublic class Test static byte b;/0static short s;/0static int i;/0static long lg;/0static float f;/0.0static double d;/0.0static char c;/一個(gè)空格static boolean flag;/falsestatic String str;/nullpublic static void main(String args) System.out.println("b="+b);System.out.println("s="+s);

40、System.out.println("i="+i);System.out.println("lg="+lg);System.out.println("f="+f);System.out.println("d="+d);System.out.println("c="+c+"");System.out.println("flag="+flag);System.out.println("str="+str);注意:所有的引用型數(shù)據(jù)一律默認(rèn)初

41、始化為null值。null的意思是表示該引用的值還不確定。引用型的變量當(dāng)值不確定時(shí),為了避免在使用變量時(shí)發(fā)生未被初始化異常,可以統(tǒng)統(tǒng)賦值為null。5.5、類的加載一個(gè)類在使用之前必須要先加載到內(nèi)存。一個(gè)類會(huì)被加載的幾種方式:1) 直接通過java.exe命令執(zhí)行該類,在執(zhí)行之前會(huì)先加載該類2) 一個(gè)類在另一個(gè)類中被間接使用,比如在A類型中使用B類的方法,當(dāng)我們執(zhí)行A類時(shí),執(zhí)行到B類相關(guān)方法時(shí),也會(huì)先加載B類3) 通過Class.forName(“類的全路徑名”)可以加載一個(gè)類注意:在一個(gè)程序的生命周期中,一個(gè)類只被加載一次。加載一個(gè)類就是按照程序由上向下的順序執(zhí)行靜態(tài)代碼塊。5.6、程序生命

42、周期與內(nèi)存類的加載永遠(yuǎn)排在第一位,當(dāng)類加載完畢,就可以使用該類了,比如調(diào)用給類的靜態(tài)方法。當(dāng)然了main方法是程序的入口。我們可以在main方法中調(diào)用方法,包括定義局部變量,實(shí)例化對象等??慈缦麓a:public class Person String name;int age;public Person()age = 1;System.out.println("缺省的構(gòu)造方法。");public Person(String n, int a)name = n;age = a;System.out.println("有參的構(gòu)造方法被執(zhí)行了。");Syst

43、em.out.println("一個(gè)對象要產(chǎn)生了。");staticSystem.out.println(Person.class.getName()+"類被加載了。");System.out.println("構(gòu)造代碼塊在構(gòu)造方法前執(zhí)行。");public static void main(String args) Person p1 = null;p1 = new Person();System.out.println("p1="+p1);System.out.println("-");p1

44、 = new Person("Jim", 22);System.out.println("p1="+p1);staticSystem.out.println("靜態(tài)代碼塊執(zhí)行了。");輸出結(jié)果:Person類被加載了。靜態(tài)代碼塊執(zhí)行了。一個(gè)對象要產(chǎn)生了。構(gòu)造代碼塊在構(gòu)造方法前執(zhí)行。缺省的構(gòu)造方法。p1=Personde6ced-一個(gè)對象要產(chǎn)生了。構(gòu)造代碼塊在構(gòu)造方法前執(zhí)行。有參的構(gòu)造方法被執(zhí)行了。p1=Personc17164注意:由輸出結(jié)果可知,一個(gè)類只有在第一次加載的時(shí)候才會(huì)執(zhí)行靜態(tài)代碼塊,且靜態(tài)代碼塊只執(zhí)行一次。構(gòu)造代碼塊在調(diào)用

45、構(gòu)造方法之前執(zhí)行,且每調(diào)用一次構(gòu)造方法,構(gòu)造代碼塊都會(huì)執(zhí)行一次。構(gòu)造方法在構(gòu)造代碼塊之后執(zhí)行。引用型變量存儲(chǔ)的是對象的地址,而非對象本身。在結(jié)束main方法之前,p1引用曾兩次指向不同的對象。整個(gè)程序在內(nèi)存中是什么樣的呢?畫圖說明。模擬內(nèi)存中對各個(gè)變量及對象是如何分配空間的。5.7、代碼塊與關(guān)鍵字此處要講的關(guān)鍵字都是可以作為一條語句來使用的。我們主要研究如下幾個(gè)關(guān)鍵字的特性。Java中的關(guān)鍵字都是小寫的。1) return:跳出方法,跳到方法調(diào)用處,程序依然可以向下運(yùn)行;2) break:防止case語句穿透,跳出當(dāng)前循環(huán);3) continue:只能在循環(huán)中使用,表示直接進(jìn)入下一次循環(huán),循環(huán)

46、中的continue之后的語句不再執(zhí)行;4) 要想結(jié)束程序的運(yùn)行,可以使用Systeme.exit(int)方法。public class Test public int get(int a, int b)return a + b;/帶值跳出方法到方法調(diào)用處。public void set(int a)int b = a;b+=b;return;/直接跳出方法,至方法調(diào)用處。/a = b;/return之后不能再有語句。public class Test public static void main(String args) for(int a = 1; a < 10; a+)if(a

47、=4)break;/跳出當(dāng)前循環(huán)。System.out.println("a="+a);System.out.println("for循環(huán)結(jié)束,程序繼續(xù)運(yùn)行。");public class Test2 public static void main(String args) for(int a = 1; a < 10; a+)if(a=4)continue;/直接進(jìn)入下次循環(huán)。System.out.println("a="+a);System.out.println("for循環(huán)結(jié)束,程序繼續(xù)運(yùn)行。");5.

48、8、對象與引用(this)我們java程序員,一般只操作內(nèi)存的棧區(qū),而不操作內(nèi)存的堆區(qū)。局部變量在棧區(qū)分配空間,而java中引用型數(shù)據(jù)(即對象)是在內(nèi)存的堆區(qū)分配空間的。因此我們需要在棧區(qū)定義一個(gè)變量來保存堆區(qū)對象的地址。通過該局部變量來反復(fù)操作堆區(qū)中的對象。因此java中的非基本數(shù)據(jù)類型的變量又叫引用。當(dāng)然我們也可以在棧區(qū)中直接操作對象,即該對象創(chuàng)建之后,要一直“抓住”不放,否則再也無法使用該對象。這樣的對象又叫“匿名對象”。public class Test public static void main(String args) new Person("whz").r

49、un();/匿名對象調(diào)用run方法。Person p = new Person("wanghz");/p是指向堆中對象的引用。System.out.println(p);/引用中保存的是堆中對象的地址。System.out.println();p.run();/通過引用p訪問堆中的對象。class PersonString name;Person(String n)name = n;public void run()System.out.println("run();");以上代碼在內(nèi)存中的狀態(tài):非靜態(tài)方法在內(nèi)存中是這樣存儲(chǔ)的,類的完整路徑名

50、加引導(dǎo)符加方法名,并且在方法的形參列表處,永遠(yuǎn)是在第一個(gè)位置定義一個(gè)接受自身類型的變量。從而將調(diào)用該方法的引用傳遞給該方法的臨時(shí)變量,以區(qū)分不同對象。class Personpublic void run()System.out.println("run();");public static void main(String args) Person p = new Person();p.run();/Person.run(p);5.8.1、當(dāng)前類的默認(rèn)引用thisthis就是一個(gè)指向當(dāng)前類的某個(gè)對象的引用。this只能在方法內(nèi)部使用。它的類型就是所在類的類型。如果this

51、調(diào)用構(gòu)造方法,構(gòu)造方法的調(diào)用必須是構(gòu)造方法中的第一條語句,只能在構(gòu)造方法中通過this()調(diào)用構(gòu)造方法。Package com.test;class PersonString name;Person(String n)name = n;public void print()System.out.println("this="+this);System.out.println("="+);public static void main(String args) Person p = new Person("wh

52、z");System.out.println("p="+p);System.out.println("="+);p.print();/方法的本質(zhì)是:Person.print(p);=>this = p;看結(jié)果:p=com.test.P=whzthis=com.test.P=whz可以看出引用p和默認(rèn)引用this是指向的同一個(gè)對象。借助this實(shí)現(xiàn)方法的鏈?zhǔn)秸{(diào)用:要想讓某方法可以被鏈?zhǔn)秸{(diào)用,要保證該方法返回一個(gè)自身所在類的類型。class Pe

53、rsonpublic Person print()/該方法可以實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用。System.out.println("this="+this);return this;public static void main(String args) new Person().print().print().print();借用this區(qū)分成員變量和局部變量:class PersonString name;Person(String name)name = name;public static void main(String args) System.out.println(new

54、Person("whz").name);/輸出結(jié)果是:null以上程序輸出的name是null,說明屬性name的值沒有被改變。原因是變量的就近原則,構(gòu)造方法中的”name = name;”的意思是局部變量賦給了局部變量,而沒有改變屬性name的值。可以做如下修改,解決該問題。class PersonString name;Person(String name) = name;public static void main(String args) System.out.println(new Person("whz").name);因?yàn)閠his是當(dāng)前類的一個(gè)引用,這個(gè)引用this指向的就是main方法中的匿名對象;從而就是指堆中匿名對象的name屬性。從

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論