版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
目錄
第1章 Java環(huán)境及配置第2章Java基本語法
第3章類和接口
第4章JavaApplet
第5章Java圖形處理
第6章Java用戶界面技術
第7章異常、事件和多線程機制
第8章輸入輸出技術
第9章Java數(shù)據(jù)庫技術
第10章Java安全技術
第11章Java網(wǎng)絡技術(一)
第12章Java網(wǎng)絡技術(二)第13章Servlet技術第14章Java讀寫XML技術目錄第1章 Java環(huán)境及配置1第1章Java環(huán)境及配置1.1Java概述1.2Java語言的特點1.3Java應用分類1.4JDK包的下載與安裝1.5Java環(huán)境配置1.6例子程序習題
第1章Java環(huán)境及配置1.1Java概述21.1Java概述Java是一種編程語言,它提供了一個同時用于程序開發(fā)、應用和部署的環(huán)境。Java語言主要定位于網(wǎng)絡編程,使得程序可以最大限度地利用網(wǎng)絡資源。1.1Java概述Java是一種編31.2Java語言的特點1.跨平臺性所謂的跨平臺性,是指軟件可以不受計算機硬件和操作系統(tǒng)的約束而在任意計算機環(huán)境下正常運行。這是軟件發(fā)展的趨勢和編程人員追求的目標。之所以這樣說,是因為計算機硬件的種類繁多,操作系統(tǒng)也各不相同,不同的用戶和公司有自己不同的計算機環(huán)境偏好,而軟件為了能在這些不同的環(huán)境里正常運行,就需要獨立于這些平臺。1.2Java語言的特點1.4
而在Java語言中,Java自帶的虛擬機很好地實現(xiàn)了跨平臺性。Java源程序代碼經(jīng)過編譯后生成二進制的字節(jié)碼是與平臺無關的,但是可被Java虛擬機識別的一種機器碼指令。Java虛擬機提供了一個字節(jié)碼到底層硬件平臺及操作系統(tǒng)的屏障,使得Java語言具備跨平臺性。而在Java語言中,Java自帶的虛擬機很好52.面向?qū)ο竺嫦驅(qū)ο笫侵敢詫ο鬄榛玖6?,其下包含屬性和方法。對象的說明用屬性表達,而通過使用方法來操作這個對象。面向?qū)ο蠹夹g使得應用程序的開發(fā)變得簡單易用,節(jié)省代碼。Java是一種面向?qū)ο蟮恼Z言,也繼承了面向?qū)ο蟮闹T多好處,如代碼擴展、代碼復用等。2.面向?qū)ο?
3.安全性安全性可以分為四個層面,即語言級安全性、編譯時安全性、運行時安全性、可執(zhí)行代碼安全性。語言級安全性指Java的數(shù)據(jù)結構是完整的對象,這些封裝過的數(shù)據(jù)類型具有安全性。編譯時要進行Java語言和語義的檢查,保證每個變量對應一個相應的值,編譯后生成Java類。運行時Java類需要類加載器載入,并經(jīng)由字節(jié)碼校驗器校驗之后才可以運行。Java類在網(wǎng)絡上使用時,對它的權限進行了設置,保證了被訪問用戶的安全性。3.安全性7
4.多線程多線程在操作系統(tǒng)中已得到了最成功的應用。多線程是指允許一個應用程序同時存在兩個或兩個以上的線程,用于支持事務并發(fā)和多任務處理。Java除了內(nèi)置的多線程技術之外,還定義了一些類、方法等來建立和管理用戶定義的多線程。4.多線程8
5.簡單易用
Java源代碼的書寫不拘泥于特定的環(huán)境,可以用記事本、文本編輯器等編輯軟件來實現(xiàn),然后將源文件進行編譯,編譯通過后可直接運行,通過調(diào)試則可得到想要的結果。5.簡單易用91.3Java應用分類
1.應用程序典型的通用程序可以在具備Java運行環(huán)境的設備中獨立運行,它又分為:
GUI應用程序:即圖形用戶界面程序,可實現(xiàn)豐富的輸入界面和輸出顯示。命令行程序:無需界面,只需在命令行下運行,運行結果只在后臺發(fā)生變化,可以將輸出存放到文件中。嵌入式應用程序:Java語言的平臺獨立性決定了它可以嵌入到不同的設備中,且只需具備必要的運行環(huán)境即可。1.3Java應用分類1.應10
2.Servlets服務器端應用程序服務器端的應用程序用來收集客戶端的數(shù)據(jù)輸入,對數(shù)據(jù)進行處理之后,返回相應的響應給客戶。它主要用來實現(xiàn)與客戶端的交互。2.Servlets服務器端應用程序11
3.Applets小應用程序
Applets應用于網(wǎng)絡上,嵌入在HTML網(wǎng)頁中,支持Java的瀏覽器都可以對它進行解釋并運行。通常通過一個HTML標簽<APPLET></APPLET>來識別并運行Applets。小應用程序的類在服務器端,當瀏覽器顯示網(wǎng)頁時,它隨之下載到本地,由本地的瀏覽器載入運行。3.Applets小應用程序121.4JDK包的下載與安裝JavaDevelopKit簡稱為JDK,是Sun公司免費發(fā)行的軟件包,可以從Sun網(wǎng)站免費下載,也可以從其它國內(nèi)地址下載。JDK版本從1.02開始,目前版本發(fā)展到1.4,其中高級版本對低級版本實現(xiàn)向下兼容。運用這個軟件包,就可以對Java源程序進行編譯和運行。本書中下載使用的JDK包為j2sdk-1_4_0_012-windows-i586.exe。下載后雙擊圖標,即可進行安裝,默認的安裝目錄為C:\j2sdk1.4.0_01。本書作者將安裝目錄改為D:\j2sdk1.4.0_01。1.4JDK包的下載與安裝JavaDe131.5Java環(huán)境配置JDK包安裝完成后,需要設置環(huán)境變量。用鼠標右鍵單擊桌面上的圖標“我的電腦”,選擇“屬性”項,出現(xiàn)標題為“系統(tǒng)特性”的對話框,點擊“高級”標簽,可以看見有一個“環(huán)境變量”按鈕,如圖1.1所示。1.5Java環(huán)境配置JDK包14圖1.1“系統(tǒng)特性”對話框圖1.1“系統(tǒng)特性”對話框15
單擊“環(huán)境變量”按鈕,可以看見本機環(huán)境變量,如圖1.2所示。上面為用戶變量,下面為系統(tǒng)變量,隨著操作系統(tǒng)或用戶環(huán)境的不同,變量名、值有所不同。這里需要修改三個用戶變量:include、lib和path,分別將JDK包安裝之后的相應路徑包含到這三個用戶變量中。單擊“環(huán)境變量”按鈕,可以看見本機環(huán)境變量,16圖1.2“環(huán)境變量”對話框圖1.2“環(huán)境變量”對話框17
選中include變量,單擊“編輯”按鈕,彈出標題為“編輯用戶變量”的對話框,如圖1.3所示。在變量值一欄的最后添加“;D:\j2sdk1.4.0_01\include”,“;”表示與前面的各項隔開,后面的路徑是JDK包的安裝路徑下的include目錄。圖1.3為作者修改include變量的情況,注意你的安裝路徑可能與作者的有所不同,要以你的安裝路徑為基準進行修改。選中include變量,單擊“編輯”按鈕,彈18圖1.3編輯include變量圖1.3編輯include變量19
選中l(wèi)ib變量,單擊“編輯”按鈕,彈出標題為“編輯用戶變量”的對話框,如圖1.4所示。在變量值一欄的最后添加“;D:\j2sdk1.4.0_01\lib”,“;”表示與前面的各項隔開,后面的路徑是JDK包的安裝路徑下的lib目錄。圖1.4為作者修改lib變量的情況,注意你的安裝路徑可能與作者的有所不同,要以你的安裝路徑為基準進行修改。選中l(wèi)ib變量,單擊“編輯”按鈕,彈出標題為20圖1.4編輯lib變量圖1.4編輯lib變量21
選中path變量,單擊“編輯”按鈕,彈出標題為“編輯用戶變量”的對話框,如圖1.5所示。在變量值一欄的最后添加“;D:\j2sdk1.4.0_01\bin”,“;”表示與前面的各項隔開,后面的路徑是JDK包的安裝路徑下的bin目錄。圖1.5為作者修改path變量的情況,注意你的安裝路徑可能與作者的有所不同,同樣要以你的安裝路徑為基準進行修改。選中path變量,單擊“編輯”按鈕,彈出標題22圖1.5編輯path變量圖1.5編輯path變量231.6例子程序【例1.1】源程序名稱為HelloWorld.java,命令行提示符下輸出字符串“HelloWorld”。源代碼如下://程序文件名稱為HelloWorld.javapublicclassHelloWorld{ publicstaticvoidmain(Stringargs[]) { System.out.println("HelloWorld"); }}1.6例子程序【例1.1】源程序名稱24
用記事本或者專用的編輯工具如EditPlus等進行編輯,并將文件存為HelloWorld.java。建議使用像EditPlus這樣的編輯軟件,可使得代碼更加清晰且風格良好。運行“開始”菜單→程序→附件→命令提示符,載入命令行程序,在命令行狀態(tài)下,進入源程序所在的目錄,圖1.6所示的例子程序的目錄在“E:\_Work\Java\sample”下,然后鍵入命令“javacHelloWorld.java”。若編譯不通過,會產(chǎn)生錯誤提示。若編譯通過,則沒有任何提示,同時進入命令行等待狀態(tài),如圖1.6所示。這時,命令行雖然沒有提示,但在源程序的路徑下生成一個新的文件為HelloWorld.class。這個.class文件就是編譯后生成的類文件,運行此文件,需在命令行狀態(tài)中鍵入命令“javaHelloWorld”,然后按回車鍵,此時程序就會運行并輸出“HelloWorld”。輸出完畢,立即退出程序,進入命令行等待狀態(tài),如圖1.7所示。用記事本或者專用的編輯工具如EditPlus25圖1.6編譯源程序HelloWorld圖1.6編譯源程序HelloWorld26圖1.7運行HelloWorld應用程序圖1.7運行HelloWorld應用程序27
這里用到的命令Javac和Java都是JDK軟件包自帶的。從JDK安裝路徑的bin目錄下可以看到javac.exe,這是編譯程序,源程序編譯通過后就生成.class文件;而Java.exe就是載入類的運行程序,運行時根據(jù)源程序的指令要求產(chǎn)生正確的輸出或結果。如果沒有進行環(huán)境配置,直接編譯或者運行Java源程序,系統(tǒng)會提示找不到這些命令,所以必須進行環(huán)境配置后再使用。這里用到的命令Javac和Java都是JDK28【例1.2】小應用程序的例子。輸出“HelloWorld!”,如圖1.8所示。源程序代碼如下://程序文件名稱為HelloApplet.javaimportjava.awt.Graphics;importjava.applet.Applet;publicclassHelloAppletextendsApplet{ publicvoidpaint(Graphicsg) { g.drawString("HelloWorld!",50,25); }}【例1.2】小應用程序的例子。輸出“Hell29
小應用程序代碼書寫和編譯完成后,無法獨立運行,需要一個載體或者容器。下面的HTML網(wǎng)頁代碼就是小應用程序載入的容器。<!--程序文件名稱為HelloApplet.html--><HTML><HEAD><TITLE>HTMLTestPage</TITLE></HEAD>小應用程序代碼書寫和編譯完成后,無法獨立運行,30<BODY>HelloAppletwillappearbelowinaJavaenabledbrowser.<BR><APPLETCODEBASE="."CODE="HelloApplet.class"NAME="TestApplet"WIDTH=400HEIGHT=300HSPACE=0VSPACE=0ALIGN=middle></APPLET></BODY></HTML><BODY>31圖1.8Applet顯示“HelloWorld!”圖1.8Applet顯示“HelloWorld!”32習題1.簡述Java的特點。2.簡述Java的分類情況。3.進行Java環(huán)境的安裝和配置。4.編寫應用程序,屏幕上輸出“歡迎來到Java世界!”。5.編寫Applet,輸出“歡迎來到Java世界!”。習題1.簡述Java的特點。33第2章Java基本語法2.1Java程序的構成2.2數(shù)據(jù)類型、變量和常量2.3運算符和表達式2.4流程控制2.5數(shù)組的使用習題
第2章Java基本語法2.1Java程序的構成342.1Java程序的構成2.1.1邏輯構成
Java源程序邏輯構成分為兩大部分:程序頭包的引用和類的定義。
1.程序頭包的引用主要是指引用JDK軟件包自帶的包,也可以是自己定義的類。引用之后程序體中就可以自由應用包中的類的方法和屬性等。2.1Java程序的構成2.1.1邏輯構成352.類的定義
Java源程序中可以有多個類的定義,但必須有一個主類,這個主類是Java程序運行的入口點。在應用程序中,主類為包含main方法的類;在Applet中,主類為用戶自定義的系統(tǒng)Applet類的擴展類。在Java源程序中,主類的名字同文件名一致。類的定義又包括類頭聲明和類體定義。類體中包括屬性聲明和方法描述。下面來看一個例子,其中斜體表示的語句行為主類類頭,主類類頭下面從大括號“{”開始到“}”結束的部分稱為主類類體。2.類的定義36【例2.1】下面是一個應用程序,也是一個Applet,既可以在命令行下運行,也可以嵌入到HTML網(wǎng)頁中用appletviewer命令運行。運行時在界面上的第一個文本框中輸入你的名字,按回車鍵后,在第二個文本框中會顯示“XXX,歡迎你來到Java世界!”,運行結果如圖2.1所示。//程序文件名稱為WelcomeApplet.java注釋語句引入包publicclassWelcomeAppletextendsAppletimplementsActionListener主類類頭
{【例2.1】下面是一個應用程序,也是一個App37屬性init方法屬性init方法38actionPerformed方法actionPerformed39main主方法main主方法40圖2.1程序界面圖2.1程序界面412.1.2物理構成
Java源程序物理上由三部分構成,分別為語句、塊和空白。
(1)語句指一行以分號“;”結束的語句。
(2)塊指用括號對{}界定的語句序列,塊可以嵌套使用。
(3)空白指語句之間、塊內(nèi)部或者塊之間的空白行。空白不影響Java源程序的編譯和運行,適當?shù)剡\用空白,可以形成良好的代碼風格。2.1.2物理構成42在例1.1中, LabellblName;TextFieldtxtName;TextFieldtxtDisp;都是語句,而
{ lblName=newLabel("請輸入您的名字:"); txtName=newTextField(8); txtDisp=newTextField(20); add(lblName); add(txtName); add(txtDisp); txtName.addActionListener(this); }是塊,語句之間、塊之間或塊內(nèi)部的空行都為空白。在例1.1中, 432.1.3注釋語句注釋語句主要用來進行一些說明,或者標記一些無用的程序語句。有兩種注釋方法,行注釋為以//開始的行;塊注釋以/*開始和*/結束,Java編譯器忽略注釋后的程序語句或說明。例如,下面的語句就是注釋語句用來說明程序文件名稱的。//程序文件名稱為WelcomeApplet.java上述的語句注釋可以更改為:/*程序文件名稱為WelcomeApplet.java*/或/*程序文件名稱為WelcomeApplet.java*/2.1.3注釋語句442.1.4標識符、關鍵字和轉(zhuǎn)義符在Java語言中,標識符是賦予變量、類和方法等的名稱。標識符由編程者自己指定,但需要遵循一定的語法規(guī)范:
(1)標識符由字母、數(shù)字、下劃線(_)、美元符號($)組成,但美元符號用得較少。
(2)標識符從一個字母、下劃線或美元符號開始。
(3)Java語言中,標識符大小寫敏感,必須區(qū)別對待。
(4)標識符沒有最大長度的限制,但最好表達特定的意思。
(5)標識符定義不能是關鍵字。2.1.4標識符、關鍵字和轉(zhuǎn)義符45
關鍵字又稱保留字,是指Java語言中自帶的用于標志數(shù)據(jù)類型名或者程序構造名等的標識符,如public、double等。轉(zhuǎn)義符是指一些有特殊含義的、很難用一般方式表達的字符,如回車、換行等。所有的轉(zhuǎn)義符以反斜線(\)開頭,后面跟著一個字符來表示某個特定的轉(zhuǎn)義符,如表2.1所示。關鍵字又稱保留字,是指Java語言中自帶的用46表2.1轉(zhuǎn)義符表2.1轉(zhuǎn)義符472.2數(shù)據(jù)類型、變量和常量2.2.1數(shù)據(jù)類型
Java編程語言定義了八種基本的數(shù)據(jù)類型(見表2.2),共分為四類:整數(shù)類(byte、short、int、long)、文本類(char)、浮點類(double、float)和邏輯類(boolean)。2.2數(shù)據(jù)類型、變量和常量2.2.1數(shù)據(jù)類型48表2.2Java的數(shù)據(jù)類型表2.2Java的數(shù)據(jù)類型491.整數(shù)類(1)采用三種進制——十進制、八進制和十六進制。2——十進制值是2;077——首位的0表示這是一個八進制的數(shù)值;0xBAAC——首位的0x表示這是一個十六進制的數(shù)值。(2)具有缺省int。(3)用字母“L”和“l(fā)”定義long。(4)所有Java編程語言中的整數(shù)類型都是帶符號的數(shù)字。1.整數(shù)類50
2.文本類
(1)代表一個16bitUnicode字符。
(2)必須包含用單引號('')引用的文字。
(3)使用下列符號:
'a'——一個字符。
'\t'--一個制表符。
'\u????'--一個特殊的Unicode字符,????應嚴格使用四個十六進制數(shù)進行替換。2.文本類51
3.浮點類默認為double類型,如果一個數(shù)字包括小數(shù)點或指數(shù)部分,或者在數(shù)字后帶有字母F或f(float)、D或d(double),則該數(shù)字為浮點數(shù)。3.浮點類524.邏輯類boolean數(shù)據(jù)類型有兩種值:true和false。例如:booleanflag=true;上述語句聲明變量flag為boolean類型,它被賦予的值為true。4.邏輯類532.2.2變量與常量常量是指整個運行過程中不再發(fā)生變化的量,例如數(shù)學中的π=3.1415……,在程序中需要設置成常量。而變量是指程序的運行過程中發(fā)生變化的量,通常用來存儲中間結果,或者輸出臨時值。變量的聲明也指變量的創(chuàng)建。執(zhí)行變量聲明語句時,系統(tǒng)根據(jù)變量的數(shù)據(jù)類型在內(nèi)存中開辟相應的存儲空間并賦予初始值。變量有一個作用范圍,超出它聲明語句所在的塊就無效。2.2.2變量與常量54
下面看一個使用各種類型變量聲明并改變的示例。程序中pi為常量,s1、i1、l1、ch1、f1、d1、b1為全局變量,可以在方法change中發(fā)生改變,然后在方法main中輸出。而s2、i2、l2、ch2、f2、d2、b2是方法main的局部變量,它們的作用范圍只局限于方法main中。
【例2.2】測試不同數(shù)據(jù)類型的變量,程序輸出如圖2.2所示。源程序代碼如下://程序文件名稱為SetVariable.javapublicclassSetVariable{ //全局變量下面看一個使用各種類型變量聲明并改變的示例。55 staticdoublepi=3.141592654;//數(shù)學常量 staticshorts1; staticinti1; staticlongl1; staticcharch1; staticfloatf1; staticdoubled1; staticbooleanb1; publicstaticvoidmain(Stringargs[]) { staticdoublepi=3.1415926556 //局部變量
shorts2=35; inti2=-32; longl2=34555L; charch2='A'; floatf2=897.89F; doubled2=34.345; booleanb2=false; //輸出常量
System.out.println("數(shù)學常量pi="+pi); //輸出局部變量 //局部變量57System.out.println("******局部變量******");System.out.println("短整型變量s2="+s2);System.out.println("整型變量i2="+i2);System.out.println("長整型變量l2="+l2);System.out.println("字符變量ch2="+ch2);System.out.println("浮點數(shù)類型f2="+f2);System.out.println("雙精度型變量d2="+d2);System.out.println("布爾型變量b2="+b2);//調(diào)用方法修改全局變量的值System.out.println("******局部變量58change();//輸出全局變量的值System.out.println("******全局變量******");System.out.println("短整型變量s1="+s1);System.out.println("整型變量i1="+i1);System.out.println("長整型變量l1="+l1);System.out.println("字符變量ch1="+ch1);System.out.println("浮點數(shù)類型f1="+f1);System.out.println("雙精度型變量d1="+d1);System.out.println("布爾型變量b1="+b1);}change();59//方法:修改全局變量的值
publicstaticvoidchange(){ s1=125; i1=88; l1=987654321L; ch1='B'; f1=3.2590F; d1=-1.04E-5; b1=true;}}//方法:修改全局變量的值60圖2.2變量輸出結果圖2.2變量輸出結果612.3運算符和表達式Java常用的運算符分為五類:算術運算符、賦值運算符、關系運算符、布爾邏輯運算符、位運算符。位運算符除了簡單的按位操作外,還有移位操作。按位操作返回布爾值。表達式是由常量、變量、對象、方法調(diào)用和操作符組成的式子。表達式必須符合一定的規(guī)范,才可被系統(tǒng)理解、編譯和運行。表達式的值就是對表達式自身運算后得到的結果。根據(jù)運算符的不同,表達式相應地分為以下幾類:算術表達式、關系表達式、邏輯表達式、賦值表達式,這些都屬于數(shù)值表達式。2.3運算符和表達式Java常用的運算符622.3.1算術運算符及算術表達式
Java中常用的算術運算符如下:
+ 加運算符
- 減運算符 * 乘運算符
/ 除運算符
% 取模運算(除運算的余數(shù)) ++ 增量運算符
-- 減量運算符2.3.1算術運算符及算術表達式63【例2.3】測試運算符及表達式,程序輸出如圖2.3所示。源程序代碼如下://程序文件名稱為NumberOper.javapublicclassNumberOper{ publicstaticvoidmain(Stringargs[]) { //變量初始化
inta=30; intb=20; //定義結果變量
intr1,r2,r3,r4,r5,r6,r7,r8,r9; //計算結果
r1=a+b;【例2.3】測試運算符及表達式,程序輸出如圖264 r2=a-b; r3=a*b; r4=a/b; r5=a%b; r6=a++; r7=b--; r8=++a; r9=--b; //輸出結果
System.out.println("a="+a+"b="+b);//a,b的值
System.out.println("a+b="+r1); System.out.println("a-b="+r2); r2=a-b;65 System.out.println("a*b="+r3); System.out.println("a/b="+r4); System.out.println("a%b="+r5); System.out.println("a++="+r6); System.out.println("b--="+r7); System.out.println("++a="+r8); System.out.println("--b="+r9);}} System.out.println("a*b="+66圖2.3程序輸出結果圖2.3程序輸出結果672.3.2關系運算符關系運算符用于比較兩個數(shù)據(jù)之間的大小關系,關系運算表達式返回布爾值,即“真”或“假”。Java中的常用關系運算符如下:== 等于!= 不等于> 大于< 小于>= 大于等于<= 小于等于2.3.2關系運算符68【例2.4】編寫程序,測試關系運算符及其表達式,程序輸出如圖2.4所示。源程序代碼如下://程序文件名稱為TestRelation.javapublicclassTestRelation{ publicstaticvoidmain(Stringargs[]) { //變量初始化
inta=30; intb=20; //定義結果變量
booleanr1,r2,r3,r4,r5,r6; //計算結果【例2.4】編寫程序,測試關系運算符及其表達式69 r1=a==b; r2=a!=b; r3=a>b; r4=a<b; r5=a>=b; r6=a<=b; //輸出結果
System.out.println("a="+a+"b="+b); System.out.println("a==b="+r1); System.out.println("a!=b="+r2); System.out.println("a>b="+r3); System.out.println("a<b="+r4); System.out.println("a>=b="+r5); System.out.println("a<=b="+r6);}} r1=a==b;70圖2.4程序輸出結果圖2.4程序輸出結果712.3.3布爾邏輯運算符表2.3布爾運算符及規(guī)則2.3.3布爾邏輯運算符表2.3布爾運算符及規(guī)則72
圖2.3為布爾邏輯運算符及其規(guī)則示例等。其中簡潔與和簡潔或的執(zhí)行結果分別與非簡潔與和非簡潔或的執(zhí)行結果是一致的,不同在于簡潔與檢測出符號左端的值為假時,不再判斷符號右端的值,直接將運算結果置為假;而簡潔或與非簡潔或的不同在于簡潔或檢測出符號左端為真時,不再判斷符號右端的值,直接將運算結果置為真。例如:Booleana=false;Booleanb=true;a&&b檢測到a為假,則無需判斷b的值,直接將值置為假;而b||a時檢測到b為真,則無需判斷a的值,直接將值置為真。圖2.3為布爾邏輯運算符及其規(guī)則示例等。其中73【例2.5】測試布爾表達式,程序輸出結果如圖2.5所示。源程序代碼如下://程序文件名稱為TestLogic.javapublicclassTestLogic{ publicstaticvoidmain(Stringargs[]) { //變量初始化
booleana=false; booleanb=true; //定義結果變量
booleanr1,r2,r3,r4,r5,r6; //計算結果【例2.5】測試布爾表達式,程序輸出結果如圖274 r1=!a; r2=a&b; r3=a|b; r4=a^b; r5=a&&b; r6=a||b; //輸出結果
System.out.println("a="+a+"b="+b); System.out.println("!a="+r1); System.out.println("a&b="+r2); System.out.println("a|b="+r3); System.out.println("a^b="+r4); System.out.println("a&&b="+r5); System.out.println("a||b="+r6); }} r1=!a;75圖2.5程序輸出結果圖2.5程序輸出結果762.3.4位運算符Java中的常用位運算符如下:~ 位求反& 按位與| 按位或^ 按位異或<< 左移>> 右移>>> 不帶符號右移右移運算符對應的表達式為x>>a,運算的結果是操作數(shù)x被2的a次方來除,左移運算符對應的表達式為x<<a,運算的結果是操作數(shù)x乘以2的a次方。2.3.4位運算符77【例2.6】測試位運算符<<和>>,程序輸出結果如圖2.6所示。源程序代碼如下://程序文件名稱為TestBit.javapublicclassTestBit{ publicstaticvoidmain(Stringargs[]) { //變量初始化
inta=36; intb=2; //定義結果變量
intr1,r2;【例2.6】測試位運算符<<和>>,程序輸出結78 //計算結果
r1=a>>b; r2=a<<b; //輸出結果
System.out.println("a="+a+"b="+b); System.out.println("a>>b="+r1); System.out.println("a<<b="+r2);}} //計算結果79圖2.6程序輸出結果圖2.6程序輸出結果802.3.5賦值運算符賦值運算符分為簡單運算符和復雜運算符。簡單運算符指“=”,而復雜運算符是指算術運算符、邏輯運算符、位運算符中的雙目運算符后面再加上“=”。表2.4列出Java常用的賦值運算符及其等價表達式。 2.3.5賦值運算符81表2.4賦值運算符及其等價表達式表2.4賦值運算符及其等價表達式822.3.6其它操作符及其表達式三目運算符(?:)相當于條件判斷,表達式x?y:z用于判斷x是否為真,如果為真,表達式的值為y,否則表達式的值為z。例如:intx=5;inta=(x>3)?5:3;則a的值為5。如果x=2,則a的值為3。2.3.6其它操作符及其表達式83
對象運算符(instanceof)用來判斷一個對象是否屬于某個指定的類或其子類的實例,如果是,返回真(true),否則返回假(false)。例如:
booleanb=userObjectinstanceofApplet用來判斷userObject類是否是Applet類的實例。對象運算符(instanceof)用來判斷一842.3.7優(yōu)先級表2.5運算符優(yōu)先級2.3.7優(yōu)先級表2.5運算符優(yōu)先級852.4流程控制
流程控制分為三種基本結構:順序結構、分支結構和循環(huán)結構。順序結構是指命令行順序執(zhí)行,這是最常見的一個格式;分支結構是一種選擇結構,根據(jù)條件的值選擇不同的執(zhí)行流程,可以得到不同的結果。分支結構包括單分支語句(if-else語句)和多分支語句(switch語句);循環(huán)結構是指對于一些重復執(zhí)行的語句,用戶指定條件或次數(shù),由機器自動識別執(zhí)行。循環(huán)結構包括次數(shù)循環(huán)語句(for語句)和條件循環(huán)語句(while語句)。2.4流程控制流程控制分為三種基本862.4.1分支語句分支語句分為兩類:單分支語句和多選語句。1.if-else語句if-else語句的基本格式為:if(布爾表達式){
語句或塊1;}else{
語句或塊2;}2.4.1分支語句87
其中:
(1)布爾表達式返回值為true或false。
(2)如果為true,則執(zhí)行語句或塊1,執(zhí)行完畢跳出if-else語句。
(3)如果為false,則跳過語句或塊1,然后執(zhí)行else下的語句或塊2。其中:88【例2.7】測試if-else語句,如果x>10,則輸出x的值,并提示結果正確,否則輸出x=10,提示結果不正確。程序輸出結果如圖2.7所示。源程序代碼如下://程序文件名稱為TestIf.javapublicclassTestIf{ //聲明全局變量x staticintx; publicstaticvoidmain(Stringargs[]) { x=12; if(x>10) {【例2.7】測試if-else語句,如果x>189 System.out.println("x="+x+"結果正確"); } else System.out.println("x=10"+"結果不正確"); change(); System.out.println("修改x的值之后"); if(x>10) { System.out.println("x="+x+"結果正確"); } else System.out.println("x=10"+"結果不正確");} System.out.println("x90//change方法:修改x的值publicstaticvoidchange(){ x=5;}}//change方法:修改x的值91圖2.7程序輸出結果圖2.7程序輸出結果922.switch語句switch語句的基本格式為:switch(表達式1){case表達式2:
語句或塊2; break;case表達式3:
語句或塊3; break;case表達式4:
語句或塊4; break;default:
語句或塊5; break;}2.switch語句93其中:(1)表達式1的值必須與整型兼容。(2)?case分支要執(zhí)行的程序語句。(3)表達式2、3、4是可能出現(xiàn)的值。(4)不同的case分支對應著不同的語句或塊序列。
(5)?break表示跳出這一分支。其中:94【例2.8】測試switch語句,當x=1、2、3時,分別打印1、2、3,x不為這三個值時,打印x的值。程序輸出結果如圖2.8所示。源程序代碼如下://程序文件名稱為TestSwitch.javapublicclassTestSwitch{ publicstaticvoidmain(Stringargs[]) //聲明變量x intx; x=12;【例2.8】測試switch語句,當x=1、2、3時,95 System.out.println("x=12時打印的值"); choose(x); x=3; System.out.println("x=3時打印的值"); choose(x);}//choose方法:switch語句結構publicstaticvoidchoose(intx){ switch(x) { System.out.println("x=12時打印的值96 case1: System.out.println(1); break; case2: System.out.println(2); break; case3: System.out.println(3); break; default: System.out.println(x); } } } case1:97圖2.8程序輸出結果圖2.8程序輸出結果982.4.2for循環(huán)語句for循環(huán)語句實現(xiàn)已知次數(shù)的循環(huán),其基本格式為:for(初始化表達式;測試表達式;步長){
語句或塊;}2.4.2for循環(huán)語句99
其執(zhí)行順序如下:
(1)首先運行初始化表達式。
(2)然后計算測試表達式,如果表達式為true,執(zhí)行語句或塊;如果表達式為false,退出for循環(huán)。
(3)最后執(zhí)行步長。其執(zhí)行順序如下:100【例2.9】用for循環(huán)統(tǒng)計1~100(包括100)之間數(shù)的總和。程序輸出結果如圖2.9所示。源程序代碼如下://程序文件名稱為TestFor.javapublicclassTestFor{ publicstaticvoidmain(Stringargs[]) { intsum=0; for(inti=1;i<=100;i++) sum+=i; System.out.println("1到100(包括100)的數(shù)的總和為:"+sum); }}【例2.9】用for循環(huán)統(tǒng)計1~100(包括1101圖2.9程序輸出結果圖2.9程序輸出結果1022.4.3while循環(huán)語句
while循環(huán)語句實現(xiàn)受條件控制的循環(huán),其基本格式為:
while(布爾表達式){
語句或塊;}
當布爾表達式為true時,執(zhí)行語句或塊,否則跳出while循環(huán)。2.4.3while循環(huán)語句103上面for循環(huán)語句的例子改為while語句后如下所示:
intsum=0; inti=1; while(i<=100) { sum+=i;i++;} System.out.println("1到100(包括100)的數(shù)的總和為:"+sum);上面for循環(huán)語句的例子改為while語句后如下所示:1042.4.4do語句do語句實現(xiàn)受條件控制的循環(huán),其基本格式為:do{
語句或塊;}while(布爾表達式)2.4.4do語句105
先執(zhí)行語句或塊,然后再判斷布爾表達式。與while語句不同,當布爾表達式一次都不為true時,while語句一開始判斷就跳出循環(huán),不執(zhí)行語句或塊,而在do語句中則要執(zhí)行一次。上面那個例子改為do循環(huán)為:
intsum=0;inti=1;do{ sum+=i; i++;}while(i<=100);System.out.println("1到100(包括100)的數(shù)的總和為:"+sum);先執(zhí)行語句或塊,然后再判斷布爾表達式。與wh1062.5數(shù)組的使用2.5.1數(shù)組聲明數(shù)組的定義如下:
(1)首先是一個對象。
(2)存放相同的數(shù)據(jù)類型,可以是原始數(shù)據(jù)類型或類類型。
(3)所有的數(shù)組下標默認從0開始,而且訪問時不可超出定義的上限,否則會產(chǎn)生越界錯誤。2.5數(shù)組的使用2.5.1數(shù)組聲明107
數(shù)組聲明時實際是創(chuàng)建一個引用,通過代表引用的這個名字來引用數(shù)組。數(shù)組聲明格式如下:數(shù)據(jù)類型標識符[]
例如:
inta[];//聲明一個數(shù)據(jù)類型為整型的數(shù)組apencilb[];//聲明一個數(shù)據(jù)類型為pencil類的數(shù)組b數(shù)組聲明時實際是創(chuàng)建一個引用,通過代表引用的1082.5.2創(chuàng)建數(shù)組由于數(shù)組是一個對象,所以可以使用關鍵字new來創(chuàng)建一個數(shù)組,例如:a=newint[10];//創(chuàng)建存儲10個整型數(shù)據(jù)的數(shù)組ab=newpencil[20];//創(chuàng)建存儲20個pencil類數(shù)據(jù)的數(shù)組b
數(shù)組創(chuàng)建時,每個元素都按它所存放數(shù)據(jù)類型的缺省值被初始化,如上面數(shù)組a的值被初始化為0,也可以進行顯式初始化。在Java編程語言中,為了保證系統(tǒng)的安全,所有的變量在使用之前必須是初始化的,如果未初始化,編譯時會提示出錯。有兩種初始化數(shù)組的方式,分別如下:2.5.2創(chuàng)建數(shù)組109(1)創(chuàng)建數(shù)組后,對每個元素進行賦值。a[0]=5;a[1]=4;...a[9]=10;(2)直接在聲明的時候就說明其值,例如:inta[]={4,5,1,3,4,20,2};說明了一個長度為7的一維數(shù)組。(1)創(chuàng)建數(shù)組后,對每個元素進行賦值。110【例2.10】編寫程序測試數(shù)組,程序輸出結果如圖2.10所示。源程序代碼如下://程序文件名稱為TestArray.javapublicclassTestArray{ publicstaticvoidmain(Stringargs[]) { //聲明數(shù)組
inta[]; charb[]; //創(chuàng)建數(shù)組【例2.10】編寫程序測試數(shù)組,程序輸出結果如111 a=newint[3]; b=newchar[2]; //數(shù)組初始化
for(inti=0;i<3;i++) { a[i]=i*3; } b[0]='a'; b[1]='b'; //快速初始化數(shù)組
intc[]={0,1*3,2*3}; //輸出結果
System.out.print("數(shù)組a\n"); a=newint[3];112 for(inti=0;i<2;i++) { System.out.print(b[i]+""); } System.out.print("\n數(shù)組c\n"); for(inti=0;i<3;i++) { System.out.print(c[i]+""); }}} for(inti=0;i<2;i++)113圖2.10程序輸出結果圖2.10程序輸出結果114習題1.給出下列表達式的值。(1)3++4<<2^-8 (2)"abc"&123||8<<2(3)36>>2*4&&48<<8/4+2 (4)2*4&&0<2||4%22.編寫程序,統(tǒng)計課程編號為1001、1002、2001和3001的平均成績并輸出。學生成績表如圖2.11所示?!久總€課程編號的成績用數(shù)組存儲,讀取時循環(huán)操作】習題1.給出下列表達式的值。115圖2.11習題2.2的成績表圖2.11習題2.2的成績表1163.根據(jù)上題得出的考生平均成績進行判斷,如果在90分以上,屏幕上輸出“課程編號為XXXX的考生平均成績?yōu)閮?yōu)”;在80~90分之間輸出“課程編號為XXXX的考生平均成績?yōu)榱肌?;?0~80分之間輸出“課程編號為XXXX的考生平均成績?yōu)橹小?,?0~70分之間輸出“課程編號為XXXX的考生平均成績?yōu)榧案瘛保?0分以下輸出“課程編號為XXXX的考生平均成績?yōu)椴患案瘛薄?/p>
4.編寫程序,用數(shù)組實現(xiàn)乘法小九九的存儲和輸出?!咎崾荆翰捎枚鄠€一維數(shù)組?!?.根據(jù)上題得出的考生平均成績進行判斷,117第3章類和接口3.1類3.2接口3.3常用數(shù)據(jù)結構及類習題
第3章類和接口3.1類1183.1類3.1.1類的定義和聲明
Java編程語言是面向?qū)ο蟮?,處理的最小的完整單元為對象。而現(xiàn)實生活中具有共同特性的對象的抽象就稱之為類。類由類聲明和類體構成,類體又由變量和方法構成。下面給出一個例子來看一下類的構成。
【例3.1】自定義一個apple類,在主類SetApple中創(chuàng)建實例并調(diào)用方法,輸出結果如圖3.1所示。源程序代碼如下:3.1類3.1.1類的定義和聲明119//程序文件名為SetApple.javapublicclassSetApple{ publicstaticvoidmain(String[]args) { applea=newapple();//創(chuàng)建apple類
a.appleweight=0.5;//實例變量賦值
System.out.println("蘋果的重量為1兩"); System.out.println(a.bite());//調(diào)用實例方法
a.appleweight=5; System.out.println("蘋果的重量為5兩"); System.out.println(a.bite()); }}//程序文件名為SetApple.java120//自定義類classapple{ //屬性
longapplecolor;//對應蘋果的顏色
doubleappleweight;//蘋果的重量
booleaneatup;//是否吃完
//類方法
publicbooleanbite() { if(appleweight<1) { System.out.println("蘋果已經(jīng)吃完了!哈哈"); eatup=true; }//自定義類121 else { System.out.println("蘋果吃不下了?。?"); eatup=false; } returneatup;}} else122圖3.1自定義類的應用圖3.1自定義類的應用123
1.類聲明的基本格式訪問說明符class類名extends超類名implements接口名其中:
(1)訪問說明符為public或者缺省。public用來聲明該類為公有類,可以被別的對象訪問。聲明為公有的類存儲的文件名為類名。
(2)類名:用戶自定義的標識符,用來標志這個類的引用。
(3)超類名:是指已經(jīng)存在的類,可以是用戶已經(jīng)定義的,也可以是系統(tǒng)類。
(4)接口名:即后面講到的接口。1.類聲明的基本格式124
例如:
publicclassHelloAppletextendsApplet
訪問說明符為public,類名HelloApplet,擴展類為JDK包自帶的java.applet.Applet類。由于public的存在,所以文件名必須存為HelloApplet.java,同類名保持一致。例如:125
2.類體類體包括成員變量和方法。
(1)成員變量:指類的一些屬性定義,標志類的靜態(tài)特征,它的基本格式如下:訪問說明符數(shù)據(jù)類型變量名其中:●訪問說明符有public、private和protected三種:
public:省略時默認為公有類型,可以由外部對象進行訪問。
private:私有類型,只允許在類內(nèi)部的方法中使用,若從外部訪問,必須通過構造函數(shù)間接進行。
Protected:受保護類型,子類訪問受到限制?!駭?shù)據(jù)類型包括基本類型以及用戶自定義的擴展類型。2.類體126(2)方法:是類的操作定義,標志類的動態(tài)特征,它的基本格式如下:●訪問說明符數(shù)據(jù)類型方法名(數(shù)據(jù)類型1變量名1,數(shù)據(jù)類型2變量名2)
其中:●訪問說明符為public、private和protected,其使用方法與成員變量訪問說明符的使用方法一致?!駭?shù)據(jù)類型:包括基本數(shù)據(jù)類型和用戶自定義的擴展類型?!駭?shù)據(jù)類型為參數(shù)。(2)方法:是類的操作定義,標志類的動態(tài)特1273.創(chuàng)建類的實例使用關鍵字new進行創(chuàng)建,例如:HelloApplethp=newHelloApplet();例3.1中,自定義類apple,訪問標識符缺省,定義三個屬性:longapplecolor;//對應蘋果的顏色doubleappleweight;//蘋果的重量
booleaneatup;//是否吃完3.創(chuàng)建類的實例128一個方法為:
publicbooleanbite()//類方法{...}公有類SetApplet中引用自定義類,首先創(chuàng)建類的實例:
applea=newapple();其次賦初值:
a.appleweight=0.5;//實例變量賦值最后調(diào)用它的方法:
System.out.println(a.bite());//調(diào)用實例方法一個方法為:1293.1.2類的單繼承性
Java編程語言中允許用extends關鍵字從一個類擴展出一個新類,新類繼承超類的成員變量和方法,并可以覆蓋方法。
【例3.2】測試類的單繼承性,程序輸出結果如圖3.2所示。源程序代碼如下://程序文件名TestExtend.javapublicclassTestExtendextendsEmployee{ publicstaticvoidmain(String[]args) { System.out.println("覆蓋的方法調(diào)用:"+getSalary("王一",500));3.1.2類的單繼承性130System.out.println("繼承的方法調(diào)用:"+getSalary2("王一",500));System.out.println("覆蓋的方法調(diào)用:"+getSalary("王飛",10000));System.out.println(“繼承的方法調(diào)用:”+getSalary2(“王飛 ",10000));}publicstaticStringgetSalary(Stringname,intsalary){ Stringstr; if(salary>5000) str="名字:"+name+"Salary:"+salary; else str="名字:"+name+"Salary:低于5000";System.out.println(131 returnstr;}};classEmployee{publicStringname;//名字publicintsalary;//薪水publicstaticStringgetSalary(Stringname,intsalary){ Stringstr; str="名字:"+name+"Salary:"+salary; returnstr;} returnstr;132publicstaticStringgetSalary2(Stringname,intsalary){ Stringstr; str="名字:"+name+"Salary:"+salary; returnstr;}};publicstaticStringgetSalary133
程序中定義了父類Employee類,它有兩個方法getSalary和getSalary2,方法體的實現(xiàn)都是一致的,都為輸出名字和薪水的值。在TextExtend主類中覆蓋了getSalary方法,方法體重新定義為薪水低于5000時并不輸出薪水的值而是輸出“低于5000”,用于和繼承的getSalary2方法進行比較。由圖3.2可以看出覆蓋的方法按主程序中重定義的方法調(diào)用,而繼承的方法直接調(diào)用父類中的方法。程序中定義了父類Employee類,它有兩個134圖3.2測試單繼承性程序的輸出結果圖3.2測試單繼承性程序的輸出結果1353.1.3特殊變量類中有兩個特殊變量super和this。
1.super
類聲明中用關鍵字extends擴展了其超類之后,super用在擴展類中引用其超類中的成員變量。
【例3.3】使用super變量,輸出結果如圖3.3所示。源程序代碼如下://程序文件名為UseSuper.javapublicclassUseSuper{3.1.3特殊變量136 publicstaticvoidmain(String[]args) { Managerm=newManager(); ="王飛"; m.salary=10000; m.department="業(yè)務部"; System.out.println(m.getSalary()); }}classEmployee{ publicstaticvoidmain(Strin137 publicStringname;//名字
publicintsalary;//薪水
//方法
publicStringgetSalary() { Stringstr; str="名字:"+name+"\nSalary:"+salary;returnstr; }}classManagerextendsEmployee publicStringname;//名字138{publicStringdepartment;//部門
//方法
publicStringgetSalary(){//使用super變量調(diào)用超類的方法
returnsuper.getSalary()+"\nDepartment:"+department;}}{139圖3.3測試super變量的輸出圖3.3測試super變量的輸出1402.thisthis變量指向當前對象或?qū)嵗?/p>
str="名字:"+name+"\nSalary:"+salary;
上例中的語句可以換成下面的語句。
str="名字:"++"\nSalary:"+this.salary;
這兩者是等同的,因為在Java編程語言中,系統(tǒng)自動將this關鍵字與當前對象的變量相關聯(lián)。但有一種情況例外,就是當在某些完全分離的類中調(diào)用一個方法并將當前
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年籃球運動場地安全設施安裝與檢修合同3篇
- 2025版土地整治工程土方運輸居間代理協(xié)議3篇
- 2025版教育培訓投資入股合同范本大全3篇
- 2025年度個人與個人車輛購置借款合同2篇
- 2025版教職工宿舍分配與使用管理合同3篇
- 二零二五版留置車輛維修工程借款協(xié)議4篇
- 2024金融科技支付系統(tǒng)集成與運營合同
- 二零二五年度體育賽事官方運動服贊助合同示例3篇
- 渣土運輸及循環(huán)經(jīng)濟承包合同(二零二五年度)3篇
- 2025年達人帶貨直播平臺合作協(xié)議書2篇
- 2024企業(yè)答謝晚宴會務合同3篇
- 電氣工程及其自動化專業(yè)《畢業(yè)設計(論文)及答辯》教學大綱
- 《客艙安全管理與應急處置》課件-第14講 應急撤離
- 中華人民共和國文物保護法
- 節(jié)前物業(yè)安全培訓
- 阿里巴巴國際站:2024年珠寶眼鏡手表及配飾行業(yè)報告
- 高甘油三酯血癥相關的器官損傷
- 手術室護士考試題及答案
- 牙膏項目創(chuàng)業(yè)計劃書
- 單位食堂供餐方案
- DB42-T 2204-2024 湖沼濕地溫室氣體通量監(jiān)測技術規(guī)范
評論
0/150
提交評論