




已閱讀5頁,還剩499頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章Java語言概述,本章導(dǎo)讀1.Java語言的誕生2.學(xué)習(xí)Java的必要性3.java的特點(diǎn)4.java與C/C+之關(guān)系5.Java運(yùn)行平臺(tái)6.Java程序開發(fā)7.SDK1.6編譯器的新規(guī)定,1.1Java語言的誕生,Java誕生于1995年,是Sun公司組織開發(fā)的一編程語言,主要貢獻(xiàn)者是JamesGosling。1990年Sun公司成立了由JamesGosling領(lǐng)導(dǎo)的開發(fā)小組,開始致力于開發(fā)一種可移植的、跨平臺(tái)的語言,該語言能生成正確運(yùn)行于各種操作系統(tǒng)、各種CPU芯片上的代碼。他們的鉆研和努力促成了Java語言的誕生。Java的發(fā)展得利于Internet和Web的出現(xiàn),Internet上有各種不同的計(jì)算機(jī),它們可能使用完全不同的操作系統(tǒng)和CPU芯片,但仍希望運(yùn)行相同的程序,Java的出現(xiàn)標(biāo)志著真正的分布式系統(tǒng)的到來。,返回,1.2學(xué)習(xí)Java的必要性,Java不僅可以用來開發(fā)大型的桌面應(yīng)用程序,而且特別適合于Internet的應(yīng)用開發(fā)。目前,Java語言不僅是一門正在被廣泛使用的編程語言,而且已成為軟件設(shè)計(jì)開發(fā)者應(yīng)當(dāng)掌握的一門基礎(chǔ)語言。Java語言是面向?qū)ο缶幊?,并涉及到網(wǎng)絡(luò)、多線程等重要的基礎(chǔ)知識(shí),而且很多新的技術(shù)領(lǐng)域都涉及到了Java語言,因此,學(xué)習(xí)和掌握J(rèn)ava已成為共識(shí),國(guó)內(nèi)外許多大學(xué)已將Java語言列入了本科教學(xué)計(jì)劃,IT行業(yè)對(duì)Java人才的需求正在不斷的增長(zhǎng),一些軟件公司對(duì)其開發(fā)人員周期地進(jìn)行Java的基礎(chǔ)培訓(xùn)工作。在IT行業(yè)發(fā)達(dá)的北美洲,有將近60%的軟件開發(fā)人員在使用Java完成他們的工作,EvansData公司在2002年做的一項(xiàng)調(diào)查中發(fā)現(xiàn),在北美洲,Java的使用率已經(jīng)接近C/C+。返回,1.3java的特點(diǎn),1平臺(tái)無關(guān)性Java語言和其他語言相比,最大的優(yōu)勢(shì)就是能夠在所有的計(jì)算機(jī)上運(yùn)行,這也是Java風(fēng)靡全球的主要原因。2面向?qū)ο竺嫦驅(qū)ο缶幊淌且环N先進(jìn)的編程思想,更加容易解決復(fù)雜的問題。3多線程Java的特點(diǎn)之一就是內(nèi)置對(duì)多線程的支持。多線程允許同時(shí)完成多個(gè)任務(wù)。4安全5動(dòng)態(tài),返回,1.4java與C/C+之關(guān)系,如果你學(xué)習(xí)過C+語言,你會(huì)感覺Java很眼熟,因?yàn)镴ava中許多基本語句的語法和C+一樣,像常用的循環(huán)語句、控制語句等和C+幾乎一樣,但不要誤解為Java是C+的增強(qiáng)版,Java和C+是兩種完全不同的語言,他們各有各的優(yōu)勢(shì),將會(huì)長(zhǎng)期并存下去,Java語言和C+語言已成為軟件開發(fā)者應(yīng)當(dāng)掌握的語言。,返回,1.5Java運(yùn)行平臺(tái),1)三種平臺(tái)簡(jiǎn)介目前Java運(yùn)行平臺(tái)主要分為下列3個(gè)版本:(JavaSE(曾稱作J2SE)Java標(biāo)準(zhǔn)版或Java標(biāo)準(zhǔn)平臺(tái)。JavaSE提供了標(biāo)準(zhǔn)的JDK開發(fā)平臺(tái),利用該平臺(tái)可以開發(fā)Java桌面應(yīng)用程序和低端的服務(wù)器應(yīng)用程序,也可以開發(fā)JavaApplet。JavaEE(曾稱作J2EE)Java企業(yè)版或Java企業(yè)平臺(tái),可以構(gòu)建企業(yè)級(jí)的服務(wù)應(yīng)用。JavaEE平臺(tái)包含了JavaSE平臺(tái),并增加了附加類庫(kù),以便支持目錄管理、交易管理和企業(yè)級(jí)消息處理等功能。JavaME(曾稱作J2ME)Java微型版或Java小型平臺(tái)。JavaME是一種很小的Java運(yùn)行環(huán)境,用于嵌入式的消費(fèi)產(chǎn)品中,如移動(dòng)電話、掌上電腦或其他無線設(shè)備等。,2)安裝JavaSE平臺(tái),學(xué)習(xí)Java必須從JavaSE開始,因此,本書基于JavaSE來學(xué)習(xí)Java。目前Sun公司已發(fā)布了JDK的1.6版本。如果安裝JDK選擇安裝到E:Jdk1.6目錄下,則會(huì)生成如圖1.1的目錄結(jié)構(gòu)。,圖1.1JDK目錄結(jié)構(gòu),3)系統(tǒng)環(huán)境Path值的設(shè)置,JDK平臺(tái)提供的Java編譯器(javac.exe)和Java解釋器(java.exe)位于Java安裝目錄的bin文件夾中,為了能在任何目錄中使用編譯器和解釋器,應(yīng)在系統(tǒng)特性中設(shè)置Path。對(duì)于Windows2000、Windows2003、WindowsXP,用鼠標(biāo)右鍵點(diǎn)擊“我的電腦”,彈出菜單,然后選擇“屬性”,彈出“系統(tǒng)屬性”對(duì)話框,再單擊該對(duì)話框中的“高級(jí)”選項(xiàng),然后點(diǎn)擊按鈕“環(huán)境變量”,添加如下的系統(tǒng)環(huán)境變量(如圖1.2所示):,圖1.2設(shè)置環(huán)境變量path,4)系統(tǒng)環(huán)境ClassPath值的設(shè)置,編輯系統(tǒng)環(huán)境變量ClassPath的值。對(duì)于Windows2000、Windows2003、WindowsXP,用鼠標(biāo)右鍵點(diǎn)擊“我的電腦”,彈出菜單,然后選擇屬性,彈出“系統(tǒng)特性”對(duì)話框,再單擊該對(duì)話框中的高級(jí)選項(xiàng),然后點(diǎn)擊按鈕“環(huán)境變量”,添加如下的系統(tǒng)環(huán)境變量(如圖1.3所示):如果曾經(jīng)設(shè)置過環(huán)境變量:ClassPath,可點(diǎn)擊該變量進(jìn)行編輯操作,將需要的值加入即可。對(duì)于Win9x,用記事本編輯Autoexec.bat文件,將如下的設(shè)置語句加入即可,setclasspth=E:jdk1.6jrelibrt.jar;.;也可以在命令行窗口,如MS-DOS窗口鍵入命令:setclasspth=E:jdk1.6jrelibrt.jar;.;,圖1.3設(shè)置環(huán)境變量classpath,5)僅僅安裝JRE,如果你只想運(yùn)行別人的Java程序可以只安裝Java運(yùn)行環(huán)境JRE,JRE由Java虛擬機(jī)、Java的核心類以及一些支持文件組成??梢缘卿汼un的網(wǎng)站免費(fèi)下載Java的JRE。,返回,1.6Java程序開發(fā),1.Java應(yīng)用程序的開發(fā)開發(fā)一個(gè)Java應(yīng)用程序的步驟:,編寫源文件,編譯源文件生成字節(jié)碼,加載運(yùn)行字節(jié)碼,FileName.java,FileName.class,1)編寫源文件(1)源文件的組成使用一個(gè)文字編輯器,如Edit或記事本,來編寫源文件。不可使用Word編輯器,因它含有不可見字符。Java是面向?qū)ο缶幊?,Java應(yīng)用程序的源文件是由若干個(gè)書寫形式互相獨(dú)立的類組成。見例子1,(2)應(yīng)用程序的主類,一個(gè)Java應(yīng)用程序必須有一個(gè)類含有publicstaticvoidmain(Stringargs)方法,稱這個(gè)類是應(yīng)用程序的主類。args是main方法的一個(gè)參數(shù),是一個(gè)字符串類型的數(shù)組(注意String的第一個(gè)字母是大寫的),以后會(huì)學(xué)習(xí)怎樣使用這個(gè)參數(shù)。,(3)源文件的命名規(guī)則,源文件有幾個(gè)類?,源文件名=該類類名,有public類?,源文件名=類名之一,有幾個(gè)public類?,源文件名=該P(yáng)ublic類名,這是不允許的!,(4)良好的編程習(xí)慣,在編寫程序時(shí),一行最好只寫一條語句,類體的以方法的大括號(hào)最好也獨(dú)占一行,并有明顯的縮進(jìn)。本書在編寫代碼時(shí),盡量遵守良好的編程習(xí)慣。良好的編程習(xí)慣對(duì)一個(gè)優(yōu)秀的程序員是至關(guān)重要的!,2)編譯Java源程序當(dāng)創(chuàng)建了Hello.java這個(gè)源文件后,就要使用編譯器(javac.exe)對(duì)其進(jìn)行編譯:需要打開MS-DOS命令行窗口,進(jìn)入C盤,然后進(jìn)入到1000目錄中,如圖1.4所示。,3)運(yùn)行Java程序,Java應(yīng)用程序必須通過Java虛擬機(jī)中的Java解釋器(java.exe)來解釋執(zhí)行其字節(jié)碼文件。Java應(yīng)用程序總是從主類的main方法開始執(zhí)行。因此,必須如下運(yùn)行Java應(yīng)用程序:C:1000javaHello運(yùn)行效果如圖1.5所示。當(dāng)Java應(yīng)用程序中有多個(gè)類時(shí),java命令執(zhí)行的類名必須是主類的名字(沒有擴(kuò)展名)。例:,(1)編譯源文件c:1000javacTom.java如果編譯成功,你的目錄1000下就會(huì)有Tom.class和Example.class這兩個(gè)字節(jié)碼文件了。(2)執(zhí)行c:1000javaExamplejava命令后的名字必須是主類的名字,運(yùn)行效果如圖1.6。,返回,2.JavaApplet程序的開發(fā),開發(fā)一個(gè)JavaApplet程序需經(jīng)過三個(gè)步驟:編寫源文件、編譯源文件生成字節(jié)碼、通過瀏覽器加載運(yùn)行字節(jié)碼。(1)編寫源文件一個(gè)JavaApplet源文件也是由若干個(gè)類組成的,一個(gè)JavaApplet源文件不再需要main方法,但必須有且只有一個(gè)類擴(kuò)展了Applet類,即它是Applet類的子類(Applet類是系統(tǒng)提供的類),我們把這個(gè)類稱作JavaApplet源文件的主類。下面的例子2是一個(gè)簡(jiǎn)單的JavaApplet源文件。,2)編譯,c:1000javacBoy.java編譯成功后,文件夾C:1000下會(huì)生成一個(gè)Boy.class文件。如果源文件有多個(gè)類,將生成多個(gè)class文件,都和源文件在同一文件夾里。如果你對(duì)源文件進(jìn)行了修改,那么你必須重新編譯,再生成新的字節(jié)碼文件。,3)運(yùn)行,JavaApplet由瀏覽器來運(yùn)行,因此我們必須編寫一個(gè)超文本文件(含有applet標(biāo)記的web頁)通知瀏覽器來運(yùn)行這個(gè)JavaApplet。下面是一個(gè)最簡(jiǎn)單的一個(gè)html文件,通知瀏覽器運(yùn)行JavaApplet。我們使用記事本編輯如下:現(xiàn)在可以使用瀏覽器打開文件Boy.html運(yùn)行JavaApplet,效果如圖1.7所示。,返回,如果你的瀏覽器不能運(yùn)行你的Applet(如沒有安裝瀏覽器,或?yàn)g覽器沒有內(nèi)嵌的java實(shí)時(shí)運(yùn)行環(huán)境等),你也可以使用J2SE提供的appletviewer(小程序查看器)來運(yùn)行你的Applet:C:tempappletviewerBoy.html,1.7JDK1.6編譯器的新規(guī)定,和以前版本的編譯器有了一個(gè)很大的不同,JDK1.6的編譯器javac.exe不再向下兼容,也就是說,如果在編譯源文件時(shí)沒有特別約定的話,用JDK1.6的編譯器生成的字節(jié)碼只能在安裝了JDK1.6或JRE1.6的Java平臺(tái)環(huán)境中運(yùn)行??捎谩?source”參數(shù)約定字節(jié)碼適合的Java平臺(tái)。如javacsource1.2,返回,第2章基本數(shù)據(jù)類型和數(shù)組,本章導(dǎo)讀1.標(biāo)識(shí)符和關(guān)鍵字2.基本數(shù)據(jù)類型3.基本數(shù)據(jù)類型的轉(zhuǎn)換4.數(shù)據(jù)的輸入與輸出5.數(shù)組,2.1標(biāo)識(shí)符和關(guān)鍵字,1標(biāo)識(shí)符用來標(biāo)識(shí)類名、變量名、方法名、類型名、數(shù)組名、文件名的有效字符序列稱為標(biāo)識(shí)符。簡(jiǎn)單地說,標(biāo)識(shí)符就是一個(gè)名字。Java語言規(guī)定標(biāo)識(shí)符由字母、下劃線、美元符號(hào)和數(shù)字組成,并且第一個(gè)字符不能是數(shù)字。標(biāo)識(shí)符中的字母是區(qū)分大小寫的,Beijing和beijing是不同的標(biāo)識(shí)符。2關(guān)鍵字關(guān)鍵字就是Java語言中已經(jīng)被賦予特定意義的一些單詞,它們?cè)诔绦蛑杏兄煌挠猛?,不可以把關(guān)鍵字作為標(biāo)識(shí)符來用。,Java語言中的關(guān)鍵字,在大多數(shù)的JAVAIDE中,關(guān)鍵字用藍(lán)色字體顯示.,返回,2.2基本數(shù)據(jù)類型,基本數(shù)據(jù)類型也稱作簡(jiǎn)單數(shù)據(jù)類型。Java語言有8種簡(jiǎn)單數(shù)據(jù)類型,分別是:boolean、byte、short、int、long、float、double、char。這8種數(shù)據(jù)類型習(xí)慣上可分為4大類型:邏輯類型:boolean字符類型:char整數(shù)類型:byte、short、int、long浮點(diǎn)類型:float、double,2.2基本數(shù)據(jù)類型,1邏輯類型常量:true,false。變量的定義:使用關(guān)鍵字boolean來定義邏輯變量,定義時(shí)也可以賦給初值。如:booleanx,ok=true,關(guān)閉=false;2整數(shù)類型常量:123,6000(十進(jìn)制),077(八進(jìn)制),0 x3ABC(十六進(jìn)制)。整型變量的定義分為4種,2.2基本數(shù)據(jù)類型,(1)int型使用關(guān)鍵字int來定義int型整型變量,定義時(shí)也可以賦給初值,例如:intx,平均=9898;對(duì)于int型變量,內(nèi)存分配給4個(gè)字節(jié)(byte)。int型變量的取值范圍是:-231231-1。(2)byte型使用關(guān)鍵字byte來定義byte型整型變量。對(duì)于byte型變量,內(nèi)存分配給1個(gè)字節(jié),占8位,byte型變量的取值范圍是-2727-1。,2.2基本數(shù)據(jù)類型,(3)short型使用關(guān)鍵字short來定義short型整型變量。對(duì)于short型變量,內(nèi)存分配給2個(gè)字節(jié),short型變量的取值范圍是-215215-1。(4)long型使用關(guān)鍵字long來定義long型整型變量,對(duì)于long型變量,內(nèi)存分配給8個(gè)字節(jié),long型變量的取值范圍是-263263-1。,2.2基本數(shù)據(jù)類型,3字符類型常量:Unicode表中的字符就是一個(gè)字符常量,例如A,?,9,好,等。Java還使用轉(zhuǎn)意字符常量,如:n:換行b:退格t:水平制表:?jiǎn)我?hào)”:雙引號(hào)變量的定義:使用關(guān)鍵字char來定義字符變量,例如:charx=A,漂亮=假,jiafei;,2.2基本數(shù)據(jù)類型,char型變量,內(nèi)存分配給2個(gè)字節(jié),占16位,最高位不是符號(hào)位,沒有負(fù)數(shù)的char。char型變量的取值范圍是065536。要觀察一個(gè)字符在unicode表中的順序位置,必須使用int類型顯示轉(zhuǎn)換,不可以使用short型轉(zhuǎn)換,因?yàn)閏har的最高位不是符號(hào)位。同樣,要得到一個(gè)065536之間的數(shù)所代表的Unicode表中相應(yīng)位置上的字符也必須使用char型顯示轉(zhuǎn)換。下面的例子1中,分別用顯示轉(zhuǎn)換來顯示一些字符在Unicode表中的位置,以及某些位置上的字符。,2.2基本數(shù)據(jù)類型,4浮點(diǎn)類型浮點(diǎn)型分兩種(1)float型常量:453.5439f,21379.987F,2e40f(2乘10的40次方,科學(xué)計(jì)數(shù)法)變量的定義:使用關(guān)鍵字float來定義float型變量。對(duì)于float型變量,內(nèi)存分配給4個(gè)字節(jié),其取值范圍是10-381038和-1038-10-38。,2.2基本數(shù)據(jù)類型,(2)double型常量:21389.5439d(d可以省略),23189908.987,123.0,6e-140(6乘10的-140次方,科學(xué)計(jì)數(shù)法)。變量的定義:使用關(guān)鍵字double來定義double型變量。double型變量,內(nèi)存分配給8個(gè)字節(jié),double型變量的取值范圍大約是10-30810308和-10308-10-308。,返回,2.3基本數(shù)據(jù)類型的轉(zhuǎn)換,基本數(shù)據(jù)類型的轉(zhuǎn)換就是把一種基本數(shù)據(jù)類型變量轉(zhuǎn)變成另一種基本類型變量。下列基本類型會(huì)涉及數(shù)據(jù)轉(zhuǎn)換,不包括邏輯類型和字符類型。我們將這些類型按精度從“低”到“高”排列了順序:byteshortintlongfloatdouble當(dāng)把級(jí)別低的變量的值賦給級(jí)別高的變量時(shí),系統(tǒng)自動(dòng)完成數(shù)據(jù)類型的轉(zhuǎn)換,如int型轉(zhuǎn)換成long型。當(dāng)把級(jí)別高的變量的值賦給級(jí)別低的變量時(shí),必須使用顯示類型轉(zhuǎn)換運(yùn)算。顯示轉(zhuǎn)換的格式:(類型名)要轉(zhuǎn)換的值;,2.3基本數(shù)據(jù)類型的轉(zhuǎn)換,例如intx=(int)34.89;輸出x將是34,強(qiáng)制轉(zhuǎn)換運(yùn)算可能導(dǎo)致精度的損失。當(dāng)把一個(gè)整數(shù)賦值給一個(gè)byte、short、int或long型變量時(shí),不可以超出這些變量的取值范圍,否則必須進(jìn)行類型轉(zhuǎn)換運(yùn)算。下面我們看一個(gè)例子:程序運(yùn)行結(jié)果見右圖:,返回,2.4數(shù)據(jù)的輸入與輸出,由于C語言出現(xiàn)的比較早,那個(gè)時(shí)候還沒有圖形用戶界面的概念(GraphicsUserInterface),因此,C語言提供了許多用來輸入、輸出數(shù)據(jù)的函數(shù),例如printf、scanf等。Java不象C,提供在命令行進(jìn)行數(shù)據(jù)輸入、輸出的功能不多。關(guān)于輸入、輸出我們將在第九章詳細(xì)介紹,現(xiàn)在只需知道它的作用是在命令行窗口(例如,MS-DOS窗口)輸出數(shù)據(jù)即可。Sun公司新推出的JDK1.5又新增了一些在命令行進(jìn)行數(shù)據(jù)輸入、輸出的功能。,2.4數(shù)據(jù)的輸入與輸出,1數(shù)據(jù)輸出:System.out.printfSystem.out.printf的功能完全類似C語言中的printf函數(shù)。pringf的一般格式:printf(格式控制部分,表達(dá)式1,表達(dá)式2,表達(dá)式n);例如:System.out.printf(“點(diǎn)的坐標(biāo)為(%d,%d)”,x,y);輸出:點(diǎn)的坐標(biāo)為(200,300)Printf方法的用法與C語言相同。下面我們看一個(gè)例子,來進(jìn)一步了解System.out.printf數(shù)據(jù)輸出。,Printf()的格式控制部分,格式控制部分由格式控制符和普通字符組成。格式控制符用來輸出表達(dá)式的值,普通字符原樣輸出。d輸出整數(shù)類型數(shù)據(jù)。c輸出字符類型數(shù)據(jù)。f輸出浮點(diǎn)類型數(shù)據(jù),最多保留6位小數(shù)。s輸出字符串類型數(shù)據(jù)。輸出數(shù)據(jù)時(shí),也可以控制數(shù)據(jù)在命令行的位置:md輸出的int類型數(shù)據(jù)占m列。m.nf輸出的浮點(diǎn)數(shù)據(jù)占m列,保留n位小數(shù)。Java提倡用:n表示回車換行。,2.4數(shù)據(jù)的輸入與輸出,2數(shù)據(jù)的輸入:ScannerScanner是SDK1.5新增的一個(gè)類,可以使用該類創(chuàng)建一個(gè)對(duì)象:Scannerreader=newScanner(System.in);然后reader對(duì)象調(diào)用下列方法(函數(shù)),讀取用戶在命令行輸入的各種數(shù)據(jù)類型,nextByte(),nextDouble(),nextFloat(),nextInt(),nextLine(),nextLong(),nextShort()。,2.4數(shù)據(jù)的輸入與輸出,上述方法執(zhí)行時(shí)都會(huì)堵塞,等待你在命令行輸入數(shù)據(jù)回車確認(rèn)。下面讓我們來看一個(gè)例子,來更好的了解Scanner語句,在這個(gè)例子中,用戶在鍵盤依次輸入若干個(gè)數(shù)字,每輸入一個(gè)數(shù)字都需要按回車鍵確認(rèn),最后在鍵盤輸入一個(gè)非數(shù)字字符結(jié)束整個(gè)的輸入操作過程。程序?qū)⒂?jì)算出這些數(shù)的和及平均值。,返回,2.5數(shù)組,數(shù)組是相同類型的數(shù)據(jù)按順序組成的一種復(fù)合數(shù)據(jù)類型。通過數(shù)組名加數(shù)組下標(biāo)來使用數(shù)組中的數(shù)據(jù)。下標(biāo)從0開始。1聲明數(shù)組聲明數(shù)組包括數(shù)組的名字、數(shù)組包含的元素的數(shù)據(jù)類型。聲明一維數(shù)組有下列兩種格式:數(shù)組元素類型數(shù)組名字;數(shù)組元素類型數(shù)組名字;,2.5數(shù)組,聲明二維數(shù)組有下列兩種格式:數(shù)組元素類型數(shù)組名字;數(shù)組元素類型數(shù)組名字;2創(chuàng)建數(shù)組聲明數(shù)組僅僅是給出了數(shù)組名和元素的數(shù)據(jù)類型,要想使用數(shù)組還必須為它分配內(nèi)存空間,即創(chuàng)建數(shù)組。在為數(shù)組分配內(nèi)存空間時(shí)必須指明數(shù)組的長(zhǎng)度。格式如下:數(shù)組名字=new數(shù)組元素的類型數(shù)組元素的個(gè)數(shù);例如:boy=newfloat4;,2.5數(shù)組,0 x785BA,數(shù)組的內(nèi)存模式,36.50,12.87,68.78,96.67,2.5數(shù)組,3數(shù)組元素的使用一維數(shù)組通過下標(biāo)符訪問自己的元素,如boy0,boy1等。需要注意的是下標(biāo)從0開始,因此,數(shù)組若是7個(gè)元素,下標(biāo)到6為止,如果你將來使用下標(biāo)超過6將會(huì)發(fā)生異常(數(shù)組下標(biāo)越界)。二維數(shù)組也通過下標(biāo)符訪問自己的元素,如a01,a12等。下標(biāo)也是從0開始。,2.5數(shù)組,4數(shù)組的初始化創(chuàng)建數(shù)組后,系統(tǒng)會(huì)給每個(gè)數(shù)組元素一個(gè)默認(rèn)的值,如,float型是0.0。我們?cè)诼暶鲾?shù)組時(shí)同時(shí)也還可以給數(shù)組的元素一個(gè)初始值,如:floatboy=21.3f,23.89f,2.0f,23f,778.98f;,數(shù)組屬于引用型變量,因此兩個(gè)相同類型的數(shù)組如果具有相同的引用,它們就有完全相同的元素。例如,對(duì)于inta=1,2,3,b=4,5;數(shù)組變量a和b分別存放著不同的引用。但是,如果使用了賦值語句:a=b;那么,a中存放的引用就和b的相同,這時(shí)系統(tǒng)將釋放最初分配給數(shù)組a的元素,使得a的元素和b的元素相同,即a0,a1就是b0,b1,而最初分配給數(shù)組a的三個(gè)元素已不復(fù)存在.,2.5數(shù)組,下面讓我們結(jié)合這個(gè)例子來看怎樣使用數(shù)組。,2.5數(shù)組,返回,0 xB9671,0 xB8321,0 xB9671,Unicode標(biāo)準(zhǔn)字符集,Java語言使用;可識(shí)別65536個(gè)字符;前128個(gè)字符為ASCII碼;包含了世界上幾乎所有語言中的“字母”;,返回,第3章運(yùn)算符、表達(dá)式與語句,本章導(dǎo)讀1.算術(shù)運(yùn)算符和算術(shù)表達(dá)式2.關(guān)系運(yùn)算符與關(guān)系表達(dá)式3.邏輯運(yùn)算符與邏輯表達(dá)式4.賦值運(yùn)算符與賦值表達(dá)式5.移位運(yùn)算符6.位運(yùn)算符7.條件運(yùn)算符8.instanceof運(yùn)算符,9.一般表達(dá)式10.語句概述11.分支語句12.循環(huán)語句13.跳轉(zhuǎn)語句,3.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式,(1)加減運(yùn)算符加減運(yùn)算的結(jié)合性是從左到右。加減運(yùn)算的操作元是整型或浮點(diǎn)型數(shù)據(jù),加減運(yùn)算符的優(yōu)先級(jí)是4級(jí)。(2)乘、除和求余運(yùn)算符乘、除和求余運(yùn)算的運(yùn)算符號(hào)為*、/、%,都是雙目運(yùn)算符。*、/、%運(yùn)算符的結(jié)合性是從左到右,例如:2*3/8,先計(jì)算2*3,然后再將得到的結(jié)果除以8。乘、除和求余運(yùn)算的操作元是整型或浮點(diǎn)型數(shù)據(jù)。*、/、%運(yùn)算符的優(yōu)先級(jí)是3級(jí)。,(3)自增、自減運(yùn)算符自增、自減運(yùn)算的運(yùn)算符號(hào)為:+、-,都是單目運(yùn)算符,運(yùn)算符的優(yōu)先級(jí)是2級(jí)。運(yùn)算符可以放在操作元之前,也可以放在操作元之后,但操作元必須是一個(gè)整型或浮點(diǎn)型變量(不能是常量或表達(dá)式)。運(yùn)算符的作用是使變量的值增1或減1,如:+x,-x表示在使用x之前,先使x的值加(減)1。x+,x-表示在使用x之后,使x的值加(減)1。粗略地看,+x和x+的作用相當(dāng)于x=x+1。但+x和x+的不同之處在于,+x是先執(zhí)行x=x+1再使用x的值,而x+是先使用x的值再執(zhí)行x=x+1。如果x的原值是5,則:對(duì)于y=+x;y的值為6。對(duì)于y=x+;y的值為5,然后x的值變?yōu)?。,(4)算術(shù)表達(dá)式用算術(shù)符號(hào)和操作元連接起來的符合Java語法規(guī)則的式子,稱為算術(shù)表達(dá)式。如x+2*y-30+3*(y+5)-12+n+(-n)。(5)算術(shù)混合運(yùn)算的精度精度從“低”到“高”排列的順序是:byteshortintlongfloatdoubleJava將按運(yùn)算符兩邊的操作元的最高精度保留結(jié)果的精度,例如:5/2的結(jié)果是2,要想得到2.5,必須寫成5.0/2或5.0f/2。,char型數(shù)據(jù)和整型數(shù)據(jù)運(yùn)算結(jié)果的精度是int。例如:bytek=18;那么H+k;的結(jié)果是int型,因此下列寫法是不正確的,charch=H+k;應(yīng)當(dāng)寫成:charch=(char)(H+k);,返回,3.2關(guān)系運(yùn)算符與關(guān)系表達(dá)式,關(guān)系運(yùn)算符用來比較兩個(gè)值的關(guān)系,關(guān)系運(yùn)算符的運(yùn)算結(jié)果是boolean型數(shù)據(jù),當(dāng)運(yùn)算符對(duì)應(yīng)的關(guān)系成立時(shí),運(yùn)算結(jié)果是true,否則是false。(1)大小關(guān)系運(yùn)算符大小關(guān)系運(yùn)算的符號(hào)分別是:、=、1的結(jié)果是true。在書寫時(shí)要特別注意的是“20-17的結(jié)果為true,因?yàn)樗阈g(shù)運(yùn)算符的級(jí)別高于關(guān)系運(yùn)算符,1020-17相當(dāng)于10(20-17)。,(2)等與不等關(guān)系等與不等關(guān)系運(yùn)算的符號(hào)分別是:“=”、“!=”,都是雙目運(yùn)算符。運(yùn)算符的級(jí)別是7級(jí)?!?”和“!=”都是由2個(gè)字符組成的一個(gè)完整的符號(hào),書寫時(shí)不要含有空格。注意不要將后面講述的賦值運(yùn)算符“=”與等號(hào)運(yùn)算符“=”混淆。(3)關(guān)系表達(dá)式結(jié)果為數(shù)值型的變量或表達(dá)式可以通過關(guān)系運(yùn)算符形成關(guān)系表達(dá)式。例如,2418,(x+y+z)30+x等。,返回,3.3邏輯運(yùn)算符與邏輯表達(dá)式,邏輯運(yùn)算用來實(shí)現(xiàn)boolean型數(shù)據(jù)的邏輯“與”、“或”和“非”運(yùn)算,運(yùn)算結(jié)果是boolean型數(shù)據(jù)。(1)邏輯“與”和邏輯“或”邏輯“與”和邏輯“或”運(yùn)算的符號(hào)是:11111000在進(jìn)行a1運(yùn)算時(shí),首先將11111000生級(jí)為int型,將高位用1填充:11111111111111111111111111111000然后在進(jìn)行移位運(yùn)算得到-16:11111111111111111111111111110000,因此,如果把a(bǔ)1的結(jié)果賦值給一個(gè)byte型變量就必須進(jìn)行強(qiáng)制轉(zhuǎn)換運(yùn)算:byteb=(byte)(a1);在進(jìn)行an運(yùn)算時(shí),如果a是byte、short或int型數(shù)據(jù),系統(tǒng)總是先計(jì)算出n%32的結(jié)果m,然后進(jìn)行am運(yùn)算。例如,a33的計(jì)算結(jié)果與a1相同。對(duì)于long型數(shù)據(jù),系統(tǒng)總是先計(jì)算出n%64的結(jié)果m,然后進(jìn)行a,是雙目運(yùn)算符。假設(shè)a是一個(gè)被移位的整型數(shù)據(jù),n是位移量。an運(yùn)算的結(jié)果是通過將a的所有位都右移n位,每右移一個(gè)位,右邊的低階位被移出丟棄,并用0或1填充左邊的高位,a是正數(shù)用0填充,負(fù)數(shù)時(shí)用1填充。因此,a每右移一次,如果該數(shù)的每一計(jì)算有效位都沒有從低位移出時(shí),就相當(dāng)于將a除以2并舍棄了余數(shù)。正數(shù)不斷右移位的最后結(jié)果一定是0,而負(fù)數(shù)不斷右移位的最后結(jié)果是-1。對(duì)于byte或short型數(shù)據(jù),an的運(yùn)算結(jié)果是int型精度。,在進(jìn)行an運(yùn)算時(shí),如果a是byte、short或int型數(shù)據(jù),系統(tǒng)總是先計(jì)算出n%32的結(jié)果m,然后進(jìn)行am運(yùn)算,例如,a33的計(jì)算結(jié)果與a1相同。對(duì)于long型數(shù)據(jù),系統(tǒng)總是先計(jì)算出n%64的結(jié)果m,然后進(jìn)行am運(yùn)算。在下面的例子1中,用戶輸入移位運(yùn)算的兩個(gè)操作元,程序給出右移和左移后的結(jié)果。,返回,3.6位運(yùn)算符,(1)“按位與”運(yùn)算符“(2)表達(dá)式語句一個(gè)表達(dá)式的最后加上一個(gè)分號(hào)就構(gòu)成了一個(gè)語句,稱作表達(dá)式語句。分號(hào)是語句不可缺少的部分。例如,賦值語句:x=23;,(3)復(fù)合語句可以用“”和“”把一些語句括起來構(gòu)成復(fù)合語句,一個(gè)復(fù)合語句也稱作一個(gè)代碼塊。例如,z=23+x;System.out.println(hello);(4)控制語句控制語句包括:條件分支語句、循環(huán)語句和跳轉(zhuǎn)語句。(5)package語句和import語句package語句和import語句與類、對(duì)象有關(guān),將在第4章講解。,返回,3.11分支語句,1條件分支語句(1)if-else語句.if-else語句是Java中的一條語句,由一個(gè)“if”、“else”和兩個(gè)復(fù)合語句按一定格式構(gòu)成,if-else語句的格式如下:if(表達(dá)式)若干語句else若干語句一條if-else語句的作用是根據(jù)不同的條件產(chǎn)生不同的操作,執(zhí)行法則如下:if后面()內(nèi)的表達(dá)式的值必須是boolean型的。如果表達(dá)式的值為true,則執(zhí)行緊跟著的復(fù)合語句;如果表達(dá)式的值為false,則執(zhí)行else后面的復(fù)合語句。,(2)多條件if-elseif-else語句程序有時(shí)需要根據(jù)多條件來選擇某一操作,這時(shí)就可以使用if-elseif-else語句。if-elseif-else語句是Java中的一條語句,由一個(gè)“if”、若干個(gè)“elseif”、一個(gè)“else”與若干個(gè)復(fù)合語句按一定規(guī)則構(gòu)成。語句的格式如下:if(表達(dá)式1)若干語句elseif(表達(dá)式2)若干語句elseif(表達(dá)式n)若干語句else若干語句,有時(shí)為了編程的需要,復(fù)合語句中可以沒有任何語句。一條if-elseif-else語句的作用是根據(jù)不同的條件產(chǎn)生不同的操作,執(zhí)行法則如下:if以及elseif后面()內(nèi)的表達(dá)式的值必須是boolean型的。該語句執(zhí)行時(shí),首先計(jì)算if后括號(hào)中的表達(dá)式的值,如果該表達(dá)式的值為true,則執(zhí)行緊跟著的復(fù)合語句,然后就結(jié)束整個(gè)語句的執(zhí)行;如果if后括號(hào)中的表達(dá)式的值為false,就依次再計(jì)算后面的elseif的表達(dá)式的值,直到出現(xiàn)某個(gè)表達(dá)式的值為true為止,然后執(zhí)行該elseif后面的復(fù)合語句,結(jié)束整個(gè)語句的執(zhí)行。如果所有的表達(dá)式的值都是false,就執(zhí)行else后面復(fù)合語句,結(jié)束整個(gè)語句的執(zhí)行。在下面的例子3中,用戶在鍵盤輸入3個(gè)數(shù),程序判斷這3個(gè)數(shù)能構(gòu)成什么形狀的三角形。,2switch開關(guān)語句switch語句是多分支的開關(guān)語句,它的一般格式定義如下:switch(表達(dá)式)case常量值1:若干個(gè)語句break;case常量值2:若干個(gè)語句break;case常量值n:若干個(gè)語句break;default:若干語句,switch語句中表達(dá)式的值必須是整型或字符型;常量值1到常量值n必須也是整型或字符型。switch語句首先計(jì)算表達(dá)式的值,如果表達(dá)式的值和某個(gè)case后面的常量值相同,就執(zhí)行該case里的若干個(gè)語句,直到碰到break語句為止。若沒有任何常量值與表達(dá)式的值相同,則執(zhí)行default后面的若干個(gè)語句。其中default是可有可無的,如果它不存在,并且所有的常量值都和表達(dá)式的值不相同,那么switch語句就不會(huì)進(jìn)行任何處理。需要注意的是,在同一個(gè)switch語句中,case后的常量值必須互不相同。下面的例子4使用了switch語句,用戶在鍵盤輸入一個(gè)代表月份的整數(shù),程序輸出是該月是在年度的第幾季度。,返回,3.12循環(huán)語句,1while循環(huán)while語句的一般格式:while(表達(dá)式)若干語句while語句由關(guān)鍵字while、括號(hào)中的一個(gè)求值為boolean型數(shù)據(jù)的表達(dá)式和一個(gè)復(fù)合語句組成,其中的復(fù)合語句稱作循環(huán)體,循環(huán)體只有一條語句時(shí),大括號(hào)“”可以省略,但最好不要省略,以便增加程序的可讀性。表達(dá)式稱作循環(huán)條件。while語句的執(zhí)行規(guī)則是:(1)計(jì)算表達(dá)式的值,如果該值是true時(shí),就進(jìn)行(2),否則進(jìn)行(3)。(2)執(zhí)行循環(huán)體,再進(jìn)行(1)(3)結(jié)束while語句的執(zhí)行while語句執(zhí)行規(guī)則如流程圖3.5所示。,while語句執(zhí)行規(guī)則如流程圖3.5所示。,圖3.5while循環(huán)語句,2do-while循環(huán)一般格式:do若干語句while(表達(dá)式);do-while循環(huán)和while循環(huán)的區(qū)別是:do-while的循環(huán)體至少被執(zhí)行一次,如圖3.6所示。下面的例子5分別用while和do-while循環(huán)計(jì)算常數(shù)e的近似值:e=1+1/1+1/2!+1/3!+。,3for循環(huán)for語句的一般格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體for語句由關(guān)鍵字for、括號(hào)中用分號(hào)分割的3個(gè)表達(dá)式,以及一個(gè)復(fù)合語句組成,其中的“表達(dá)式2”必須是一個(gè)求值為boolean型數(shù)據(jù)的表達(dá)式,而復(fù)合語句稱作循環(huán)體。,for語句的執(zhí)行規(guī)則是:(1)計(jì)算“表達(dá)式1”,完成必要的初始化工作(2)判斷“表達(dá)式2”的值,若“表達(dá)式2”的值為true,則進(jìn)行(3),否則進(jìn)行(4)。(3)執(zhí)行循環(huán)體,然后計(jì)算“表達(dá)式3”,以便改變循環(huán)條件,進(jìn)行(2)。(4)結(jié)束for語句的執(zhí)行.一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為“完數(shù)”。例如,6=1+2+3。下面的例子6使用for循環(huán)計(jì)算出1000內(nèi)的全部完數(shù),返回,3.13跳轉(zhuǎn)語句,跳轉(zhuǎn)語句是指用關(guān)鍵字break或continue加上分號(hào)構(gòu)成的語句,例如:break;在循環(huán)語句的循環(huán)體中使用跳轉(zhuǎn)語句。在一個(gè)循環(huán)中,比如循環(huán)50次的循環(huán)語句中,如果在某次循環(huán)體的執(zhí)行中執(zhí)行了break語句,那么整個(gè)循環(huán)語句就結(jié)束。如果在某次循環(huán)體的執(zhí)行中執(zhí)行了continue語句,那么本次循環(huán)就結(jié)束,即不再執(zhí)行本次循環(huán)中循環(huán)體中continue語句后面的語句,而轉(zhuǎn)入進(jìn)行下一次循環(huán)。下面的例子7和例子8使用的跳轉(zhuǎn)語句。,返回,本章導(dǎo)讀0.面向?qū)ο缶幊?.類聲明和類體2.類體的構(gòu)成3.構(gòu)造方法與對(duì)象的創(chuàng)建4.對(duì)象的引用與實(shí)體5.成員變量6.方法,第4章類與對(duì)象,7.方法重載8.this關(guān)鍵字9.包10.import語句11.訪問權(quán)限12.對(duì)象的組合13.基本類型數(shù)據(jù)的類包裝14.反編譯和文檔生成器15.JAR文件,面向?qū)ο缶幊?封裝封裝是面向?qū)ο蠓椒ǖ暮诵乃枷胫弧K袃蓚€(gè)含義:一是指把對(duì)象的屬性和行為看成為一個(gè)密不可分的整體,將這兩者“封裝”在一個(gè)不可分割的獨(dú)立單位(即對(duì)象)中。另一層含義指“信息隱蔽”,把不需要讓外界知道的信息隱藏起來,有些對(duì)象的屬性及行為允許外界用戶知道或使用,但不允許更改,而另一些屬性或行為,則不允許外界知曉;或只允許使用對(duì)象的功能,而盡可能隱蔽對(duì)象的功能實(shí)現(xiàn)細(xì)節(jié)。,繼承子類可以繼承父類的屬性(數(shù)據(jù))和功能(操作)。繼承是面向?qū)ο蠓椒ㄖ械闹匾拍?,并且是提高軟件開發(fā)效率的重要手段。多態(tài)多態(tài)程序中允許出現(xiàn)重名現(xiàn)象。Java語言中具有操作名稱的多態(tài)如:RectrectangleOne;,2為聲明的對(duì)象分配成員變量使用new運(yùn)算符和類的構(gòu)造方法為聲明的對(duì)象分配成員變量,如果類中沒有構(gòu)造方法,系統(tǒng)會(huì)調(diào)用默認(rèn)的構(gòu)造方法(默認(rèn)的構(gòu)造方法是無參數(shù)的,你一定還記得構(gòu)造方法的名字必須和類名相同這一規(guī)定),上述的Rect類提供了2個(gè)構(gòu)造方法,下面都是合法的創(chuàng)建對(duì)象的語句:rectangleOne=newRect();或rectangleOne=newRect(10,20);,如果類里定義了一個(gè)或多個(gè)構(gòu)造方法,那么Java不提供默認(rèn)的構(gòu)造方法。如果上述Rect只提供一個(gè)帶參數(shù)的構(gòu)造方法,代碼:rectangleOne=newRect();創(chuàng)建對(duì)象是非法的。創(chuàng)建對(duì)象的代碼:rectangleOne=newRect(10,20);會(huì)實(shí)現(xiàn)下述兩件事:(1)為成員變量分配內(nèi)存空間,然后執(zhí)行構(gòu)造方法中的語句。(2)給出一個(gè)信息,已確保這些成員變量是屬于對(duì)象rectangleOne的。,創(chuàng)建對(duì)象就是指為它分配成員變量,并獲得一個(gè)引用,以確保這些成員變量由它來“操作管理”。為對(duì)象分配成員變量后,內(nèi)存模型由聲明對(duì)象時(shí)的模型圖4.1,變成如圖4.2所示,箭頭示意對(duì)象可以操作這些屬于自己的成員變量。,圖4.2分配實(shí)體后的對(duì)象,0 xAA11,RectangleOne,3創(chuàng)建多個(gè)不同的對(duì)象一個(gè)類通過使用new運(yùn)算符可以創(chuàng)建多個(gè)不同的對(duì)象,這些對(duì)象將被分配不同的內(nèi)存空間,因此,改變其中一個(gè)對(duì)象的狀態(tài)不會(huì)影響其它對(duì)象的狀態(tài)。例如,我們使用前面的Rect類創(chuàng)建兩個(gè)對(duì)象:rectangleOne、rectangleTwo。rectangleOne=newRect(10,20);rectangleTwo=newRect(33,66);當(dāng)創(chuàng)建對(duì)象rectangleOne時(shí),Rect類中的成員變量sizeA、sizeB被分配內(nèi)存空間,并返回一個(gè)引用給ectangleOne;,當(dāng)再創(chuàng)建一個(gè)對(duì)象rectangleTwo時(shí),Rect類中的成員變量sizeA、sizeB再一次被分配內(nèi)存空間,并返回一個(gè)引用給rectangleTwo。內(nèi)存模型如圖4.3所示。,rectangleOne,圖4.3創(chuàng)建多個(gè)對(duì)象,0 xBB42,rectangleTwo,4使用對(duì)象對(duì)象不僅可以操作自己的變量改變狀態(tài),而且還擁有了使用創(chuàng)建它的那個(gè)類中的方法的能力,對(duì)象通過使用這些方法可以產(chǎn)生一定的行為。通過使用運(yùn)算符“.”,對(duì)象可以實(shí)現(xiàn)對(duì)自己的變量訪問和方法的調(diào)用。1)對(duì)象操作自己的變量(對(duì)象的屬性)2)對(duì)象調(diào)用類中的方法(對(duì)象的功能)下面例子1中,“Ladder”類創(chuàng)建了2個(gè)對(duì)象:ladderOne,ladderTwo。,返回,4.4對(duì)象的引用與實(shí)體,我們已經(jīng)知道,當(dāng)用類創(chuàng)建一個(gè)對(duì)象時(shí),成員變量被分配內(nèi)存空間,這些內(nèi)存空間稱做該對(duì)象的實(shí)體或變量,而對(duì)象中存放著引用,以確保這些變量由該對(duì)象操作使用。因此,如果兩個(gè)對(duì)象有相同的引用,那么就具有同樣的實(shí)體。假如使用例子1“Ladder”類的構(gòu)造方法創(chuàng)建了兩個(gè)對(duì)象t1,t2。t1=newLadder(11,22,33);t2=newLadder(6,12,18);,0 xAA,t1,0 xDD,t2,0 xDD,Java具有“垃圾收集”機(jī)制,Java的運(yùn)行環(huán)境周期地檢測(cè)某個(gè)實(shí)體是否已不再被任何對(duì)象所引用,如果發(fā)現(xiàn)這樣的實(shí)體,就釋放實(shí)體占有的內(nèi)存。因此,Java編程人員不必象C+程序員那樣,要時(shí)刻自己檢查哪些對(duì)象應(yīng)該釋放內(nèi)存。當(dāng)把變量t2中存放的引用賦給t1后,最初分配給對(duì)象t1的成員變量(實(shí)體)所占有的內(nèi)存就會(huì)被釋放。沒有實(shí)體的對(duì)象稱作空對(duì)象??諏?duì)象不能使用,即不能讓一個(gè)空對(duì)象去調(diào)用方法產(chǎn)生行為。假如程序中使用了空對(duì)象,程序在運(yùn)行時(shí)會(huì)出現(xiàn)異常:NullPointerException。由于對(duì)象是動(dòng)態(tài)地分配實(shí)體,所以Java的編譯器對(duì)空對(duì)象不做檢查。因此,在編寫程序時(shí)要避免使用空對(duì)象。,返回,4.5成員變量,用關(guān)鍵字static修飾的成員變量稱作靜態(tài)變量或類變量,而沒有使用static修飾的成員變量稱作實(shí)例變量。例如,下述A類中,x是實(shí)例變量,而y是類變量。classAfloatx;/實(shí)例變量staticinty;/類變量類變量是與類相關(guān)聯(lián)的數(shù)據(jù)變量,也就是說,類變量是和該類所創(chuàng)建的所有對(duì)象相關(guān)聯(lián)的變量,改變其中一個(gè)對(duì)象的這個(gè)類變量就同時(shí)改變了其它對(duì)象的這個(gè)類變量。,因此,類變量不僅可以通過某個(gè)對(duì)象訪問也可以直接通過類名訪問。實(shí)例變量?jī)H僅是和相應(yīng)的對(duì)象關(guān)聯(lián)的變量,也就是說,不同對(duì)象的實(shí)例變量互不相同,即分配不同的內(nèi)存空間,改變其中一個(gè)對(duì)象的實(shí)例變量不會(huì)影響其它對(duì)象的這個(gè)實(shí)例變量。實(shí)例變量必須通過對(duì)象訪問。下面例子2中,兩個(gè)“Lader”對(duì)象共享bottom。效果如圖4.7,2常量如果一個(gè)成員變量修飾為final,就是常量,常量的名字習(xí)慣用大寫字母,例如:finalintMAX;聲明常量時(shí)必須初始化。對(duì)于final修飾的成員變量,對(duì)象可以操作使用,但不能做更改操作。下面的例子給出了常量的用法。效果如圖4.9,返回,4.6方法,我們已經(jīng)知道,類體內(nèi)容可以有2種類型的成員:成員變量和方法。其中一部分方法稱作構(gòu)造方法,供類創(chuàng)建對(duì)象時(shí)使用,用來給出類所創(chuàng)建的對(duì)象的初始狀態(tài)。另一部分方法可分為實(shí)例方法和類方法,類所創(chuàng)建的對(duì)象可以調(diào)用這些方法形成一定的算法,體現(xiàn)對(duì)象具有某種功能。當(dāng)對(duì)象調(diào)用方法時(shí),方法中出現(xiàn)的成員變量就是指分配給該對(duì)象的成員變量。對(duì)象不可以調(diào)用構(gòu)造方法,構(gòu)造方法是專門用來創(chuàng)建對(duì)象的。方法的定義包括兩部分:方法聲明和方法體。一般格式為:,方法聲明部分方法體的內(nèi)容1方法聲明和方法體最基本的方法聲明包括方法名和方法的返回類型,返回類型也簡(jiǎn)稱作方法的類型。如:floatarea().,方法的名字必須符合標(biāo)識(shí)符規(guī)定。在給方法起名字時(shí)應(yīng)遵守以下習(xí)慣:名字如果使用拉丁字母,首寫字母使用小寫。如果由多個(gè)單詞組成,從第2個(gè)單詞開始的其它單詞的首寫字母使用大寫。例如floatgetTrangleArea()voidsetCircleRadius(doubleradius)等。方法聲明之后的一對(duì)大括號(hào)“”、“”以及之間的內(nèi)容稱作方法的方法體。類中的方法必須要有方法體,如果方法的類型是void類型,方法體中也可以不書寫任何語句。,2方法體的構(gòu)成方法體的內(nèi)容包括變量的定義和合法的Java語句,在方法體中聲明的變量以及方法的參數(shù)稱作局部變量,局部變量?jī)H僅在該方法內(nèi)有效。方法的參數(shù)在整個(gè)方法內(nèi)有效,方法內(nèi)定義的局部變量從它定義的位置之后開始有效。寫一個(gè)方法和C語言中寫一個(gè)函數(shù)完全類似,只不過在這里稱作方法。局部變量的名字必須符合標(biāo)識(shí)符規(guī)定,遵守習(xí)慣:名字如果使用拉丁字母,首寫字母使用小寫。如果由多個(gè)單詞組成,從第2個(gè)單詞開始的其它單詞的首寫字母使用大寫。,3實(shí)例方法與類方法除構(gòu)造方法外,其他的方法可分為實(shí)例方法或類方法。方法聲明中用關(guān)鍵字static修飾的稱作類方法或靜態(tài)方法,不用static修飾的稱作實(shí)例方法。一個(gè)類中的方法可以互相調(diào)用:實(shí)例方法可以調(diào)用該類中實(shí)例方法或類方法;類方法只能調(diào)用該類的類方法,不能調(diào)用實(shí)例方法;如:A類中的max方法和getMaxSqrt方法是類方法;sum和min方法是實(shí)例方法。,實(shí)例方法可以操作成員變量,無論是實(shí)例變量或類變量;而類方法只能操作類變量不能操作實(shí)例變量,也就是說類方法中不能有操作實(shí)例變量的語句。二者為何有著這樣的區(qū)別呢?(1)實(shí)例方法必須通過對(duì)象來調(diào)用(2)類方法可以通過類名調(diào)用無論類方法或?qū)嵗椒ǎ?dāng)被調(diào)用執(zhí)行時(shí),方法中的局部變量才被分配內(nèi)存空間,方法調(diào)用完畢,局部變量即刻釋放所占的內(nèi)存。下面的例子4,通過類名調(diào)用類方法。,4參數(shù)傳值當(dāng)方法被調(diào)用時(shí),如果方法有參數(shù),參數(shù)必須要實(shí)例化,即參數(shù)變量必須有具體的值。在Java中,方法的所有參數(shù)都是“傳值”的,也就是說,方法中參數(shù)變量的值是調(diào)用者指定的值的拷貝。如果向方法的int型參數(shù)x傳遞一個(gè)int值,那么參數(shù)x得到的值是傳遞值的拷貝。方法如果改變參數(shù)的值,不會(huì)影響向參數(shù)“傳值”的變量的值。(1)基本數(shù)據(jù)類型參數(shù)的傳值下面的例子5中,向一個(gè)方法的基本型參數(shù)傳值。效果如圖4.11,(2)引用類型參數(shù)的傳值Java的引用型數(shù)據(jù)包括我們以前學(xué)習(xí)過的對(duì)象、數(shù)組以及后面將要學(xué)習(xí)的接口。當(dāng)參數(shù)是引用類型時(shí),“傳值”傳遞的是變量的引用而不是變量所引用的實(shí)體。,圖4.10引用類型參數(shù)的傳值,實(shí)體,傳值,如果改變參數(shù)變量所引用的實(shí)體,就會(huì)導(dǎo)致原變量的實(shí)體發(fā)生同樣的變化,因?yàn)?,兩個(gè)引用型變量如果具有同樣的引用,就會(huì)用同樣的實(shí)體。但是,改變參數(shù)的引用不會(huì)影響向其傳值的變量的引用。下面的例子6向一個(gè)方法的引用型參數(shù)傳值。效果如圖4.13,注意在上述例子6中,tom調(diào)用方法f把對(duì)象jerry的引用“傳值”給參數(shù)a后,對(duì)象jerry和對(duì)象a就具有同樣的成員變量,即同樣實(shí)體。因此,jerry和a就具有同樣的功能,也就是說a調(diào)用方法產(chǎn)生的行為和jerry調(diào)用同一方法產(chǎn)生的行為完全相同。當(dāng)對(duì)象a執(zhí)行a=null;后,a就不再有任何實(shí)體,變成一個(gè)空對(duì)象,如果再執(zhí)行:a.setLeg(100);就會(huì)引起NullPointerExcetion異常。但是,jerry的引用沒有發(fā)生任何變化,它依然引用著原來的實(shí)體,仍然可以調(diào)用方法產(chǎn)生行為。在下面的例子7中,“Cone”類在創(chuàng)建對(duì)象時(shí),將一個(gè)“Circle”對(duì)象的引用“傳值”給“Cone”對(duì)象的“bottom”。效果如圖4.14,返回,4.8方法重載,方法重載是指一個(gè)類中可以有多個(gè)方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類型不同。方法的返回類型和參數(shù)的名字不參與比較,也就是說,如果兩個(gè)方法的名字相同,即使類型不同,也必須保證參數(shù)不同。下面例4-8Area類中g(shù)etArea方法是一個(gè)重載方法。效果如圖4.15,返回,4.9this關(guān)鍵字,this是Java的一個(gè)關(guān)鍵字,可以出現(xiàn)在實(shí)例方法和構(gòu)造方法中,但不可以出現(xiàn)在類方法中。1在構(gòu)造方法中使用thisthis關(guān)鍵字可以出現(xiàn)在類的構(gòu)造方法中,代表使用該構(gòu)造方法所創(chuàng)建的對(duì)象。下述例子9中的構(gòu)造方法中出現(xiàn)了this,表示該對(duì)象在構(gòu)造自己時(shí)調(diào)用了方法cry()。2在實(shí)例方法中使用thisthis關(guān)鍵字可以出現(xiàn)在類的實(shí)例方法中,代表使用該方法的當(dāng)前對(duì)象。,我們已經(jīng)知道,實(shí)例方法可以操作成員變量。實(shí)際上,當(dāng)成員變量在實(shí)例方法中出現(xiàn)時(shí),默認(rèn)的格式是:this.成員變量;意思是當(dāng)前對(duì)象的成員變量,如:classAintx;voidf()this.x=100;,在上述A類中的實(shí)例方法f中出現(xiàn)了this,this就代表使用f的當(dāng)前對(duì)象。所以,this.x就表示當(dāng)前對(duì)象的變量x,當(dāng)對(duì)象調(diào)用方法f時(shí),將100賦給該對(duì)象的變量x。因此,當(dāng)一個(gè)對(duì)象調(diào)用方法時(shí),方法中的成員變量就是指分配給該對(duì)象的成員變量。因此,通常情況下,可以省略成員變量名字前面的“this.”。我們知道類的實(shí)例方法可以調(diào)用類的其它方法,調(diào)用的默認(rèn)格式是:this.方法;,如:在上述B類中的方法f中出現(xiàn)了this,this代表使用方法f的當(dāng)前對(duì)象,所以,方法f的方法體中this.g()就是當(dāng)前對(duì)象調(diào)用方法g,也就是說,當(dāng)某個(gè)對(duì)象調(diào)用方法f過程中,又調(diào)用了方法g。由于這種邏輯關(guān)系非常明確,一個(gè)方法調(diào)用另一個(gè)方法時(shí)可以省略方法名字前面的“th
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 成功心理定律
- java代理機(jī)制面試題及答案
- 腫瘤患者夏季防暑指南
- 工程人員培訓(xùn)
- 郵政綜柜培訓(xùn)
- 羊水栓塞的產(chǎn)科護(hù)理查房
- 2025年中國(guó)內(nèi)部防火門行業(yè)市場(chǎng)全景分析及前景機(jī)遇研判報(bào)告
- 針織教程培訓(xùn)課件
- 腎內(nèi)科飲食指導(dǎo)
- 中醫(yī)腫瘤消融方案
- 2025年陜西省中考數(shù)學(xué)真題試卷及答案解析
- 呼吸機(jī)的維護(hù)與保養(yǎng)標(biāo)準(zhǔn)流程
- 2025年北方華創(chuàng)招聘筆試參考題庫(kù)含答案解析
- 期末綜合試題 2024-2025學(xué)年下期初中英語人教版七年級(jí)下冊(cè)(新教材)
- 2025年全國(guó)新高考I卷高考全國(guó)一卷真題英語試卷(真題+答案)
- 高中生物學(xué)業(yè)水平合格性考試:人教版必修1+必修2必背考點(diǎn)
- 安全生產(chǎn)應(yīng)急演練方案(合集)
- 2025江蘇揚(yáng)州寶應(yīng)縣“鄉(xiāng)村振興青年人才”招聘67人筆試模擬試題含答案詳解
- 2025年甘肅高考真題化學(xué)試題(解析版)
- 中國(guó)政法大學(xué)《中國(guó)政治制度史》2023-2024學(xué)年第二學(xué)期期末試卷
- 超高玻璃吊裝方案(3篇)
評(píng)論
0/150
提交評(píng)論