版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
Java程序設計教程
第1章Java和面向?qū)ο蟾攀?.1Java語言概述1.2面向?qū)ο筌浖_發(fā)方法概述1.3面向?qū)ο蟮幕靖拍畋菊滦〗Y(jié)思考與練習1.Java語言對軟件開發(fā)技術(shù)的影響2.Java語言的應用前景及特點3.Java語言特點4.JavaApplet5.豐富的類庫1.1Java語言概述1.Java語言對軟件開發(fā)技術(shù)的影響程序設計語言分四個發(fā)展階段:第一代語言(1GL):二進制機器代碼第二代語言(2GL):匯編語言(LowLevelLanguageLLL)第三代語言(3GL):高級語言(HLL)第四代語言(4GL):面向?qū)ο笳Z言(00P)特殊應用程序非過程化第五代語言:(?)2.Java語言的應用前景所有面向?qū)ο蟮膽瞄_發(fā),包括面向?qū)ο蟮氖录枋觥⑻幚?、綜合等。計算過程的可視化、可操作化的軟件的開發(fā)。動態(tài)畫面的設計,包括圖形圖像的調(diào)用。交互操作的設計(選擇交互、定向交互、控制流程等)。Internet的系統(tǒng)管理功能模塊的設計,包括
Web頁面的動態(tài)設計、管理和交互操作設計等。Intranet(企業(yè)內(nèi)部網(wǎng))上的軟件開發(fā)(直接面向企業(yè)內(nèi)部用戶的軟件)。與各類數(shù)據(jù)庫連接查詢的
SQL語句實現(xiàn)。其他應用類型的程序。3.Java語言的特點簡單面向?qū)ο蠓植夹贼敯粜园踩泽w系結(jié)構(gòu)中立可移植性解釋執(zhí)行高性能多線程動態(tài)性4.JavaApplet。Applet是Java的小應用程序,它是動態(tài)、安全、跨平臺的網(wǎng)絡應用程序。JavaApplet嵌入HTML(超文本標記性語言)語言,通過主頁發(fā)布到Internet。5.豐富的類庫Java提供了大量的類以滿足網(wǎng)絡化、多線程、面向?qū)ο笙到y(tǒng)的需要。6.Java和C、C++對于變量聲明、參數(shù)傳遞、操作符、流控制等,Java使用了和C、C++相同的傳統(tǒng),使得熟悉C、C++的程序員能很方便地進行編程。同時,Java為了實現(xiàn)其簡單、魯棒、安全等特性,也摒棄了C和C++中許多不合理的內(nèi)容。
1.2面向?qū)ο筌浖_發(fā)方法概述1.2.1.傳統(tǒng)軟件開發(fā)方法存在的問題軟件生產(chǎn)率低軟件重用程度低軟件維護艱辛軟件非用戶所需1.2面向?qū)ο筌浖_發(fā)方法概述1.2.2存在的問題的原因
傳統(tǒng)結(jié)構(gòu)化技術(shù)的缺點軟件結(jié)構(gòu)分析與結(jié)構(gòu)設計技術(shù)的本質(zhì)是功能分解,是圍繞實現(xiàn)處理功能的過程來構(gòu)造系統(tǒng)的。結(jié)構(gòu)化方法強調(diào)過程抽象和模塊化,是以過程(或操作)為中心來構(gòu)造系統(tǒng)和設計程序的。然而用戶需求的變化大部分是針對加工的,因此這種變化對基于過程的設計來說是災難。1.2面向?qū)ο筌浖_發(fā)方法概述1.2.3軟件工程的新途徑
面向?qū)ο笞鳛橐环N思想及編程語言,為軟件開發(fā)的整個過程:從分析設計到實現(xiàn),提供了一個完整解決方案。面向?qū)ο罂胺Q是軟件發(fā)展取得的里程碑式的偉大成就。面向?qū)ο蠓椒ê喗閺?0年代后期開始,進行了面向?qū)ο蠓治觯∣OA)、面向?qū)ο笤O計(OOD)和面向?qū)ο蟪绦蛟O計(OOP)等新的系統(tǒng)開發(fā)方式模型的研究,在有些文獻中統(tǒng)稱為OO范型。計算機的能力可以概括為三個方面:1)計算的能力;2)推理的能力;3)人機交互的能力。能同時支持這3種能力開發(fā)的技術(shù)是面向?qū)ο蟆C嫦驅(qū)ο蟮男枨蠓治龇椒ㄍㄟ^提供對象、對象間消息傳遞等語言機制,從而削弱了語義斷層。1.2.3軟件工程的新途徑1.3
面向?qū)ο蟮幕靖拍詈喍灾好嫦驅(qū)ο?對象+類+繼承+消息1.3面向?qū)ο蟮幕靖拍?/p>
屬性值規(guī)定了對象所有可能的狀態(tài)。對象的操作是指該對象可以展現(xiàn)的外部服務。例如,大型客機可視為對象,它具有位置、速度、顏色、容量等屬性,對于該對象可施行起飛、降落、加速、維修等操作,這些操作將或多或少地改變飛機的屬性值(狀態(tài))。(1)對象
在面向?qū)ο蟮南到y(tǒng)中,對象是基本的運行時的實體,它包括數(shù)據(jù)屬性,也包括作用于數(shù)據(jù)的操作(行為)。所以一個對象把屬性和行為密封成一個整體。1.3面向?qū)ο蟮幕靖拍?2)類。類是某些對象的共同特征(屬性和操作)的表示,對象是類的實例。例如,飛行器類包含位置、速度、顏色等屬性,以及起飛、降落、加速等操作。是否建立了一個豐富的類庫是衡量一個面向?qū)ο蟪绦蛟O計語言成熟與否的重要標志。(2)類1.3
面向?qū)ο蟮幕靖拍罾^承性是面向?qū)ο蟪绦蛟O計語言的最主要的特點,是其他語言(如面向過程語言)所沒有的。類之間的繼承關系是現(xiàn)實世界中遺傳關系的直接模擬,它表示類之間的內(nèi)在聯(lián)系以及對屬性和操作的共享,即子類可以沿用父類(被繼承類)的某些特征。當然,子類也可以具有自己獨立的屬性和操作。(3)繼承例如,飛行器、汽車和輪船可歸于交通工具類,飛行器類可以繼承交通工具類某些屬性和操作。除遺傳關系外,現(xiàn)實世界中還普遍存在著部分—整體關系。例如,飛機可由發(fā)動機、機身、機械控制系統(tǒng)、電子控制系統(tǒng)等構(gòu)成。聚集關系。1.3面向?qū)ο蟮幕靖拍钕鬟f是對象與其外部世界相互關聯(lián)的唯一途徑。對象可以向其他對象發(fā)出消息以請求服務,也可以響應其他對象傳來的消息,完成自身固有的某些操作,從而服務于其他對象。因為對象的操作主要用來響應外來消息并為其他對象提供服務,所以它們也被稱作“外來服務”。(4)消息例如,直升飛機可以響應輪船的海難急救信號,起飛,加速,飛赴出事地點并實施救助作業(yè)。圖1-1面向?qū)ο筌浖_發(fā)過程(軟件生命周期)本章小結(jié)理解Java,首先必須掌握它的一些基本概念:Java對軟件開發(fā)技術(shù)的影響;應用前景及特點;
Java是一種很典型的面向?qū)ο蟮某绦蛟O計語言。要掌握面向?qū)ο蟮囊恍┗靖拍睿簩ο蟆㈩?、繼承和消息。以便更好地學習和掌握Java語言。2.1
安裝并配置Java平臺
2.1.1Java平臺概述
Java平臺由Java應用編程接口(ApplicationProgrammingInterface,簡稱API)和Java虛擬機(Javavirtualmachine,簡稱JVM)構(gòu)成。
Java應用編程接口是已編譯的可在我們的程序中使用的代碼庫。它們使我們能夠添加現(xiàn)成的可定制的功能,以節(jié)約編程時間。
—般認為,Java虛擬機是建立在實際的處理器基礎上的假想的計算機。Java虛擬機規(guī)范為Java虛擬機(JVM)作了如下定義:在真實機器中用軟件模擬實現(xiàn)的一種想象機器。Java虛擬機代碼被存儲在.class文件中;每個文件都包含最多一個public類。
Java虛擬機規(guī)范為不同的硬件平臺提供了一種編譯Java技術(shù)代碼的規(guī)范,該規(guī)范使Java軟件獨立于平臺,因為編譯是針對作為虛擬機的“一般機器”而做,這個“一般機器”可用軟件模擬并運行于各種現(xiàn)存的計算機系統(tǒng),也可用硬件來實現(xiàn)。
Java程序并不是在本機操作系統(tǒng)上直接運行,而是通過Java虛擬機向本機操作系統(tǒng)進行解釋來運行。這就是說,任何安裝有Java虛擬機的計算機系統(tǒng)都可以運行Java程序,而不論最初開發(fā)應用程序的是何種計算機系統(tǒng)。2.1.2Java平臺的安裝
開始編寫Java程序前,需要在我們的計算機系統(tǒng)中安裝Java平臺。
Java平臺可從
網(wǎng)站免費下載,該網(wǎng)站上提供了免費的Java開發(fā)工具集(JavaDevelopersKits,簡稱JDK),我們可以在這里下載適合于我們計算機操作系統(tǒng)的JDK,利用這些工具來開發(fā)Java程序。2.2第一個JavaApplication程序
2.2.1編輯源程序
我們可以不采用任何集成開發(fā)環(huán)境,只是采用文本編輯器就可以編寫簡短的Java程序?!纠?.1】第一個JavaApplication程序
//MyFirstApp.javapublicclassMyFirstApp{publicstaticvoidmain(Stringargs[]){System.out.println("ThisismyfirstJavaApplication!");}}
本程序的作用是輸出下面一行信息:
ThisismyfirstJavaApplication!
在一個JavaApplication應用程序中,一定要有一個類包含main方法。而在本范例中,首先用保留字class來聲明一個新的類,其類名為MyFirstApp,它是一個公共類(public)。整個類定義由大括號{}括起來。在該類中定義了一個main方法,這個方法共有三個修飾語,其意義分別如下:(1)public:表示這個類的main方法可以被所有的對象使用。(2)static:指明該方法是一個類方法,它可以通過類名直接調(diào)用,表示main是屬于這個類所使用的方法,我們將之稱為“靜態(tài)方法”。
(3)void:表示main方法執(zhí)行后不會傳回任何值。這一點是重要的,因為Java編程語言要進行謹慎的類型檢查,包括檢查調(diào)用的方法確實返回了這些方法所聲明的類型。對于一個應用程序來說,main方法是必需的,而且必須按照如上的格式來定義。Java解釋器在沒有生成任何實例的情況下,以main作為入口來執(zhí)行程序。Java程序中可以定義多個類,每個類中可以定義多個方法,但是最多只能有一個公共類,main方法也只能有一個,作為程序的入口。main方法定義中,括號中的Stringargs[]是傳遞給main方法的參數(shù),參數(shù)名為args,它是String類的一個實例。參數(shù)可以為0個或多個,每個參數(shù)用“類名
參數(shù)名”來指定,多個參數(shù)間用逗號分隔。
對于本程序,還有以下值得注意的地方:(1)在main方法中,只有一條語句:
System.out.println("ThisismyfirstJavaApplication!");
它用來實現(xiàn)字符串的輸出,這條語句實現(xiàn)與C語言中的printf語句相同的功能。這里實際上是利用Java應用編程接口(API)向控制臺打印輸出一行文字。API中已經(jīng)有了可以使用的控制臺打印功能,我們只需要提供要打印的文字。
這行程序所做的事是使用由System類的out成員引用的PrintStream類的out對象的println方法,將字串“ThisismyfirstJavaApplication!”打印到標準輸出上。
(2)語句
System.out.println("ThisismyfirstJavaApplication!");
的最后有一個分號(;),在Java編程語言中,一個“;”代表一個語句的結(jié)束。例如語句
totals=a+b+c+d+e+f+g;與語句
total=a+b+c+d+e+f+g;是等價的。
(3)在程序中出現(xiàn)了大括號(“{”和“}”),它們是成對出現(xiàn)的,以{}為邊界的語句集合稱為一個塊(block)。語句塊可被嵌套,在本例中,MyFirstApp類是一個語句塊;MyFirstApp類由main方法構(gòu)成,main這個方法也是一個語句塊,它是一個獨立單元,單元本身又作為類MyFirstApp塊中一部分。(4)為了增強程序的可讀性,在程序中有多處空格,這不影響程序的執(zhí)行。
Java程序中允許任意多的空白。
(5)在本程序中第一行“//”后的內(nèi)容為注釋,進行編譯時,這一行的從“//”開始的所有內(nèi)容會被忽略。
Java里有兩種類型的注釋。第一種是傳統(tǒng)的、C語言風格的注釋,是從C++繼承而來的。這些注釋用一個“/*”起頭,隨后是注釋內(nèi)容,并可跨越多行,最后用一個“*/”結(jié)束;第二種類型的注釋也起源于C++,這種注釋叫作“單行注釋”,以一個“//”起頭,表示這一行的從“//”開始的所有內(nèi)容都是注釋,這種類型的注釋更常用,因為它書寫時更方便。
(6)程序名為MyFirstApp.java,和公共類的類名相同(包括大小寫都一致,唯一不同的地方就是程序名有擴展名.java而類名沒有擴展名),這是因為Java解釋器要求公共類必須放在與其同名的文件中。2.2.2字節(jié)碼的編譯生成程序必需轉(zhuǎn)換為Java虛擬機能夠理解的形式,這樣,任何安裝有Java虛擬機的計算機就可以解釋并運行該程序。編譯Java程序是指:提取程序文件中程序員可讀的文本(亦稱源代碼)并把它轉(zhuǎn)換成字節(jié)碼,字節(jié)碼是提供給Java虛擬機的與平臺無關的指令。Java編譯器是通過外殼操作系統(tǒng)中的命令行進行調(diào)用的,下面對該程序進行編譯,命令行調(diào)用命令為:
C:\>javacMyFirstApp.java
其中,“javac”是JDK工具包中提供的Java語言編譯器,輸出結(jié)果為Java字節(jié)碼。編譯的結(jié)果是生成字節(jié)碼文件MyFirstApp.class。需要留意的是,使用javac這個指令并沒有打開Java編譯器里的偵錯功能,所以你無法在它編譯出來的字節(jié)碼文件中找到與程序偵錯有關的數(shù)據(jù)信息。除非你用另外一個指令javac-g,它的編譯結(jié)果除了字節(jié)碼文件外還會附帶一些有用的除錯資料,可提供程序偵錯時用。事實上“javac”提供了一些指令參數(shù)供使用者編譯時選用,各個參數(shù)代表不同的功能,以下是常用的幾個:
(1)-calsspath<path>:告知編譯器何處去引用其他的類型對象。這個設定會取代你原先在開機執(zhí)行文件里已說明過的環(huán)境變量CLASSPATH。
(2)-d<directory>:指示編譯器將編譯后的執(zhí)行碼存放在特定的目錄下,在這里要使用絕對路徑。
(3)-g:啟動偵錯功能。2.2.3字節(jié)碼的解釋與運行現(xiàn)在可以運行該程序了,用Java解釋器來運行該字節(jié)碼文件:
C:\>javaMyFirstApp
其中,java是JDK工具包中提供的java解釋器。我們需留意的是,在這個指令行中文件名稱不須附上擴展名“.class”,因為解釋器本身會自行加入。2.3使用集成開發(fā)環(huán)境
毫無疑問,使用集成開發(fā)環(huán)境有很多的優(yōu)點,無論是在調(diào)試程序的過程中,還是編譯運行程序都方便很多,所以一般的程序員都會選擇一個集成開發(fā)環(huán)境來開發(fā)程序。
著名的Java集成開發(fā)環(huán)境有IBM公司的VisualAgeForJava、Microsoft公司的VJ++、Borland公司JavaBuilder等。對于初學者而言,集成開發(fā)環(huán)境的界面不能太復雜。適合于初學者學習的,應該是界面簡單一些,最好是不需要對開發(fā)環(huán)境做很多的設置的軟件。3.1Java程序的構(gòu)成
Java語言的源程序代碼由一個或多個編譯單元組成,每個編譯單元可包含三個要素:(1)一個包聲明(packagestatement,可選);(2)任意數(shù)量引入語句(importstatements);(3)類的聲明(classdeclarations)和接口聲明(interfacedeclarations)。該三要素必須以上述順序出現(xiàn)。也就是說任何引入語句出現(xiàn)在所有類定義之前;如果使用包聲明,則包聲明必須出現(xiàn)在類和引入語句之前。每個Java的編譯單元可包含多個類或接口,但是每個編譯單元最多只能有一個類或者接口是公共的。3.2關鍵字、標識符、
數(shù)據(jù)類型、常量與變量
3.2.1關鍵字關鍵字對Java編譯器有特殊的含義,它們可標識數(shù)據(jù)類型名或程序構(gòu)造(construct)名。
表3-1列出了在Java編程語言中使用的關鍵字。
有關關鍵字值得我們注意的地方:(1)true、false和null為小寫,而不是象在C++語言中那樣為大寫。嚴格地講,它們不是關鍵字,而是文字。然而,這種區(qū)別是理論上的。(2)無sizeof運算符,因為所有數(shù)據(jù)類型的長度和表示是固定的,與平臺無關,不是象在C語言中那樣數(shù)據(jù)類型的長度根據(jù)不同的平臺而變化。這正是Java語言的一大特點。(3)goto和const不是Java編程語言中使用的關鍵字。
3.2.2標識符在Java編程語言中,標識符是賦予變量、類或方法的名稱。變量、函數(shù)、類和對象的名稱都是標識符,程序員需要標識和使用的東西都需要標識符。標識符可從一個字母、下劃線(_)或美元符號($)開始,隨后也可跟數(shù)字、字母、下劃線或美元符號。標識符是區(qū)分大小寫,沒有長度限制,可以為標識符取任意長度的名字。下面是幾個有效的標識符:
identifier thisoneUserName User_name_system_varl$max下面是幾個非法的變量名:
3max
(變量名不能以數(shù)字開頭)
room#
(包含非法字符“#”)
class
(“class”為保留字)
標識符不能是關鍵字,但是它可以包含關鍵字作為它的名字的一部分。例如,thisone是一個有效標識符,但this卻不是,因為this是一個Java關鍵字。
3.2.3數(shù)據(jù)類型
Java編程語言有八個原始數(shù)據(jù)類型,可分為以下四種:1.邏輯類booleanboolean數(shù)據(jù)類型有兩種文字值:true和false。注意在Java編程語言中boolean類型只允許使用boolean值,在整數(shù)類型和boolean類型之間無轉(zhuǎn)換計算。在C語言中允許將數(shù)字值轉(zhuǎn)換成邏輯值,這在Java編程語言中是不允許的。
2.字符類char
使用char類型可表示單個字符,字符是用單引號括起來的一個字符,如‘a(chǎn)’,‘B’等。
Java中的字符型數(shù)據(jù)是16位無符號型數(shù)據(jù),它表示Unicode集,而不僅僅是ASCII集。與C語言類似,Java也提供轉(zhuǎn)義字符,以反斜杠(\)開頭,將其后的字符轉(zhuǎn)變?yōu)榱硗獾暮x。
表3-2列出了Java中的轉(zhuǎn)義字符。
值得注意的一點是,用雙引號引用的文字,就是我們平時所說的字符串類型不是原始類型,而是一個類(class)String,它被用來表示字符序列。字符本身符合Unicode標準,且上述char類型的轉(zhuǎn)義字符適用于String。
3.整數(shù)類byte,short,int,long
在Java編程語言中有四種整數(shù)類型,每種類型可使用關鍵字byte,short,int和long中的任意一個進行聲明。所有Java編程語言中的整數(shù)類型都是帶符號的數(shù)字,不存在無符號整數(shù)。
整數(shù)類型的文字可使用十進制、八進制和十六進制表示。首位為“0”表示八進制的數(shù)值;首位為“0x”表示16進制的數(shù)值。請看下面的例子:
5
表示十進制值5
075
表示八進制數(shù)值75
(也就是十進制數(shù)61)
0x9ABC
表示十六進制的數(shù)值9ABC
(也就是十進制數(shù)39612)整數(shù)類缺省為int類型,如在其后有一個字母“L”表示一個long值(也可以用小寫“l(fā)”)。由于小寫“l(fā)”與數(shù)字“1”容易混淆,因而,建議大家采用大寫“L”。上面所說的整數(shù)long的形式如下:
5L
表示十進制值5,是一個long值
075L
表示八進制數(shù)值75,是一個long值
0x9ABCL
表示十六進制的數(shù)值9ABC,是一個long值四種整數(shù)類型的存儲空間長度、能表示的范圍是不一樣的,如表3-3所示。
4.浮點類double,float
在Java編程語言中有兩種浮點類型:float和double。如果一個數(shù)包括小數(shù)點或指數(shù)部分,或者在數(shù)字后帶有字母F或f(float)、D或d(double),則該數(shù)為浮點數(shù)。如果不明確指明浮點數(shù)的類型,浮點數(shù)缺省為double。下面是幾個浮點數(shù):
3.14159
(double型浮點數(shù))
2.08E25
(double型浮點數(shù))
6.56f
(float型浮點數(shù))在兩種類型的浮點數(shù)中,float為32位(單精度),double為64位(雙精度)。也就是說double類型的浮點數(shù)具有更高的精度。
3.2.4常量與變量
在Java中,不同類型的數(shù)據(jù)既可以以常量的形式出現(xiàn),也可以以變量的形式出現(xiàn)。常量就是指在程序執(zhí)行期間其值不能發(fā)生變化的數(shù)據(jù),常量是固定的。如整型常量123,實型常量1.23,字符常量'A',布爾常量true等。變量的值則是可以變化的,它的定義包括變量名、變量類型和作用域幾個部分。注意以下幾點:(1)變量名必須是一個合法的標識符。變量名應具有一定的含義,以增加程序的可讀性。(2)變量類型可以為前面所說的任意一種數(shù)據(jù)類型。
(3)聲明一個變量的同時也就指明了變量的作用域,變量的作用域指明可訪問該變量的一段代碼。按作用域來分,變量可以有下面幾種:局部變量、類變量、方法參數(shù)、例外處理參數(shù)。局部(local)變量是在一個方法內(nèi)定義的變量,也被稱作自動(automatic)、臨時(temporary)或棧(stack)變量。當執(zhí)行進入一個方法時,局部變量被創(chuàng)建,當執(zhí)行離開該方法時,局部變量被清除,它的作用域為它所在的代碼塊(整個方法或方法中的某塊代碼)。在成員函數(shù)內(nèi)定義的變量對該成員變量是“局部的”,因而,你可以在幾個成員函數(shù)中使用相同的變量名而代表不同的變量。
在一個確定的域中,變量名應該是唯一的。通常,一個域用大括號“{”和“}”來劃定。
(4)下面是幾個變量的聲明:
inta,b,c;//定義a,b,c為int型變量
doubled,e;//定義d,e為double型變量
floatf=2.5,g=5.8;//定義f,g為float型變量,并賦初值其中,多個變量間用逗號隔開。(5)在Java程序中聲明變量后,需給該變量賦值??捎觅x值語句來初始化變量——任何變量都不能沒有初始值(否則,則無法通過編譯)。
賦值方式如下:將已聲明的變量名放在左邊,然后是等號(=),右邊是有適當值的Java表達式。
它的意思是“取得右邊的值,把它復制到左邊”。右邊的值可以是任何常數(shù)、變量或者表達式,只要能產(chǎn)生一個值就行。但左邊的值必須是一個明確的、已命名的變量。如:
inta;
//這是聲明
a=45;
//這是賦值
charc; //這是聲明
c=‘y’;//這是賦值
相對于一個方法的“局部”變量,如果在初始化之前想使用它,編譯器會提示出錯,如下面這樣就是不允許的:
voidf()
{inti;
i=i+1;}
當一個對象被創(chuàng)建時,實例變量在分配存儲器的同時被值初始化。初始化值如表3-4所示。
下面給出幾個Java程序的例子,使大家對數(shù)據(jù)類型進一步加深理解。【例3.1】Java中的數(shù)據(jù)類型【例3.2】Java中變量的作用域
【例3.3】Java中對象的初始化
3.3運算符
按照運算符功能來分,基本的運算符分包括算術(shù)運算符、關系運算符、邏輯運算符、位運算符、賦值運算符、條件運算符等。
3.3.1算術(shù)運算
算術(shù)運算符包括加號(+)、減號(-)、乘號(*)、除號(/)、取模(%)、自增運算符(++)、自減運算符(--)等。在算術(shù)運算中,有以下值得注意的地方:(1)算術(shù)運算符的總體原則是先乘除、再加減,括號優(yōu)先。(2)整數(shù)除法會直接砍掉小數(shù),而不是進位。
(3)與C語言不同,對取模運算符%來說,其操作數(shù)可以為浮點數(shù)。如:37.2%10=7.2。(4)Java也用一種簡寫形式進行運算,并同時進行賦值操作。例如,為了將10加到變量x,并將結(jié)果賦給x,可用:x+=10。(5)Java對加運算符進行了擴展,使它能夠進行字符串的連接,如"abc"+"def",得到串"abcdef"。(6)前綴++、--與后綴++、--的區(qū)別:
++i(前綴++)在使用i之前,使i的值加1,因此執(zhí)行完++i后,整個表達式和i的值均為i+1;
i++(后綴++)在使用i之后,使i的值加1,因此執(zhí)行完i++后,整個表達式的值為i,而i的值變?yōu)閕+1。
--i在使用i之前,使i的減1,因此執(zhí)行完--i后,整個表達式和i的值均為i-1;i--在使用i之后,使i的減1,因此執(zhí)行完i--后,整個表達式的值為i,而i的值變?yōu)閕-1?!纠?.4】Java中算術(shù)運算符的使用3.3.2關系運算
關系運算符用來比較兩個值,返回布爾類型的值true或false。關系運算符都是二元運算符,如表3-5所示。
對“或運算”如果運算符左邊的表達式的值為true,則整個表達式的結(jié)果為true,不必對運算符右邊的表達式再進行運算;同樣,對“與運算”,如果左邊表達式的值為false,則不必對右邊的表達式求值,整個表達式的結(jié)果為false。【例3.6】Java中邏輯運算符的使用
3.3.4位運算
在Java語言中,位運算符有按位與運算符(&)、按位或運算符(|)、按位異或運算符(^)、按位取反運算符(~)、左移位運算符(<<)和右移位運算符(>>)。1.按位與運算(&)參與運算的兩個值,如果兩個相應位都為1,則該位的結(jié)果為1,否則為0。即:0&0=0,0&1=0,1&0=0,1&1=12.按位或運算(|)參與運算的兩個值,如果兩個相應位都是0,則該位結(jié)果為0,否則為1。即:0|0=0,0|1=1,1|0=1,1|1=13.按位異或運算(^)參與運算的兩個值,如果兩個相應位的某一個是1,另一個是0,那么按位異或(^)在該位的結(jié)果為1。也就是說如果兩個相應位相同,輸出位為0,否則為1。即:0^0=0,0^1=1,1^0=1,1^1=04.按位取反運算(~)按位取反運算(~)屬于一元運算符,它只對一個自變量進行操作(其他所有運算符都是二元運算符)。按位取反生成與輸入位的相反的值——若輸入0,則輸出1;輸入1,則輸出0。即:~0=1,~1=05.左移位運算符(<<)運算符<<執(zhí)行一個左移位。作左移位運算時,右邊的空位補0。在不產(chǎn)生溢出的情況下,數(shù)據(jù)左移1位相當于乘以2。例如:
inta=64,b;b=a<<1; //b=1286.右移位運算符(>>與>>>)運算符>>執(zhí)行一個右移位(帶符號),左邊按符號位補0或1例如:
inta=16,b;b=a>>2; //b=4
運算符>>>同樣是執(zhí)行一個右移位,只是它執(zhí)行的是不帶符號的移位。也就是說對以補碼表示的二進制數(shù)操作時,在帶符號的右移中,右移后左邊留下的空位中添入的是原數(shù)的符號位(正數(shù)為0,負數(shù)為1);在不帶符號的右移中,右移后左邊留下的空位中添入的一律是0。
【例3.7】Java中位運算符的使用
3.3.5類型轉(zhuǎn)換
Java程序里,將一種數(shù)據(jù)類型的常數(shù)或變量轉(zhuǎn)換到另外的一種數(shù)據(jù)類型,稱為類型轉(zhuǎn)換。類型轉(zhuǎn)換有兩種:自動類型轉(zhuǎn)換(或稱隱含類型轉(zhuǎn)換)和強制類型轉(zhuǎn)換。在實際中常會將一種類型的值賦給另外一種變量類型。如果這兩種類型是兼容的,Java將執(zhí)行自動類型轉(zhuǎn)換。簡單的說,當把占用位數(shù)較短的數(shù)據(jù)轉(zhuǎn)化成占用位數(shù)較長的數(shù)據(jù)時,Java執(zhí)行自動類型轉(zhuǎn)換,不需要在程序中作特別的說明。例如,下面的語句把int型數(shù)據(jù)賦值給long型數(shù)據(jù),在編譯時不會發(fā)生任何錯誤:
inti=10;longj=i;
假若對主數(shù)據(jù)類型執(zhí)行任何算術(shù)運算或按位運算,“比int小”的數(shù)據(jù)(char、byte、short)在正式執(zhí)行運算之前,那些值會自動轉(zhuǎn)換成int,這樣一來,最終生成的值就是int類型。整型、實型、字符型數(shù)據(jù)可以混合運算。運算中,不同類型的數(shù)據(jù)先轉(zhuǎn)化為同一類型,然后進行運算,轉(zhuǎn)換從低級到高級。通常,表達式中最大的數(shù)據(jù)類型是決定了表達式最終結(jié)果大小的那個類型。例如:若將一個float值與一個double值相乘,結(jié)果就是double;如將一個int值和一個long值相加,則結(jié)果為long。
不是所有的數(shù)據(jù)類型都允許隱含自動轉(zhuǎn)換。例如,下面的語句把long型數(shù)據(jù)賦值給int型數(shù)據(jù),在編譯時就會發(fā)生錯誤:
longi=10;intj=i;
這是因為當把占用位數(shù)較長的數(shù)據(jù)轉(zhuǎn)化成占用位數(shù)較短的數(shù)據(jù)時,會出現(xiàn)信息丟失的情況,因而不能夠自動轉(zhuǎn)換。這時就需要利用強制類型轉(zhuǎn)換,執(zhí)行非兼容類型之間的類型轉(zhuǎn)換。上面的語句寫成下面的形式就不會發(fā)生錯誤:
longi=10;intj=(int)i;
強制類型轉(zhuǎn)換的格式是:
(數(shù)據(jù)類型)變量名
經(jīng)過強制類型轉(zhuǎn)換,將得到一個在“()”中聲明的數(shù)據(jù)類型的數(shù)據(jù),該數(shù)據(jù)是從指定變量所包含的數(shù)據(jù)轉(zhuǎn)換而來的。值得注意的是,指定變量本身不會發(fā)生任何變化。將占用位數(shù)較長的數(shù)據(jù)轉(zhuǎn)化成占用位數(shù)較短的數(shù)據(jù)時,可能會造成數(shù)據(jù)超出較短數(shù)據(jù)類型的取值范圍,造成“溢出”。如:
longi=10000000000;intj=(int)i;
因為轉(zhuǎn)換的結(jié)果已經(jīng)超出了int型數(shù)據(jù)所能表示的最大整數(shù)(4294967295),造成溢出,產(chǎn)生了錯誤。shorta,b,c;a=2;b=3;c=(short)(a+b);
shorta,b,c;a=2;b=3;c=a+b;
【例3.8】Java中的類型轉(zhuǎn)換
3.3.6其他運算符1.三目條件運算符(?:)在Java語言中,三目條件運算符(?:)與C語言中的使用規(guī)則是完全一致的,使用的形式是:
x?y:z;
上面的三目條件運算的規(guī)則是:先計算表達式x的值,若x為真,則整個三目運算的結(jié)果是表達式y(tǒng)的值;若x為假,則整個三目運算的結(jié)果是表達式z的值。下面的例子實現(xiàn)了從兩個數(shù)中找出較大的數(shù)的功能。
inta=3,b=4;intmax=a>b?a:b;
max的值為4。
三目條件運算是可以嵌套的,如有以下的語句,則max表示的是a、b、c三個數(shù)中的最大值,其值為5。
inta=3,b=4,c=5;intmax=(a>b?a:b)>c?(a>b?a:b):c;2.復合賦值運算符賦值運算符“=”的作用是將運算符右邊表達式的值賦給左邊的變量。復合賦值運算符的作用是先進行某種運算后,再對運算的結(jié)果進行賦值操作。
Java可以用一種簡寫形式進行運算,并同時進行賦值操作。例如,為了將10加到變量x,并將結(jié)果賦給x,可用:x+=10(等價與x=x+10)。實際上不只是“+”可以這么做,表3-7列出了Java中的所有復合賦值運算符。
3.對象運算符(instanceof)對象運算符instanceof用來判斷一個對象是否是某一個類或者其子類的實例。如果對象是該類或者其子類的實例,返回ture;否則返回flase。4.()和[]
括號運算符()的優(yōu)先級是所有運算符中最高的,所以它可以改變表達式運算的先后順序。在有些情況下,它可以表示方法或函數(shù)的調(diào)用。方括號運算符[]是數(shù)組運算符。5.
.運算符.運算符用于訪問對象實例或者類的類成員函數(shù)。6.new運算符
new運算符用于創(chuàng)建一個新的對象或者新的數(shù)組。3.3.7運算符的優(yōu)先級與結(jié)合性優(yōu)先級決定了同一表達式中多個運算符被執(zhí)行的先后次序,如乘除運算優(yōu)先于加減運算,同一級里的運算符具有相同的優(yōu)先級。運算符的結(jié)合性則決定了相同優(yōu)先級的運算符的執(zhí)行順序。表3-8列出了Java中運算符的優(yōu)先級與結(jié)合性。因為括號優(yōu)先級最高,所以不論任何時候,當我們一時無法確定某種計算的執(zhí)行次序時,可以使用加括號的方法來明確指定運算的順序,這樣不容易出錯,同時也是提高程序可讀性的一個重要方法。3.4流程控制語句
3.4.1結(jié)構(gòu)化程序設計的三種基本流程
1.自頂向下
2.逐步求精
3.模塊化
除了以上的原則,結(jié)構(gòu)化程序設計還有一個重要的規(guī)定,那就是只能使用“順序結(jié)構(gòu)”、“選擇結(jié)構(gòu)”、“循環(huán)結(jié)構(gòu)”這三種基本結(jié)構(gòu)(或由它們派生出來的結(jié)構(gòu))來定義程序的流程。三種基本流程控制結(jié)構(gòu)示意圖分別如圖3-1所示。3.4.2選擇結(jié)構(gòu)如圖3-1(b)所示,選擇結(jié)構(gòu)又稱為分支結(jié)構(gòu),是在兩種或兩種以上的多條執(zhí)行路徑中選擇一條執(zhí)行的控制結(jié)構(gòu)。1.if—else語句
if(條件表達式){語句組1;}
else
{語句組2;}
在if—else語句中,else部分是選擇性的。經(jīng)??梢钥吹街挥衖f語句,而沒有else語句的情況。在這種情況下,當測試條件為假時如不需做任何事,else部分可被省略。這時,其語法形式如下:
if(條件表達式){ 語句組;}其流程如圖3-3所示。【例3.9】
求三個數(shù)中的最大者2.switch語句
switch語句(又稱開關語句)是和case語句一起使用的,其功能是根據(jù)某個表達式的值在多個case引導的多個分支語句中選擇一個來執(zhí)行。它的一般格式如下:
switch(表達式)
{case判斷值1:語句塊1case判斷值2:語句塊2case判斷值3:語句塊3
……case判斷值n:語句塊ndefault:語句塊n+1}switch后面括號中表達式的值必須是符合byte,char,short,int類型的常量表達式,而不能用浮點類型或long類型,也不能為一個字符串。一個switch語句可以代替多個if—else語句組成的分支結(jié)構(gòu),而switch語句從思路上顯得更清晰?!纠?.10】根據(jù)不同的四則運算符(+、-、*、/),對兩個實數(shù)執(zhí)行相應的運算并輸出結(jié)果?!纠?.11】對例3.10的修改3.4.3循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是程序中一種重要的基本結(jié)構(gòu),是指在一定的條件下反復執(zhí)行某段程序,被反復執(zhí)行的這段程序稱為“循環(huán)體”。
Java中有三種語句來實現(xiàn)循環(huán)結(jié)構(gòu),分別是while,do-while和for語句。它們的結(jié)構(gòu)分別如圖3-4所示。1.while語句while語句的格式如下:
while(條件表達式){
循環(huán)體語句;
}
在循環(huán)剛開始時,會計算一次“條件表達式”的值。當條件為假時,將不執(zhí)行循環(huán)體,直接跳轉(zhuǎn)到循環(huán)體外,執(zhí)行循環(huán)體外的后續(xù)語句;當條件為真時,便執(zhí)行循環(huán)體。每執(zhí)行完一次循環(huán)體,都會重新計算一次條件表達式,當條件為真時,便繼續(xù)執(zhí)行循環(huán)體,直到條件為假才結(jié)束循環(huán)。while語句的結(jié)構(gòu)如圖3-4(a)所示?!纠?.12】用while語句計算10的階乘2.do-while語句
do-while語句的格式如下:
do{
循環(huán)體語句;
}while(條件表達式)
do-while循環(huán)與while循環(huán)的不同在于:它先執(zhí)行循環(huán)中的語句,然后再判斷條件是否為真,如果為真則繼續(xù)循環(huán);如果為假,則終止循環(huán)。因此,do-while循環(huán)至少要執(zhí)行一次循環(huán)語句。
do-while語句的結(jié)構(gòu)如圖3-4(b)所示。【例3.13】用do-while語句計算10的階乘3.for語句
for語句是三個循環(huán)語句中功能最強,使用最廣泛的一個。for語句的格式如下:
for(表達式1;表達式2;表達式3){
循環(huán)體語句;
}
表達式1一般是一個賦值語句,它用來給循環(huán)控制變量賦初值;表達式2是一個布爾類型的表達式,它決定什么時候退出循環(huán);表達式3一般用來修改循環(huán)變量,控制變量每循環(huán)一次后按什么方式變化。這三個部分之間用“;”分開。
for語句的結(jié)構(gòu)如圖3-4(c)所示。for語句的執(zhí)行過程:(1)在循環(huán)剛開始時,先計算表達式1,在這個過程中,一般完成的是初始化循環(huán)變量或其它變量。(2)根據(jù)表達式2的值來決定是否執(zhí)行循環(huán)體。表達式2是一個返回布爾值的表達式,若該值為假,將不執(zhí)行循環(huán)體,并退出循環(huán);若該值為真,將執(zhí)行循環(huán)體。(3)執(zhí)行完一次循環(huán)體后,計算表達式3。在這個過程中一般會修改循環(huán)變量。(4)轉(zhuǎn)入第(2)步繼續(xù)執(zhí)行。【例3.14】用for語句計算10的階乘
【例3.15】for語句的嵌套
3.4.4跳轉(zhuǎn)語句跳轉(zhuǎn)語句用來實現(xiàn)循環(huán)執(zhí)行過程中的流程轉(zhuǎn)移。在switch語句中使用過的break語句就是一種跳轉(zhuǎn)語句。在Java語言中,有兩種跳轉(zhuǎn)語句:break語句和continue語句。在Java語言中,可用break和continue控制循環(huán)的流程。其中,break用于強行退出循環(huán),不執(zhí)行循環(huán)中剩余的語句。而continue則停止執(zhí)行當前的循環(huán),開始新的循環(huán)。
break語句和continue語句都有兩種使用的形式:一種是不帶標號的break語句和continue語句;一種是帶標號的break語句和continue語句。11.不帶標號的break語句和continue語句【例3.16】使用break語句跳出循環(huán)體【例3.17】使用continue語句終止當前循環(huán)
2.帶標號的break語句和continue語句
標號應該定義在某一個循環(huán)語句之前,緊靠在循環(huán)語句的前方,用來標志這個循環(huán)結(jié)構(gòu),在標號和循環(huán)之間置入任何語句都是不明智的行為。而在循環(huán)之前設置標號的唯一理由是:我們希望在其中嵌套另一個循環(huán)或者一個開關,break和continue關鍵字若隨同標號使用,它們就會中斷到存在標號的地方。
本章小結(jié)
Java語言的源程序代碼由一個或多個編譯單元組成,每個編譯單元可包含一個包聲明、任意數(shù)量的import語句、類和接口聲明。每個Java的編譯單元可包含多個類或接口,但是每個編譯單元最多只能有一個類或者接口是公共的。關鍵字對Java技術(shù)編譯器有特殊的含義,它們可標識數(shù)據(jù)類型名或程序構(gòu)造名。標識符是賦予變量、類或方法的名稱,標識符可從一個字母、下劃線(_)或美元符號($)開始,隨后也可跟數(shù)字、字母、下劃線或美元符號,標識符是區(qū)分大小寫。Java編程語言有八個原始數(shù)據(jù)類型,分別為:boolean、char、byte、short、int、long、double和float。不同類型的數(shù)據(jù)既可以以常量的形式出現(xiàn),也可以以變量的形式出現(xiàn)。常量就是指在程序執(zhí)行期間其值不能發(fā)生變化的數(shù)據(jù),常量是有固定值的。變量的值則是可以變化的,變量實際上代表內(nèi)存中指定的存儲單元。它的定義包括變量名、變量類型和作用域幾個部分。
4.1.面向?qū)ο蟮幕靖拍顚W習要點之二OOD方法提供了抽象數(shù)據(jù)類型機制,遵循軟件設計的三條重要原則,即抽象、信息隱藏和模塊化;雙重模塊化數(shù)據(jù)對數(shù)據(jù)的操作信息處理+封裝4.1.面向?qū)ο蟮幕靖拍?.1.1抽象1.什么是抽象抽象就是抽出事物的本質(zhì)特性而暫時不考慮它們的細節(jié)。過程抽象和數(shù)據(jù)抽象是常用的兩種主要抽象手段。
2.如何用面向?qū)ο蟮姆椒▽崿F(xiàn)抽象一個抽象數(shù)據(jù)類型(AbstractDataType,ADT)可以分解成4個部分,如圖4-2所示。語法和語義構(gòu)成抽象數(shù)據(jù)類型ADT的說明,讓使用者了解這個抽象數(shù)據(jù)類型的特征。屬性和方法構(gòu)成ADT的實現(xiàn),展示這個ADT是怎樣做成的。圖4-2抽象數(shù)據(jù)類型
4.1.2封裝將信息隱蔽的過程稱為封裝。有兩方面的原因促使我們控制對成員的訪問。第一個原因是防止程序員接觸他們不該接觸的東西——通常是內(nèi)部數(shù)據(jù)類型的設計思想。若只是為了解決特定的問題,用戶只需操作接口即可,毋需明白這些信息。第二個原因是允許庫設計人員修改內(nèi)部結(jié)構(gòu),不用擔心它會對客戶程序員造成什么影響。
4.1.3對象可將對象想象對象(object)應是實際問題域中有意義的個體或概念實體。此外,對象應該具有記憶自身狀態(tài)的能力。同時對象應該以某種方式與系統(tǒng)發(fā)生關聯(lián),既對象應該與系統(tǒng)中其他有意義的對象進行消息傳遞,并提供外部服務。4.1.3對象(1)所有東西都是對象??蓪ο笙胂蟪梢环N新型變量;它保存著數(shù)據(jù),但可要求它對自身進行操作。(2)程序是一大堆對象的組合;通過消息傳遞,各對象知道自己該做些什么。(3)每個對象都有自己的存儲空間,可容納其他對象。(4)每個對象都有一種類型。根據(jù)語法,每個對象都是某個“類”的一個“實例”。其中,“類”(Class)是“類型”(Type)的同義詞。一個類最重要的特征就是“能將什么消息發(fā)給它?”(5)同一類所有對象都能接收相同的消息。4.2類類是現(xiàn)實世界某些對象的共同特征(屬性和操作)的表示,對象是類的實例。類的屬性:就是類的靜態(tài)屬性的簡稱,指類內(nèi)包含的各項數(shù)據(jù),如變量或其他類的對象;類的服務:則被稱為成員函數(shù)或方法。4.2類類的基本定義方法如下:[修飾符]class類名[extends父類][implements接口名]{類成員變量聲明類方法聲明}類的修飾符用來說明類的特殊性質(zhì)。分為三種:訪問控制符:public公共類抽象類說明符:abstract最終類說明符:final接口名跟在implements關鍵字后面,用來說明當前類中實現(xiàn)了哪個接口定義的功能和方法。接口是Java語言用來實現(xiàn)多重繼承的一種特殊機制,我們將在后面詳細介紹它的使用方法。1.關于類頭---classclass關鍵字,在它的后面,應跟隨新數(shù)據(jù)類型的名稱。(注意不要把class寫成Class)。父類名跟在extends
關鍵字后面,用來說明當前類是哪個已經(jīng)存在類的子類,存在繼承關系。繼承是類與類之間的一種非常重要的關系。1.關于類頭---類的修飾符“public”(公共)——意味著后續(xù)的定義任何人均可使用?!皃rivate”(私有)——意味著除您自己、類型的創(chuàng)建者以及那個類型的內(nèi)部函數(shù)成員,其他任何人都不能訪問后續(xù)的定義信息?!皃rotected”(受保護的)——與“private”相似,只是一個繼承的類可訪問受保護的成員,但不能訪問私有成員?!癴riendly”(友好的)——若某樣東西是“友好的”,意味著它只能在這個包裝的范圍內(nèi)使用(所以這一訪問級別有時也叫作“包裝訪問”)?!?.關于類頭---接口名接口名跟在implements關鍵字后面,用來說明當前類中實現(xiàn)了哪個接口定義的功能和方法。接口是Java語言用來實現(xiàn)多重繼承的一種特殊機制,我們將在后面詳細介紹它的使用方法。2.關于類體類體的定義要包括類的具體內(nèi)容,包括類的屬性與方法。class<classname>{<memberFielddeclarations><memberMethoddeclarations>}Java中聲明類屬性為簡單變量的語法如下:[修飾符]變量類型變量名[=變量初值];
變量類型和變量名是聲明一個變量必不可少的部分;變量的類型是簡單數(shù)據(jù)類型,如int、double等。2.關于類體---類的屬性2.關于類體---類的方法Java中聲明方法的語法如下:[修飾符]返回值類型方法名(參數(shù)列表)throws例外名1,例外名2,…{方法體:局部變量聲明;語句序列;}
類的方法,又稱為成員函數(shù),用來規(guī)定類屬性上的操作,實現(xiàn)類的內(nèi)部功能的機制,同時也是類與外界進行交互的重要窗口。類中定義的方法通常起到兩種作用:一是圍繞著類的屬性進行各種操作;二是與其他的類或?qū)ο筮M行數(shù)據(jù)交流、消息傳遞等操作。注意:系統(tǒng)調(diào)用方法的最大特點:不需要在程序里書寫專門的調(diào)用方法的命令
Java語言中定義的方法有兩類:一類是需要程序書寫專門的調(diào)用命令來調(diào)用的方法,稱為程序調(diào)用方法,例如isPfime();
另一類是運行過程中系統(tǒng)自動調(diào)用的方法,稱為系統(tǒng)方法,例如我們前面程序中的action()、paint()、init()等。這兩類方法的定義和使用原則有很大差異。2.關于類體---類的方法4.2.2用戶程序自定義類
Java程序員把注意力放在創(chuàng)建稱為類的用戶自定義類型(user-definedtype)上,類也稱為程序員定義的類型(programmer-definedtype),每個類都含有數(shù)據(jù)和一組操作數(shù)據(jù)的方法,類中的數(shù)據(jù)部分稱為實例變量。用戶定義類型(即類)的實例稱為對象。下面是一個簡單化的Employee類,在編寫今后的職工工資系統(tǒng)時,會用到它。classEmployee{//構(gòu)造函數(shù)publicEmployee(Stringn,doubles,intyear,intmonth,intday){name=n;//職工姓名salary=s;//職工工資hireDay=newGregorianCalendar(year,month-1,day);//出勤數(shù)}//方法1publicStringgetName(){returnname;}//更多的方法 ……//屬性的實例privateStringname;privatedoublesalary;privateDatehireDay;}4.2.3創(chuàng)建類及類的實例對象
對象是類的一個實例,類是同種對象的抽象,是創(chuàng)建對象的模板。在程序中創(chuàng)建—個對象將在內(nèi)存中開辟一塊空間,其中包括該對象的屬性和方法。我們將分步講述這個類的實現(xiàn)細節(jié)。創(chuàng)建對象使用關鍵字運算符new,例如下面的語句將創(chuàng)建Employee的對象:【例4.1】顯示三個員工的相關信息4.2.3創(chuàng)建類及類的實例對象在程序中我們構(gòu)造了一個Employee數(shù)組,并給它賦給三個Employee對象。關于數(shù)組我們將在下一章講述。
staff[0]=newEmployee("張三",75000,1987,12,15);
staff[1]=newEmployee("李四",50000,1989,10,1);
staff[2]=newEmployee("王五",40000,1990,3,15);
創(chuàng)建對象以某個類為模板,這個類里定義了哪些屬性和方法,新建的對象就必然在內(nèi)存里擁有相應的屬性和方法??梢?,相對于簡單數(shù)據(jù)類型,類就是用戶自己定義的復雜的抽象數(shù)據(jù)類型:而相對于簡單變量,對象就是復雜的既包括數(shù)據(jù)又包括方法代碼的復雜數(shù)據(jù)單位。4.2.4構(gòu)造函數(shù)1.構(gòu)造函數(shù)的一般概念2.創(chuàng)建自己的構(gòu)造函數(shù)3.構(gòu)造函數(shù)的作用4.2.4構(gòu)造函數(shù)---構(gòu)造函數(shù)的一般概念
要使用對象,首先必須構(gòu)造它們,并指定它們的初始狀態(tài),然后將方法應用于對象。在Java程序設計語言中,使用構(gòu)造函數(shù)(constructor)來構(gòu)造新的實例。一個構(gòu)造函數(shù)是一個新的方法,它的作用是構(gòu)造并初始化對象。構(gòu)造函數(shù)是類的一種特殊方法,它的特殊性主要體現(xiàn)在如下的幾個方面:(1)構(gòu)造函數(shù)的方法名與類名相同。(2)構(gòu)造函數(shù)沒有返回類型。(3)構(gòu)造函數(shù)的主要作用是完成對類對象的初始化工作。(4)構(gòu)造函數(shù)不能由編程人員顯式地直接調(diào)用。(5)在創(chuàng)建一個類的新對象的同時,系統(tǒng)會自動調(diào)用該類的構(gòu)造函數(shù)為新對象初始化。4.2.4構(gòu)造函數(shù)---創(chuàng)建自己的構(gòu)造函數(shù)
構(gòu)造函數(shù)的名字和類的名字是相同的。當構(gòu)造Employee類的對象時,此構(gòu)造函數(shù)被啟動,實例字段賦初值,在Java中,定義和初始化是統(tǒng)一的——兩者缺一不可。例如,用下面的代碼創(chuàng)建Employee類的一個實例時,newEmployee(“JamesBond”,100000,1950,1,1);構(gòu)造函數(shù)的特點有:(1)構(gòu)造函數(shù)和類具有相同的名字。(2)一個類可以有多個構(gòu)造函數(shù)。(3)構(gòu)造函數(shù)可以有0個、1個或多個參數(shù)。(4)構(gòu)造函數(shù)沒有返回值。(5)構(gòu)造函數(shù)總是和new運算符一起被調(diào)用。4.2.4構(gòu)造函數(shù)---構(gòu)造函數(shù)的作用(1)對象初始化(2)引入更多的靈活度(變量賦值或更復雜的操作)(3)Java中可以不定義構(gòu)造函數(shù)Java中可以不定義構(gòu)造函數(shù),此時系統(tǒng)會自動為該系統(tǒng)生成一個默認的構(gòu)造函數(shù)。這個構(gòu)造函數(shù)的名字與類名相同,它沒有任何形式參數(shù),也不完成任何操作。為了避免失去控制,一般將構(gòu)造函數(shù)的聲明與創(chuàng)建分開處理。
4.3.1方法概述4.3方法
Java程序是由一個個類定義組成的,類有兩個部分:屬性和方法。屬性描述類是什么,方法描述類做什么。任何對象都有獨立的內(nèi)存存儲它的屬性。類的所有的對象共享存貯在內(nèi)存的方法。換言之:方法是類的主要組成部分。在一個類中,程序的作用體現(xiàn)在方法中。方法即是JAVA創(chuàng)建一個有名字的子程序。一個主方法和若干個子方法構(gòu)成。主方法調(diào)用其他方法,其他方法間也可互相調(diào)用,同一個方法可被一個或多個方法調(diào)用任意次。
4.3.1方法概述Java程序的基本結(jié)構(gòu)如下:引入Java類庫;定義用戶類1{
定義類1的若干變量或?qū)ο螅憾x類1的方法1;定義類1的方法2;…定義類1的方法M1;}定義用戶類2{定義類2的若干變量或?qū)ο螅憾x類2的方法1;定義類2的方法2;…定義類2的方法M2}}4.3.1方法概述Java語言的方法實現(xiàn)子任務處理時,有下面幾個原則與規(guī)律:(1)算法中需要細化的步驟、程序中重復的代碼以及重載父類方法都可以定義成類的方法。(2)界面清晰。(3)大小適中。(4)方法有兩種:一種是標準方法,JavaAPI提供了豐富的類和方法,這些方法提供了程序員所需的許多功能。另一種是用戶自定義的方法,以解決用戶專門需要。(5)Java應用程序中,程序的執(zhí)行從main類開始,調(diào)用其他方法后又回到main類,在main類中結(jié)束整個程序的運行。4.3.2定義方法1.聲明方法頭2.聲明方法體Java中聲明方法的語法如下:[修飾符]返回值類型方法名(參數(shù)列表)throws例外名1,例外名2,…{方法體:局部變量聲明;語句序列;}
類的方法,又稱為成員函數(shù),用來規(guī)定類屬性上的操作,實現(xiàn)類的內(nèi)部功能的機制,同時也是類與外界進行交互的重要窗口。4.3.2定義方法------聲明方法頭1.聲明方法頭方法頭一般由方法名、參數(shù)列表、返回類型、方法修飾符和方法拋出的例外五部分組成。(1)方法名可以是任何有效的標識符,命名規(guī)則與標識符命名規(guī)則相同。(2)類型說明符用來指定方法返回值的類型,方法最多只能返回一個值。(3)參數(shù)列表是方法的輸入接口,它列出了一系列形式參數(shù)的類型和名稱,在方法參數(shù)表的右括號后加一個分號是語法錯誤。參數(shù)表以逗號為分隔符,其中包含了方法被調(diào)用時傳遞給方法的參數(shù)說明。對于方法定義中的每一個參數(shù),方法調(diào)用時必須有一個參量與之對應,而且該參量的類型必須與對應參數(shù)類型相一致。4.3.2定義方法------聲明方法體方法頭定義了方法的性質(zhì),方法體則定義了方法的具體內(nèi)容。方法體通常起到兩種作用,一是圍繞類的屬性進行各種操作;二是與其他的類與對象進行數(shù)據(jù)交流、消息傳遞等操作。在一個方法中定義另一個方法將產(chǎn)生語法錯誤。(1)最好避免局部變量“屏蔽”實例變量,在一個類中不使用同名標識符就可以做到這一點;方法調(diào)用中參數(shù)用來傳遞數(shù)值、傳遞引用,同時方法還可以嵌套、遞歸調(diào)用。(2)方法體中如果指定了非void的返回值類型,方法中就必須包含一條return語句保證任何情況下都有返回數(shù)值,return語句后面不能跟任何表達式;4.3.2定義方法------聲明方法體例如下面的語句為部門類Department定義了若干方法:ClassDepartment{intm_DeptNo;//部門編號
Stringm_DeptName;//部門名稱
intm_DeptTotalEmp;//部門雇員數(shù)
ManagerEmployeem_DeptMgr;//部門主管
intgetDeptNo()//獲取當前對象的部門號{return_DeptNo;}//返回這個對象的部門號4.3.3方法的調(diào)用1.系統(tǒng)調(diào)用方法2.程序調(diào)用方法
Java語言中調(diào)用方法有兩類:一類是需要程序書寫專門的調(diào)用命令來調(diào)用的方法,稱為程序調(diào)用方法,例如isPfime();
另一類是運行過程中系統(tǒng)自動調(diào)用的方法,稱為系統(tǒng)方法,例如我們前面程序中的action()、paint()、init()等。這兩類方法的定義和使用原則有很大差異。注意:系統(tǒng)調(diào)用方法的最大特點:不需要在程序里書寫專門的調(diào)用方法的命令4.3.3方法的調(diào)用在類中調(diào)用類自身的方法,可以直接使用這個方法的名稱;調(diào)用其他對象或類的方法,則需要使用該對象或類為前綴。例如在isSameDept()方法中,語句
if(getDeptNo()=d.getDeptNo())中通過getDeptNo()調(diào)用當前對象自身的方法并獲得當前對象的部門號,通過d.getDeptNo()調(diào)用形式參數(shù)d的方法獲得d的部門編號。這里的形式參數(shù)d也是一個Depamnent類的對象。4.3.3方法的調(diào)用(實例)booleansetDeptNo(intNewNo)//把當前部門號重新設置稱參數(shù)值{
if(NewNo>0)//若給出的新部門號合法{
m_DeptNo=NewNo;//修改類屬性m_DeptNoreturntrue;//返回true,聲明部門編號修改成功}
elsereturnfalse;//若形式參數(shù)給出新部門號非法,返回false}4.3.4JavaAPI中的方法1.Math類的方法2.Math方法的調(diào)用實例在Java中,JavaAPI(ApplicationProgramInterface,也稱為Java類庫)提供了豐富的類和方法,可以執(zhí)行常見的算術(shù)運算、字符串操作、字符操作、輸入輸出、錯誤檢查等操作。4.3.4JavaAPI中的方法--Math類的方法表4-1Math類常用的方法
方法說明方法說明abs(x)x的絕對值(這個方法還有float,int和long型值的版本)max(x,y)取x和y中較大者。ceil(x)不小于x的最小整數(shù)(向上取整)min(x,y)取x和y中較小者。cos(x)x
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年裝修工程合同協(xié)議書模板
- 2025年度物流包裝材料供應合同范本3篇
- 2024年股東股權(quán)協(xié)議書:攜手共進共鑄輝煌
- 2024年餐飲業(yè)務合作伙伴加盟合同樣本版B版
- 2024年版融資租賃合同詳案解析版
- 2024蝦池承包養(yǎng)殖與水產(chǎn)養(yǎng)殖廢棄物資源化利用合同3篇
- 2024年車展志愿者服務協(xié)議
- 2024年貨物存儲點保管合同
- 2024年頂級高額擔保協(xié)議模板版B版
- 2024年高速公路停車場安全管理服務協(xié)議3篇
- 英語-山東省淄博市2024-2025學年第一學期高三期末摸底質(zhì)量檢測試題和答案
- 二年級數(shù)學(上)計算題專項練習
- 2024年初一英語閱讀理解專項練習及答案
- 開發(fā)建設項目水土保持方案編制技術(shù)問題-廣東省水土保持網(wǎng)
- 薄膜衰減片的仿真設計
- 國家開放大學畢業(yè)生登記表
- DLT724-2000 電力系統(tǒng)用蓄電池直流電源裝置運行維護
- 建設工程項目施工安全管理流程圖3頁
- 市政道路工程單位工程質(zhì)量驗收記錄
- paper-季銨鹽研究進展
- 有限元分析用到的材料屬性表
評論
0/150
提交評論