




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JavaSE核心編程課程整體目標(biāo)掌握J(rèn)ava語(yǔ)言根底知識(shí)理解面向?qū)ο蟮木幊趟枷脒\(yùn)用Java編寫命令行程序運(yùn)用JDBC編寫數(shù)據(jù)庫(kù)訪問(wèn)程序運(yùn)用Swing組件編寫圖形用戶界面程序運(yùn)用Swing組件和JDBC實(shí)現(xiàn)C/S結(jié)構(gòu)的應(yīng)用程序本章目標(biāo)了解Java語(yǔ)言了解Java程序的類型理解Java虛擬機(jī)〔JVM〕掌握J(rèn)ava程序運(yùn)行環(huán)境的配置編寫第一個(gè)基于Java的程序Java簡(jiǎn)介掌握J(rèn)ava程序運(yùn)行環(huán)境的配置編寫第一個(gè)基于Java的程序Java釋義“Java”一詞的本意是地名——“爪哇”;爪哇島位于南太平洋,是印度尼西亞的一局部。爪哇島關(guān)于爪哇全世界三大咖啡產(chǎn)地:巴西印尼爪哇島中國(guó)海南島由此可見(jiàn),Java的原意是指一個(gè)咖啡的產(chǎn)地,也可以說(shuō)是一種咖啡的品牌。Java語(yǔ)言簡(jiǎn)介Java是一種程序設(shè)計(jì)語(yǔ)言,由SunMicrosystem公司于1995年推出;早在1991年,Sun公司的JamesGosling等人開始開發(fā)名為Oak的程序設(shè)計(jì)語(yǔ)言,希望用來(lái)控制嵌入在有線電視機(jī)頂盒和PDA等設(shè)備中的微處理器;1994年,Oak語(yǔ)言正式更名為Java;Java語(yǔ)言憑借其獨(dú)有的平安性、可移植性和平臺(tái)無(wú)關(guān)性,迅速走紅。Java與InternetInternet使Java成為網(wǎng)絡(luò)上最流行的編程語(yǔ)言;同時(shí),Java對(duì)Internet的影響也意義深遠(yuǎn);在Java出現(xiàn)以前,幾乎沒(méi)有工具可以在Internet上執(zhí)行動(dòng)態(tài)交互程序;使用Java語(yǔ)言編寫的Applet程序可以對(duì)用戶的輸入和操作作出響應(yīng)。Java程序的類型-AppletApplet是用Java編寫,在Internet上運(yùn)行的程序,可以在任何客戶端系統(tǒng)上下載,在瀏覽器中運(yùn)行Java程序的類型-ApplicationApplication是指在計(jì)算機(jī)操作系統(tǒng)支持下運(yùn)行的程序,它既可以基于圖形界面,又可以基于控制臺(tái)Java的平臺(tái)無(wú)關(guān)性Java是一種既面向?qū)ο笥挚梢钥缙脚_(tái)的語(yǔ)言,即:編寫一次,隨處運(yùn)行;Java不僅適用于單機(jī)應(yīng)用程序和基于網(wǎng)絡(luò)的程序,也可用于創(chuàng)立消費(fèi)類設(shè)備的附件程序,如移動(dòng)、掌上設(shè)備等。Java源程序代碼WindowsLinuxSolarisJVMJava虛擬機(jī)Java字節(jié)碼(可跨平臺(tái))編譯運(yùn)行Java虛擬機(jī)Java虛擬機(jī)〔JavaVirtualMachine〕是可運(yùn)行Java字節(jié)碼的虛擬計(jì)算機(jī)系統(tǒng);使用Java語(yǔ)言編寫的程序,實(shí)際上是運(yùn)行在JVM之上,而不是運(yùn)行在操作系統(tǒng)上;它有一個(gè)解釋器組件,可以實(shí)現(xiàn)Java字節(jié)碼和計(jì)算機(jī)操作系統(tǒng)之間的通信。用戶USER字節(jié)碼程序JVM〔Java虛擬機(jī)〕操作系統(tǒng)硬件Java虛擬機(jī)的運(yùn)行過(guò)程網(wǎng)絡(luò)JIT代碼生成器.java源代碼文件.class字節(jié)碼文件編譯時(shí)運(yùn)行時(shí)硬件類加載器字節(jié)碼校驗(yàn)器解釋器Java開發(fā)工具包開發(fā)和運(yùn)行Java程序,必須依賴和使用由Sun公司提供的Java開發(fā)工具包〔JavaDevelopmentKit〕操作系統(tǒng)Java虛擬機(jī)Java基礎(chǔ)類庫(kù)客戶端編譯器瀏覽器插件開發(fā)工具集成開發(fā)環(huán)境JavaPlatform2JDK〔Java開發(fā)工具包〕從1.3版本以后,Sun公司將其正式更名為JavaPlatform2;為適應(yīng)不同的用途,又將其細(xì)分為三個(gè)版本:J2SE〔StandardEdition〕:標(biāo)準(zhǔn)版,適用于普通應(yīng)用程序的開發(fā);J2EE〔EnterpriseEdition〕:企業(yè)版,適用于大型企業(yè)級(jí)應(yīng)用程序的開發(fā);J2ME〔MicroEdition〕:微型版,適用于移動(dòng)設(shè)備或嵌入式設(shè)備的程序開發(fā)。下載安裝JDK翻開瀏覽器,在地址欄鍵入:,登錄到SUN官方網(wǎng)站,免費(fèi)下載JDK軟件和文檔下載完畢,即可安裝JDK;bin目錄:存放可執(zhí)行文件;lib目錄:存放Java的類庫(kù)文件;demo目錄:存放演示程序;jre目錄:存放Java運(yùn)行環(huán)境文件。配置環(huán)境變量安裝JDK后,還要配置環(huán)境變量才能開發(fā)和調(diào)試Java程序,右擊[我的電腦][屬性][高級(jí)][環(huán)境變量]編輯Path變量新建classpath變量開發(fā)Java程序的步驟創(chuàng)立Java源程序Java源程序可以使用任何文本編輯器創(chuàng)立與編輯,一般用.java作為擴(kuò)展名,其實(shí)就是一個(gè)使用Java語(yǔ)言編寫的文本文件;編譯源程序Java編譯器讀取Java源程序并翻譯成Java虛擬機(jī)能夠明白的指令集合,并以字節(jié)碼的形式保存在文件中,通常,字節(jié)碼文件以.class作為擴(kuò)展名;運(yùn)行class〔字節(jié)碼〕文件Java解釋器讀取字節(jié)碼文件,取出指令并翻譯成計(jì)算機(jī)能夠執(zhí)行的機(jī)器代碼,完成運(yùn)行過(guò)程。編寫第一個(gè)Java程序翻開記事本,新建一個(gè)文本文件,將文件名改為Hello.java,在文件中鍵入如下內(nèi)容并保存:classHello{publicstaticvoidmain(String[]args){System.out.println("Helloworld!");}}Java源程序擴(kuò)展名為.java的源文件使用記事本進(jìn)行編輯使用javac編譯器編譯源文件接下來(lái)需要將源程序進(jìn)行編譯;進(jìn)入命令提示行,切換到源文件所在的目錄,執(zhí)行javac命令,使用javac編譯器編譯源文件;javac命令的格式是:javac完整的源文件名切換到源文件所在的目錄切換到源文件所在的目錄切換到源文件所在的目錄class〔字節(jié)碼〕文件順利通過(guò)編譯后將生成一個(gè)擴(kuò)展名為.class的字節(jié)碼文件〔類描述文件〕。通過(guò)編譯后生成的擴(kuò)展名為.class的字節(jié)碼文件擴(kuò)展名為.java的源文件使用java解釋器運(yùn)行字節(jié)碼文件進(jìn)入命令提示行,在字節(jié)碼文件所在的目錄下,執(zhí)行java命令,使用java解釋器運(yùn)行字節(jié)碼文件java命令的格式是:java類名稱這里只需要類名稱,而不是帶擴(kuò)展名的文件名執(zhí)行java命令運(yùn)行字節(jié)碼文件程序運(yùn)行效果分析程序3-1關(guān)鍵字class用來(lái)定義一個(gè)類,Hello是類的名稱;在Java程序中,所有的語(yǔ)句都必須放在某個(gè)類中;整個(gè)類及其所有成員都包含在一對(duì)花括號(hào)中〔即{和}之間〕,它們標(biāo)志著類定義塊的開始和結(jié)束。定義類的一般語(yǔ)法: class類名 { …… }分析程序3-2程序必須從main函數(shù)開始執(zhí)行;關(guān)鍵字public是訪問(wèn)修飾符,用來(lái)控制類成員的可見(jiàn)范圍及作用域;關(guān)鍵字static允許在不創(chuàng)立類的實(shí)例的情況下,調(diào)用main函數(shù);關(guān)鍵字void用來(lái)說(shuō)明main函數(shù)是沒(méi)有返回值的;args是字符串?dāng)?shù)組,用來(lái)從命令行接收參數(shù);main函數(shù)的一般形式如下: publicstaticvoidmain(String[]args){ …… }分析程序3-3String[]是字符串類型的數(shù)組;在Java中,類名稱一般首字母大寫;使用System.out.println()將信息輸出到控制臺(tái)上,即打印出來(lái)。JavaAPI文檔JavaAPI文檔描述了Java的許多內(nèi)置功能,以及提供各種類的幫助說(shuō)明,它是程序員經(jīng)常查閱的資料可登錄Sun公司的官方網(wǎng)站免費(fèi)下載Java文件中的注釋與其它編程語(yǔ)言一樣,也可以在Java文件添加注釋,Java文件中的注釋有三種:?jiǎn)涡凶⑨專阂?/開始,在行尾結(jié)束多行注釋:以/*開始,以*/結(jié)束,可以有多行文檔注釋:以/**開始,以*/結(jié)束,可以有多行可以使用javadoc命令,將文檔注釋從源代碼中提取出來(lái),生成HTML文件,形成類似于JavaAPI文檔的幫助說(shuō)明文件。使用javadoc命令生成API文檔javadoc命令的格式是:javadoc完整的源文件名執(zhí)行javadoc命令提取文檔注釋的內(nèi)容生成的文檔Java語(yǔ)言的特點(diǎn)2-1簡(jiǎn)單去掉了C和C++中許多復(fù)雜功能,如指針、運(yùn)算符重載等,沒(méi)有g(shù)oto語(yǔ)句,沒(méi)有struct和union等面向?qū)ο驤ava是完全面向?qū)ο蟮木幊陶Z(yǔ)言,比C++更徹底,純度更高健壯性沒(méi)有指針,防止對(duì)指針的誤操作造成程序崩潰程序員分配的內(nèi)存空間,無(wú)需釋放,由Java虛擬機(jī)的垃圾回收機(jī)制來(lái)統(tǒng)一完成此項(xiàng)工作,防止了內(nèi)存泄漏Java語(yǔ)言的特點(diǎn)2-2平安性由于Java取消了指針運(yùn)算,有效地提高了程序的平安性Java程序運(yùn)行在Java虛擬機(jī)上,虛擬機(jī)可以有效地過(guò)濾掉惡意代碼,防止程序員有意編寫的病毒程序分布性Java程序可以跨平臺(tái),跨操作系統(tǒng),完全支持網(wǎng)絡(luò)應(yīng)用程序的設(shè)計(jì)多線程Java程序使用一個(gè)稱為“多線程”的進(jìn)程同時(shí)處理多項(xiàng)任務(wù)使用Eclipse來(lái)開發(fā)總結(jié)Java是面向?qū)ο蟮?、跨平臺(tái)的程序設(shè)計(jì)語(yǔ)言;Java程序是運(yùn)行在Java虛擬機(jī)之上的;要下載安裝JDK,才可以開發(fā)和運(yùn)行Java程序;JDK提供一系列的工具,這些工具位于JDK安裝路徑的bin目錄下,常用的有:javac:編譯java:運(yùn)行javadoc:提取文檔可以使用任何文本編輯器編寫Java源程序;作業(yè)熟悉JDK目錄,以及JDK環(huán)境變量使用記事本編寫HelloWorld程序使用記事本編寫九九乘法表使用記事本編寫空心菱形Java語(yǔ)言根底Java是面向?qū)ο蟛⑶铱梢钥缙脚_(tái)的編程語(yǔ)言Java程序是運(yùn)行在JVM〔Java虛擬機(jī)〕之上的要運(yùn)行和開發(fā)Java程序,必須下載和安裝由Sun公司提供的JDK〔Java開發(fā)工具包〕配置環(huán)境變量:Path和classpath三個(gè)常用的JDK工具:javac、java和javadoc本章相關(guān)詞匯〔藍(lán)色為關(guān)鍵字〕單詞說(shuō)明byte數(shù)據(jù)類型,字節(jié)型boolean數(shù)據(jù)類型,布爾型true真,布爾型的字面值false假,布爾型的字面值null空本章目標(biāo)Java中的變量和數(shù)據(jù)類型Java中變量的作用域規(guī)那么數(shù)據(jù)類型轉(zhuǎn)換Java中的輸出語(yǔ)句Java中的運(yùn)算符和表達(dá)式Java語(yǔ)言根底Java中的變量和數(shù)據(jù)類型變量變量是內(nèi)存中的一塊存儲(chǔ)區(qū)域,是存儲(chǔ)數(shù)據(jù)的根本單元;聲明變量的語(yǔ)法: 數(shù)據(jù)類型標(biāo)識(shí)符[=值];如: intnum; floatmoney=123.45f; charch1,ch2=‘A’;數(shù)據(jù)類型數(shù)據(jù)類型用來(lái)確定要存儲(chǔ)在內(nèi)存單元中的數(shù)據(jù)的類型;在Java中,數(shù)據(jù)類型被區(qū)分成兩個(gè)種類:原始數(shù)據(jù)類型引用數(shù)據(jù)類型原始數(shù)據(jù)類型原始數(shù)據(jù)類型是最簡(jiǎn)單的數(shù)據(jù)形式,與C的根本數(shù)據(jù)類型很相似:數(shù)據(jù)類型大小位取值范圍說(shuō)明boolean
布爾型1true/false用于存儲(chǔ)真值/假值byte
字節(jié)型8-128~127數(shù)據(jù)存儲(chǔ)在內(nèi)存中的最原始形態(tài)char
字符型16‘\u0000’~‘\uFFFF’用于存儲(chǔ)字符,以Unicode編碼方式short短整型16-32768~32767略(參見(jiàn)P20表2.1)int
整型32-231~231-1
略(參見(jiàn)P20表2.1)long長(zhǎng)整型64-263~263-1
略(參見(jiàn)P20表2.1)float浮點(diǎn)型32略略(參見(jiàn)P20表2.1)double雙精度64略略(參見(jiàn)P20表2.1)引用數(shù)據(jù)類型在Java中,除了上述8種原始數(shù)據(jù)類型的變量以外,其余的全都屬于引用數(shù)據(jù)類型,其中包括:數(shù)組對(duì)象存儲(chǔ)在引用類型變量中的值是該變量表示的值的地址;可以借用C語(yǔ)言中指針的概念來(lái)理解引用數(shù)據(jù)類型。回憶C語(yǔ)言中的內(nèi)存分配C語(yǔ)言中內(nèi)存分配的兩種形式:棧內(nèi)存:特點(diǎn):和作用域同生命周期,自動(dòng)申請(qǐng),自動(dòng)釋放。申請(qǐng)方式:局部變量,形式參數(shù)。棧內(nèi)存中的空間一般都有名稱,通過(guò)變量名訪問(wèn)其存儲(chǔ)的數(shù)據(jù)。堆內(nèi)存〔即動(dòng)態(tài)內(nèi)存分配〕:特點(diǎn):手工申請(qǐng),手工釋放,生命周期由程序員決定。申請(qǐng)方式:由malloc函數(shù)或calloc函數(shù)申請(qǐng),realloc函數(shù)進(jìn)行調(diào)整,free函數(shù)負(fù)責(zé)釋放。堆內(nèi)存中的空間一般沒(méi)有名稱,只能通過(guò)指針訪問(wèn)。Java中的內(nèi)存分配Java中的原始數(shù)據(jù)類型與C語(yǔ)言中的根本數(shù)據(jù)類型一樣,其變量都是在棧中分配空間;而除了8種原始數(shù)據(jù)類型以外,其它的任何數(shù)據(jù)都不可以在棧中分配,只能到堆中開辟空間,而在堆中分配的空間又只能通過(guò)指針訪問(wèn);通過(guò)指針訪問(wèn)堆內(nèi)存的方式,在Java中被稱作引用數(shù)據(jù)類型;可以認(rèn)為,Java中的引用就類似于C語(yǔ)言中的指針,只是對(duì)指針進(jìn)行了一定程度上的包裝,防止了因直接操作指針而造成的數(shù)據(jù)意外損壞,從而導(dǎo)致程序錯(cuò)誤的情況。標(biāo)識(shí)符命名規(guī)那么變量、函數(shù)、數(shù)組、對(duì)象、類和接口等等都需要命名,這些名稱統(tǒng)稱為標(biāo)識(shí)符;Java中對(duì)于標(biāo)識(shí)符的命名規(guī)那么作了如下限制:只能由英文字母、數(shù)字、下劃線“_”和“$”符號(hào)組成;必須以英文字母、“_”或“$”開頭,即不能以數(shù)字開頭;除“_”和“$”以外,不能包含其它任何特殊字符;不能與關(guān)鍵字沖突;嚴(yán)格區(qū)分大小寫。變量的作用域和生命周期變量的作用域指變量起作用的范圍,說(shuō)明變量在什么局部可以被訪問(wèn);變量的生命周期是指變量在內(nèi)存中存在的周期,即什么時(shí)候分配空間,什么時(shí)候銷毀。CJava變量聲明程序中所有使用到的變量應(yīng)該在程序開始部分預(yù)先進(jìn)行聲明??梢栽诔绦虻娜魏尾糠致暶?,即:何處使用,何處聲明。作用域規(guī)則變量的作用域?qū)儆诼暶魉暮瘮?shù)范圍之內(nèi),變量的最小作用域是函數(shù)。變量的作用域?qū)儆诼暶魉拇a塊,變量的最小作用域是包含它的一對(duì){}之間。/*有1,2,3,4四個(gè)數(shù)字,能組成多少個(gè)不相同且無(wú)重復(fù)的三位數(shù)?*/public
classScopeVariable{
public
static
voidmain(String[]args){
intcount=0;
for(inti=1;i<=4;i++)//在需要使用變量時(shí)聲明
{
for(intj=1;j<=4;j++){
for(intk=1;k<=4;k++){
if(i!=j&&i!=k&&j!=k){
inttemp=i*100+j*10+k;System.out.print(temp+"\t");count++;}}}}/*思考:在此處可以訪問(wèn)到變量k嗎?*/
System.out.println("\n有:"+count+"個(gè)符合要求的數(shù)");}}作用域例如數(shù)據(jù)類型轉(zhuǎn)換程序中經(jīng)常會(huì)遇到要將數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換的情況〔如:在一個(gè)表達(dá)式中存在不同類型的操作數(shù)時(shí)〕,Java的數(shù)據(jù)類型轉(zhuǎn)換比C控制得更為嚴(yán)格;數(shù)據(jù)類型轉(zhuǎn)換有兩種情況:自動(dòng)類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換自動(dòng)類型轉(zhuǎn)換自動(dòng)類型轉(zhuǎn)換也稱作隱式類型轉(zhuǎn)換;將一種類型的變量賦值給另一種類型的變量時(shí),只要滿足以下條件,就會(huì)發(fā)生自動(dòng)類型轉(zhuǎn)換:兩種類型之間相互兼容;目標(biāo)類型大于源類型〔即類型提升〕;如: charch='A'; intnum=ch; floatf=num; doubled=f; //類型轉(zhuǎn)換自動(dòng)發(fā)生,無(wú)需顯式說(shuō)明強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換也稱作顯式類型轉(zhuǎn)換;如果被轉(zhuǎn)換的值的數(shù)據(jù)類型大于其目標(biāo)類型,將會(huì)喪失局部信息;如: intx=65; charch=x;這樣的語(yǔ)句將報(bào)錯(cuò),因?yàn)閏har類型小于int類型,編譯器無(wú)法將其自動(dòng)轉(zhuǎn)換,只能進(jìn)行強(qiáng)制轉(zhuǎn)換: intx=65; charch=(char)x;類型提升規(guī)那么不難看出,在有類型提升的情況下,編譯器將自動(dòng)進(jìn)行類型轉(zhuǎn)換,否那么就要進(jìn)行強(qiáng)制類型轉(zhuǎn)換;類型提升應(yīng)遵循如下規(guī)那么:兩種類型必須兼容,且目標(biāo)類型大于源類型,例如: byte、char和short類型都可以提升為int型。對(duì)于表達(dá)式而言,其最終結(jié)果將會(huì)與表達(dá)式中最高的數(shù)據(jù)類型相同。輸出語(yǔ)句如果要將某些信息打印到屏幕上,就必須使用輸出語(yǔ)句;使用System.out.println()實(shí)現(xiàn)換行輸出效果;使用System.out.print()實(shí)現(xiàn)輸出但不換行效果;無(wú)論輸出什么類型的數(shù)據(jù),只需將數(shù)據(jù)作為參數(shù)傳遞給它們即可,而無(wú)需像C語(yǔ)言中那樣,使用%s、%d之類的控制字符,如:
inta=10;
floatf=3.14f; System.out.println(a); System.out.print(f); System.out.println('X');使用轉(zhuǎn)義字符控制輸出格式有些時(shí)候,我們可能會(huì)需要對(duì)輸出格式進(jìn)行控制,這就使用到了轉(zhuǎn)義字符;以下是一些常用的轉(zhuǎn)義字符:轉(zhuǎn)義字符說(shuō)明\n換行符,將光標(biāo)移到下一行\(zhòng)r回車符,將光標(biāo)移到當(dāng)前行的開頭\t制表符,將光標(biāo)移到下一制表位\\輸出反斜線\'輸出單引號(hào)\"輸出雙引號(hào)運(yùn)算符和表達(dá)式運(yùn)算符是通過(guò)一定的運(yùn)算規(guī)那么操作一個(gè)或多個(gè)操作數(shù),并生成結(jié)果的特定符號(hào);運(yùn)算符和操作數(shù)的有效組合稱為表達(dá)式;Java提供了一系列豐富的運(yùn)算符,包括:算術(shù)運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符條件運(yùn)算符賦值運(yùn)算符
算術(shù)運(yùn)算符
算術(shù)運(yùn)算符主要用于數(shù)學(xué)計(jì)算,一般使用數(shù)值作為操作數(shù):
運(yùn)算符說(shuō)明一元-一元減,即取負(fù)++自增,如:++a等價(jià)于a=a+1--自減,如:--a等價(jià)于a=a–1二元+加法,返回兩個(gè)操作數(shù)的和-減法,返回兩個(gè)操作數(shù)的差*乘法,返回兩個(gè)操作數(shù)的積/除法,返回兩個(gè)操作數(shù)的商%取模,返回兩個(gè)操作數(shù)整除后的余數(shù)
關(guān)系運(yùn)算符
關(guān)系運(yùn)算符可以測(cè)試兩個(gè)操作數(shù)之間的關(guān)系〔但不會(huì)改變操作數(shù)的值〕,關(guān)系表達(dá)式的結(jié)果為boolean型true/false:運(yùn)算符說(shuō)明==等于,檢查兩個(gè)操作數(shù)是否相等!=不等于,檢查兩個(gè)操作數(shù)是否不相等>大于,檢查左操作數(shù)是否大于右操作數(shù)>=大于等于,檢查左操作數(shù)是否大于或等于右操作數(shù)<小于,檢查左操作數(shù)是否小于右操作數(shù)<=小于等于,檢查左操作數(shù)是否小于或等于右操作數(shù)邏輯運(yùn)算符邏輯運(yùn)算符與boolean型操作數(shù)一起使用:運(yùn)算符說(shuō)明JavaC一元!邏輯非(NOT)邏輯取非(NOT)二元&邏輯與(AND)與C語(yǔ)言中的&&相同按位與|邏輯或(OR)與C語(yǔ)言中的||相同按位或&&短路與如左操作數(shù)為false,則不運(yùn)算右操作數(shù)邏輯與(AND)||短路或如左操作數(shù)為ture,則不運(yùn)算右操作數(shù)邏輯或(OR)位運(yùn)算符常見(jiàn)的位運(yùn)算符有:&、|、^、~參見(jiàn)例如:BitwiseOperatorTest還有移位運(yùn)算符<<、>>、>>>參見(jiàn)例如:ShiftTest短路與和短路或Java提供了兩個(gè)在其它計(jì)算機(jī)語(yǔ)言中沒(méi)有的邏輯運(yùn)算符,這就是邏輯與和邏輯或的短路版本;對(duì)于短路與〔&&〕,如果其左側(cè)為false,那么不再計(jì)算其右側(cè),整個(gè)表達(dá)式的結(jié)果為false,只有左側(cè)為true時(shí)才計(jì)算右側(cè);對(duì)于短路或〔||〕,如果其左側(cè)為true,那么不再計(jì)算其右側(cè),整個(gè)表達(dá)式的結(jié)果為true,只有左側(cè)為false時(shí),才計(jì)算右側(cè)。inta=10;intb=20;if(++a==12&++b==22){……}System.out.println(a);System.out.println(b);/*這里使用的是邏輯與,試分析最后的輸出結(jié)果*/inta=10;intb=20;if(++a==12&&++b==22){……}System.out.println(a);System.out.println(b);/*這里使用的是短路與,試分析最后的輸出結(jié)果*/11211120短路與例如賦值運(yùn)算符賦值運(yùn)算符的運(yùn)算順序是從右至左的:運(yùn)算符說(shuō)明=賦值,將右側(cè)的值賦給左側(cè)的變量+=相加并賦值,如:a+=b等價(jià)于a=a+b-=相減并賦值,如:a-=b等價(jià)于a=a–b*=相乘并賦值,如:a*=b等價(jià)于a=a*b/=相除并賦值,如:a/=b等價(jià)于a=a/b%=取模并賦值,如:a%=b等價(jià)于a=a%b條件運(yùn)算符?:條件運(yùn)算符是三元運(yùn)算符;它的一般形式是: 表達(dá)式1?表達(dá)式2:表達(dá)式3根據(jù)表達(dá)式1的結(jié)果來(lái)判斷執(zhí)行表達(dá)式2還是表達(dá)式3,如果表達(dá)式1的結(jié)果為true,那么執(zhí)行表達(dá)式2,否那么執(zhí)行表達(dá)式3;條件運(yùn)算符在某些情況下能夠替代小型的if…else語(yǔ)句。運(yùn)算符的優(yōu)先級(jí)很多情況下,一個(gè)表達(dá)式由多個(gè)運(yùn)算符組成,優(yōu)先級(jí)決定運(yùn)算符的計(jì)算順序:優(yōu)先級(jí)運(yùn)算符1括號(hào):()和[]2一元運(yùn)算符:-、++(前置)、--(前置)、!3算術(shù)運(yùn)算符:*、/、%、+和-4關(guān)系運(yùn)算符:>、>=、<、<=、==和!=5邏輯運(yùn)算符:&、|、&&和||6條件運(yùn)算符:?:7賦值運(yùn)算符:=、*=、/=、%=、+=和-=總結(jié)Java中的變量和數(shù)據(jù)類型Java中變量的作用域規(guī)那么數(shù)據(jù)類型轉(zhuǎn)換Java中的輸出語(yǔ)句Java中的運(yùn)算符和表達(dá)式流程控制與數(shù)組Java中的數(shù)組new關(guān)鍵字控制流語(yǔ)句一般情況下,程序是從上往下依次順序執(zhí)行的;但很多時(shí)候,我們需要改變程序執(zhí)行的流程,這就使用到了控制流語(yǔ)句;控制流語(yǔ)句包括:判斷語(yǔ)句循環(huán)語(yǔ)句跳轉(zhuǎn)語(yǔ)句判斷語(yǔ)句判斷語(yǔ)句也稱作條件語(yǔ)句或分支語(yǔ)句;判斷語(yǔ)句主要用來(lái)控制程序在何種情況下執(zhí)行某一局部;判斷語(yǔ)句包括:if語(yǔ)句if…else語(yǔ)句if…elseif語(yǔ)句switch…case語(yǔ)句循環(huán)語(yǔ)句循環(huán)語(yǔ)句也稱作迭代語(yǔ)句;循環(huán)語(yǔ)句可用于重復(fù)執(zhí)行相同的操作;循環(huán)語(yǔ)句包括:while語(yǔ)句do…while語(yǔ)句for語(yǔ)句跳轉(zhuǎn)語(yǔ)句跳轉(zhuǎn)語(yǔ)句允許以非線性的方式執(zhí)行程序,可以將控制權(quán)轉(zhuǎn)到程序的其它局部;跳轉(zhuǎn)語(yǔ)句包括:break語(yǔ)句continue語(yǔ)句Java拋棄了C語(yǔ)言中的goto語(yǔ)句。數(shù)組數(shù)組用于將相同類型的數(shù)據(jù)存儲(chǔ)在連續(xù)的存儲(chǔ)單元中;可以通過(guò)指定數(shù)組的名稱和長(zhǎng)度來(lái)聲明數(shù)組;一旦聲明數(shù)組的大小,就不能再修改;數(shù)組元素通過(guò)數(shù)組名和索引來(lái)訪問(wèn),索引從0開始;數(shù)組可以是一維,也可以是多維?;貞汣語(yǔ)言中的數(shù)組在C語(yǔ)言中,從存儲(chǔ)方式上講,聲明數(shù)組有兩種情況;在棧內(nèi)存中分配空間,如:
intary[10];//聲明有10個(gè)整型元素的數(shù)組在堆內(nèi)存中分配空間,如:
int*p=NULL;//聲明整型指針
//指針指向堆空間
p=(int*)malloc(10*sizeof(int));C語(yǔ)言允許有棧數(shù)組,也允許有堆數(shù)組。
new關(guān)鍵字在Java中,不允許將數(shù)組分配在棧內(nèi)存中,只能分配在堆內(nèi)存中;Java中沒(méi)有類似于malloc、calloc、realloc和free等函數(shù),取而代之的是new關(guān)鍵字;new是Java中內(nèi)置的操作符;new操作符用來(lái)從堆中分配指定類型的內(nèi)存空間,并返回相應(yīng)類型的引用,其作用類似于malloc函數(shù)。聲明數(shù)組例如public
classArrayDemo{
public
static
voidmain(String[]args){
//聲明整型數(shù)組的引用,類似于C中的int*p;
int[]ary;
//為數(shù)組引用在堆內(nèi)存中分配實(shí)際的內(nèi)存空間
//類似于C中的p=(int*)malloc(10*sizeof(int));ary=new
int[10];
//使用循環(huán)為數(shù)組元素賦值
for(inti=0;i<ary.length;i++){ary[i]=i;
}
//使用循環(huán)將數(shù)組元素逐個(gè)輸出到控制臺(tái)
for(inti=0;i<ary.length;i++){System.out.println(ary[i]);}}}Java中聲明數(shù)組的幾種方式在Java中聲明數(shù)組有如下方式://僅聲明數(shù)組的引用,但沒(méi)有分配內(nèi)存空間float[]fAry;//聲明數(shù)組的同時(shí),根據(jù)指定的長(zhǎng)度分配內(nèi)存,但數(shù)組中沒(méi)有值char[]chAry=new
char[10];//聲明數(shù)組并分配內(nèi)存,同時(shí)將其初始化int[]ary1=new
int[]{1,2,3,4,5};//與前一種方式相同,僅僅只是語(yǔ)法相對(duì)簡(jiǎn)略int[]ary2={1,2,3,4,5};數(shù)組之間賦值在C語(yǔ)言中,不可以將數(shù)組直接賦值給另一個(gè)數(shù)組;在Java中,語(yǔ)法上允許這樣做,但實(shí)際得到的效果是兩個(gè)數(shù)組引用指向同一塊內(nèi)存。
int[]ary1={2,4,6,8,10};
int[]ary2; ary2=ary1;//允許這樣賦值108642堆棧ary1ary2數(shù)組賦值例如public
classArrayDemo{
public
static
voidmain(String[]args){
int[]ary1={2,4,6,8,10};//聲明并初始化數(shù)組1
int[]ary2;//聲明數(shù)組2ary2=ary1;//將數(shù)組1賦值給數(shù)組2
ary2[3]=1024;//通過(guò)數(shù)組2修改其中一個(gè)元素的值
//打印出數(shù)組1中的元素
System.out.println("數(shù)組1中的元素:");
for(inti=0;i<ary1.length;i++){System.out.println(ary1[i]);}
//打印出數(shù)組2中的元素
System.out.println("數(shù)組2中的元素:");
for(inti=0;i<ary2.length;i++){System.out.println(ary2[i]);}}}關(guān)于數(shù)組長(zhǎng)度在Java中,程序員可以不再關(guān)注數(shù)組的長(zhǎng)度,數(shù)組自帶的length屬性將負(fù)責(zé)保管數(shù)組的長(zhǎng)度;C語(yǔ)言不檢查數(shù)組的邊界,數(shù)組索引完全由程序員掌握;
Java對(duì)數(shù)組下標(biāo)越界情況強(qiáng)加約束;如果試圖訪問(wèn)不在有效索引以內(nèi)的元素,將會(huì)引發(fā)運(yùn)行錯(cuò)誤。Java中的垃圾回收機(jī)制在C語(yǔ)言中,被malloc或calloc函數(shù)分配的堆內(nèi)存在使用完畢以后,必須使用free函數(shù)進(jìn)行釋放,否那么將會(huì)造成內(nèi)存泄漏;同樣的,在Java中由new分配的內(nèi)存也將存在內(nèi)存泄漏的可能;但釋放內(nèi)存的任務(wù)是由Java虛擬機(jī)來(lái)完成的,程序員可以不再關(guān)心此項(xiàng)工作;如果某塊內(nèi)存空間沒(méi)有任何引用指向它,那么虛擬機(jī)就將其認(rèn)定為垃圾;虛擬機(jī)并不是隨時(shí)隨地地立即回收垃圾,而是在系統(tǒng)比較空閑的時(shí)候,才會(huì)執(zhí)行回收任務(wù)。命令行參數(shù)在命令行使用java命令執(zhí)行程序時(shí),可以將一些參數(shù)傳遞給main函數(shù);main函數(shù)攜帶的String[]〔字符串?dāng)?shù)組〕類型的形參args正是為了接收這些來(lái)自命令行的參數(shù);可以從命令行傳遞任意多個(gè)字符串給main函數(shù),其間使用空格隔開,也可以不傳遞任何參數(shù);這些傳遞進(jìn)來(lái)的多個(gè)字符串最后以字符串?dāng)?shù)組的形式,供main函數(shù)中加以使用。命令行參數(shù)例如publicclassArgumentDemo{publicstaticvoidmain(String[]args){intlen=args.length;//獲得命令行參數(shù)的個(gè)數(shù)if(len>0)//判斷是否有命令行參數(shù){//如果有,將其逐一打印到控制臺(tái)System.out.println(len+"個(gè)命令行參數(shù),具體如下:");for(inti=0;i<args.length;i++){System.out.println(args[i]);}}else{//否那么給出提示信息System.out.println("您沒(méi)有傳遞任何命令行參數(shù)。");}}}總結(jié)Java中數(shù)組是引用數(shù)據(jù)類型,只能存放在堆內(nèi)存中;數(shù)組必須由new關(guān)鍵字為其分配內(nèi)存;釋放內(nèi)存的工作由Java虛擬機(jī)的垃圾回收機(jī)制來(lái)完成;可以利用命令行參數(shù)接收來(lái)自用戶的輸入。作業(yè)利用命令行參數(shù)輸入一個(gè)整數(shù),并判斷該數(shù)字是否為奇數(shù),如果是奇數(shù),那么用其作行數(shù)打印空心菱形PS:將字符串轉(zhuǎn)換為數(shù)字的方法intnum=Integer.parseInt(Stringnumber);利用命令行參數(shù)輸入三個(gè)整數(shù),并對(duì)三個(gè)數(shù)字進(jìn)行降序排列。PS:將字符串轉(zhuǎn)換為數(shù)字的方法intnum=Integer.parseInt(Stringnumber);利用命令行參數(shù)輸入多個(gè)參數(shù),并賦值給一數(shù)組,同時(shí)判斷該數(shù)組是否為回文數(shù)組PS:例如數(shù)組{“123”,”222”,”333”,”222”,”123”}就是回文數(shù)組,即元素倒置過(guò)后與原元素一樣邏輯趣味思考題有兩個(gè)桶,一個(gè)容量為5升,一個(gè)容量為3升,現(xiàn)在用桶子來(lái)乘水,請(qǐng)您用這兩個(gè)桶準(zhǔn)確的乘出4升水來(lái)。有10堆魚,每堆魚10條,正常情況下每條魚10斤,但是現(xiàn)在這10堆魚中有1堆魚全是每條9斤,現(xiàn)在給你一把秤〔假設(shè)這把秤可以稱很重很重的東西〕,請(qǐng)問(wèn)您能通過(guò)一次稱量就找出這堆缺斤少量的魚嗎?回憶Java中的數(shù)據(jù)類型分為:原始數(shù)據(jù)類型和引用數(shù)據(jù)類型;在數(shù)據(jù)類型轉(zhuǎn)換中,由低類型轉(zhuǎn)至高類型,將會(huì)自動(dòng)〔隱式〕類型轉(zhuǎn)換,而從高類型轉(zhuǎn)至低類型,那么必須強(qiáng)制〔顯式〕類型轉(zhuǎn)換;Java中的數(shù)組是引用數(shù)據(jù)類型,必須由new關(guān)鍵字在堆中分配內(nèi)存;Java虛擬機(jī)的垃圾回收機(jī)制將自動(dòng)釋放不再使用的內(nèi)存;使用命令行參數(shù)接收來(lái)自用戶的輸入。相關(guān)詞匯單
詞說(shuō)
明Class類,種類public公共的,公有的private私有的,私人的object對(duì)象,物體encapsulation封裝,包裝attribute屬性,特征method方法member成員constructor構(gòu)造方法,構(gòu)造器類和對(duì)象I了解什么是面向?qū)ο竺嫦驅(qū)ο蟮母靖拍铑悓?duì)象封裝繼承多態(tài)如何定義類,如何創(chuàng)立對(duì)象成員運(yùn)算符訪問(wèn)控制權(quán)限:public和private構(gòu)造方法類和對(duì)象I了解什么是面向?qū)ο竺嫦驅(qū)ο蟮母靖拍铑悓?duì)象封裝繼承多態(tài)如何定義類,如何創(chuàng)立對(duì)象成員運(yùn)算符訪問(wèn)控制權(quán)限:public和private構(gòu)造方法什么是面向?qū)ο??ObjectOriendtedProgramming對(duì)象以…為導(dǎo)向的程序設(shè)計(jì)面向?qū)ο缶幊叹褪鞘褂脤?duì)象進(jìn)行程序設(shè)計(jì),簡(jiǎn)寫成OOP。面向?qū)ο蟮木幊陶Z(yǔ)言如今,面向?qū)ο蟮木幊趟枷胍呀?jīng)成為主流;面向?qū)ο蟮木幊陶Z(yǔ)言正大行其道,最具代表性的有:C++JavaC#連數(shù)據(jù)庫(kù)也開始面向?qū)ο罅?,如Oracle。面向?qū)ο蟮木幊趟枷隣OP旨在計(jì)算機(jī)程序中模擬現(xiàn)實(shí)世界中的概念在計(jì)算機(jī)程序中用相似的實(shí)體模擬現(xiàn)實(shí)世界中的實(shí)體在OOP中,現(xiàn)實(shí)世界的所有事物全都被視為對(duì)象設(shè)計(jì)和實(shí)現(xiàn)軟件系統(tǒng)的方法C語(yǔ)言的編程方式C語(yǔ)言是結(jié)構(gòu)化的編程語(yǔ)言〔StructuredProgramming,簡(jiǎn)作SP〕;強(qiáng)調(diào)精巧的數(shù)據(jù)結(jié)構(gòu)和優(yōu)越的算法,關(guān)注程序的運(yùn)行效率;不適合于大規(guī)模的程序開發(fā);程序模塊之間協(xié)調(diào)性差,程序的重用性、平安性、健壯性和可維護(hù)性都存在較大的缺陷。SP和OOP比照SPOOP設(shè)計(jì)思路自頂向下、層次化、分解自底向上、對(duì)象化、綜合程序單元函數(shù)模塊對(duì)象設(shè)計(jì)方法程序=算法+數(shù)據(jù)結(jié)構(gòu)程序=對(duì)象=數(shù)據(jù)+方法優(yōu)點(diǎn)相互獨(dú)立,代碼共享接近人的思維方式模擬客觀世界缺點(diǎn)數(shù)據(jù)與程序不一致維護(hù)困難客觀世界的無(wú)序性概念不成熟面向?qū)ο蟮娜笤敲捶庋b繼承多態(tài)對(duì)象對(duì)象是面向?qū)ο缶幊痰暮诵木植?,是?shí)際存在的具體實(shí)體,具有明確定義的狀態(tài)和行為;對(duì)象其實(shí)就是“數(shù)據(jù)”和“函數(shù)”的封裝體,其中:數(shù)據(jù)表示自身的狀態(tài),也稱作“屬性”或“成員數(shù)據(jù)”;函數(shù)表示自身的功能,也稱作“方法”或“成員函數(shù)”。姓名:布蘭尼職銜:收銀員年齡:35體重:60千克操作:收款打印帳單收銀員對(duì)象顧客姓名:朱麗葉年齡:28體重:52千克操作:購(gòu)買商品顧客對(duì)象狀態(tài)行為類人們?yōu)榱烁玫卣J(rèn)識(shí)世界,將現(xiàn)實(shí)生活中的事物〔對(duì)象〕劃分成類;同一類中的事物總是具有一些共性;類以共同的特性和行為定義實(shí)體;類是具有相同屬性和和行為的一組對(duì)象的集合。屬性事物的特性在類中用變量表示;每個(gè)對(duì)象的每個(gè)屬性都擁有其特定的值;屬性名稱由類的所有對(duì)象共享;對(duì)象或?qū)嶓w擁有的特征在類中表示時(shí)稱為屬性。學(xué)生對(duì)象姓名年齡住址……屬性方法事物的行為和動(dòng)作在類中用函數(shù)表示;每個(gè)對(duì)象都有相同的動(dòng)作和行為;對(duì)象執(zhí)行的操作在類中表示為方法。學(xué)生對(duì)象吃飯方法睡覺(jué)上課……類和對(duì)象的區(qū)別類是用來(lái)描述實(shí)體的“模板”或“原型”;對(duì)象是實(shí)際的實(shí)體,每一個(gè)對(duì)象都是類的一個(gè)具體實(shí)例;類用來(lái)定義對(duì)象所有的屬性和方法,同一類的所有對(duì)象都擁有相同的特征和操作;可以將類理解成生產(chǎn)產(chǎn)品的模具,而對(duì)象那么是根據(jù)此模具生產(chǎn)的一個(gè)個(gè)產(chǎn)品。類與結(jié)構(gòu)最簡(jiǎn)單的理解方式:區(qū)別在于:結(jié)構(gòu)體一般只有數(shù)據(jù)〔屬性〕而沒(méi)有函數(shù)〔方法〕。類結(jié)構(gòu)體結(jié)構(gòu)體變量對(duì)象CJava封裝將某些東西包裝在一起,然后以新的完整形式呈現(xiàn)出來(lái);隱藏屬性、方法或?qū)崿F(xiàn)細(xì)節(jié)的處理方式稱為封裝;封裝其實(shí)就是有選擇性地公開或隱藏某些信息,它解決了數(shù)據(jù)的平安性問(wèn)題。一個(gè)人類的對(duì)象姓名:張三體重:50kg……密碼:******屬性走路吃飯……方法可以公開無(wú)所謂不可以公開繼承繼承就是重用現(xiàn)有的類來(lái)生成新類的一種特征;通俗地講就是從現(xiàn)有的類〔即父類或基類〕創(chuàng)立新類〔子類或派生類〕的過(guò)程;現(xiàn)實(shí)生活中,繼承可以到達(dá)財(cái)產(chǎn)重用的目的,而在Java中,繼承可以使代碼重用。多態(tài)多態(tài)是指同一函數(shù)在不同的類中有不同的實(shí)現(xiàn);多態(tài)的好處就是使類更靈活,更便于擴(kuò)充。抽象把相同的或相似的對(duì)象歸為一類的這個(gè)過(guò)程就是抽象,所以,抽象就是分析問(wèn)題的方法;抽象的根本原那么:只關(guān)心主要問(wèn)題,而不關(guān)心次要問(wèn)題;只關(guān)心主要矛盾,而不關(guān)心次要矛盾;只關(guān)心相同的東西,而不關(guān)心不同的東西;只關(guān)心問(wèn)題是什么,能夠完成什么,而不關(guān)心怎樣去完成。抽象的過(guò)程其實(shí)就是面向?qū)ο缶幊痰暮诵乃枷?。在Java中定義類/*定義學(xué)生類*/classStudent{Stringname;//姓名
intage;//年齡
floatweight;//體重
/*吃飯的方法*/
voiddining(){System.out.println("吃飽了...");weight++;}
/*走路的方法*/
voidwalk(){System.out.println("走累了...");weight--;}}成員變量成員函數(shù)定義類的語(yǔ)法class
類名{
成員列表//包括成員變量和成員函數(shù)}在Java中定義類struct
結(jié)構(gòu)體名{
成員列表//只有成員變量,沒(méi)有成員函數(shù)};在C中定義結(jié)構(gòu)體習(xí)慣上,類名的首字母大寫,如:Student在Java中創(chuàng)立對(duì)象/*Test類,用來(lái)容納main方法*/publicclassTest{/*main方法,程序入口*/publicstaticvoidmain(String[]args){Studentstd;//聲明Student類型的引用std=newStudent();//創(chuàng)立Student類型的對(duì)象="張三";//為姓名賦值std.age=18;//為年齡賦值std.weight=50;//為體重賦值std.dining();//調(diào)用成員方法System.out.println(std.weight);std.walk();System.out.println(std.weight);}}創(chuàng)立對(duì)象的語(yǔ)法和數(shù)組相似,對(duì)象也是引用數(shù)據(jù)類型,只能使用new運(yùn)算符從堆中分配內(nèi)存;創(chuàng)立對(duì)象的一般語(yǔ)法: 類名引用名=new類名();使用已經(jīng)定義好的類,創(chuàng)立該類對(duì)象的過(guò)程稱為“實(shí)例化”。注意:這里要有括號(hào)成員運(yùn)算符.在C語(yǔ)言中,必須要先聲明結(jié)構(gòu)體變量,才可以訪問(wèn)結(jié)構(gòu)體中的成員;同樣的,只有先實(shí)例化類的對(duì)象,才可以訪問(wèn)到類中的成員〔屬性和方法〕;使用成員運(yùn)算符〔.〕來(lái)訪問(wèn)成員屬性或成員方法;一般語(yǔ)法是: 對(duì)象名.成員名如:std.age=18;//為成員屬性賦值 std.dining();//調(diào)用成員方法訪問(wèn)權(quán)限:public和privateC語(yǔ)言中結(jié)構(gòu)體的成員可以從任何地方進(jìn)行訪問(wèn),這將給數(shù)據(jù)的平安留下極大的隱患;為了防止從類外部直接訪問(wèn)類成員而造成的數(shù)據(jù)損壞,Java對(duì)類成員的訪問(wèn)制定了約束;關(guān)鍵字public和private是訪問(wèn)修飾符,用來(lái)說(shuō)明某個(gè)成員是否可以從類外部進(jìn)行訪問(wèn);public修飾的成員可以在任何地方進(jìn)行訪問(wèn),不受任何約束;private修飾的成員只能夠被本類中的其它成員訪問(wèn),而不能從類的外部進(jìn)行訪問(wèn)。訪問(wèn)權(quán)限無(wú)法從類的外部訪問(wèn)私有成員;其它類的私有成員對(duì)于當(dāng)前類也是隱藏的??梢詮念愅獠吭L問(wèn)類屬性或方法私有屬性或方法公有不可從類外部訪問(wèn)訪問(wèn)權(quán)限例如classStudent{
privateStringname;//姓名,私有的,不可以從類外部直接訪問(wèn)
private
intage;//年齡,私有的,不可以從類外部直接訪問(wèn)
private
floatweight;//體重,私有的,不可以從類外部直接訪問(wèn)
//吃飯的方法,公有的,可以從任何地方訪問(wèn)
public
voiddining(){System.out.println("吃飽了...");weight++;//dining方法是類內(nèi)部成員,可以直接訪問(wèn)本類私有成員
}
//走路的方法,公有的,可以從任何地方訪問(wèn)
public
voidwalk(){System.out.println("走累了...");weight--;//walk方法是類內(nèi)部成員,可以直接訪問(wèn)本類私有成員
}}public
classTest{
public
static
voidmain(String[]args){Studentstd=newStudent();//實(shí)例化一個(gè)Student對(duì)象
std.age=18;//試圖從類外部訪問(wèn)私有成員,將會(huì)報(bào)出一個(gè)錯(cuò)誤
std.dining();//允許訪問(wèn)公有成員
}}訪問(wèn)權(quán)限〔續(xù)〕加上訪問(wèn)修飾符有時(shí)候可能會(huì)給操作數(shù)據(jù)帶來(lái)不便,但可以在很大程度上保證數(shù)據(jù)的平安;一般地,我們會(huì)將成員屬性聲明為private,而將成員方法聲明為public,但這樣做并不是絕對(duì)的;有時(shí)候,類外部可能要操作到某些私有數(shù)據(jù)成員,那么就可以增加一個(gè)公有的方法,再由這個(gè)方法來(lái)操作私有數(shù)據(jù),防止因類外部的誤操作而造成的數(shù)據(jù)損壞;因?yàn)閙ain方法要由類外部的虛擬機(jī)來(lái)調(diào)用,所以main方法必須聲明成public。修改Student類classStudent{//定義學(xué)生類
privateStringname;//姓名,私有
private
intage;//年齡,私有
private
floatweight;//體重,私有
public
voidsetName(Stringname){//為姓名賦值的方法,公有
=name;}
public
voidsetAge(inta){//為年齡賦值的方法,公有
age=a;}
public
voidsetWeight(floatw){//為體重賦值的方法,公有
weight=w;}
public
voiddisplay(){//將所有信息打印出來(lái)的方法,公有
System.out.println("姓名:"+name+",年齡:"+age+",體重:"+weight);}
public
voiddining(){……}//吃飯的方法,公有,代碼略
public
voidwalk(){……}//走路的方法,公有,代碼略}public
classTest{
public
static
voidmain(String[]args){Studentstd=newStudent();//實(shí)例化學(xué)生類對(duì)象
std.setName("張三");//為姓名賦值
std.setAge(18);//為年齡賦值
std.setWeight(55);//為體重賦值
std.dining();//調(diào)用吃飯的方法
std.display();//將信息打印出來(lái)
}}對(duì)象初始化在上例中,只能逐個(gè)地為數(shù)據(jù)成員賦值,如果想在對(duì)象實(shí)例化的同時(shí)就初始化成員屬性,就使用到了構(gòu)造方法;構(gòu)造方法是特殊的成員方法,它與類同名,在對(duì)象實(shí)例化時(shí)由虛擬機(jī)自動(dòng)調(diào)用;請(qǐng)注意:構(gòu)造方法沒(méi)有返回值類型,也不能有返回值。構(gòu)造方法例如/*定義ConstructorDemo類,對(duì)構(gòu)造方法進(jìn)行測(cè)試*/classConstructorDemo{
/*構(gòu)造方法,方法名與類名完全一致無(wú)需指定返回值類型,也不能有返回值*/
publicConstructorDemo(){System.out.println("這是構(gòu)造方法");}}/*Test類,用來(lái)容納main方法一般將包含有main方法的類聲明為public*/public
classTest{
/*main方法,程序入口*/
public
static
voidmain(String[]args){
/*實(shí)例化ConstructorDemo類的對(duì)象*/ConstructorDemocd=newConstructorDemo();}}構(gòu)造方法正是由于在實(shí)例化對(duì)象的同時(shí)會(huì)自動(dòng)調(diào)用構(gòu)造方法,所以構(gòu)造方法一般用來(lái)給數(shù)據(jù)成員分配資源或初始化數(shù)據(jù)成員;構(gòu)造方法的一般形式: 訪問(wèn)權(quán)限類名〔形參列表〕{方法體}因?yàn)槭怯商摂M機(jī)來(lái)調(diào)用構(gòu)造方法,所以構(gòu)造方法一般應(yīng)定義成public。為Student類添加構(gòu)造方法classStudent{//定義學(xué)生類
privateStringname;//姓名,私有
private
intage;//年齡,私有
private
floatweight;//體重,私有
//構(gòu)造方法,根據(jù)傳遞進(jìn)來(lái)的參數(shù),為數(shù)據(jù)成員賦值
publicStudent(Stringn,inta,floatw){
//分別為每個(gè)數(shù)據(jù)成員賦初始值
name=n;age=a;weight=w;}
public
voidsetName(Stringn){……}//為姓名賦值的方法,公有,代碼略
public
voidsetAge(inta){……}//為年齡賦值的方法,公有,代碼略
public
voidsetWeight(floatw){……}//為體重賦值的方法,公有,代碼略
public
voiddisplay(){……}//將所有信息打印出來(lái)的方法,公有,代碼略
public
voiddining(){……}//吃飯的方法,公有,代碼略
public
voidwalk(){……}//走路的方法,公有,代碼略}public
classTest{
public
static
voidmain(String[]args){
//利用構(gòu)造方法,為數(shù)據(jù)成員指定初始值
Studentstd=newStudent("張三",18,55);std.display();//將信息打印出來(lái)
}}構(gòu)造方法〔續(xù)〕每個(gè)對(duì)象在生成時(shí)都必須執(zhí)行構(gòu)造方法,而且只能執(zhí)行一次;如果構(gòu)造方法調(diào)用失敗,那么對(duì)象也無(wú)法創(chuàng)立;不可以顯式地直接調(diào)用構(gòu)造方法;在沒(méi)有定義構(gòu)造方法的情況下,類會(huì)自動(dòng)產(chǎn)生一個(gè)無(wú)參數(shù)的默認(rèn)構(gòu)造方法,這個(gè)默認(rèn)的構(gòu)造方法什么都不做;一旦顯式地定義了構(gòu)造方法,默認(rèn)構(gòu)造方法自動(dòng)消失。總結(jié)對(duì)象由狀態(tài)〔屬性〕和行為〔方法〕組成;類是具有相同屬性和方法的對(duì)象的集合;封裝可以隱藏對(duì)象實(shí)現(xiàn)的具體細(xì)節(jié);必須先實(shí)例化類的對(duì)象,才可以訪問(wèn)到其中的成員;成員運(yùn)算符用于訪問(wèn)對(duì)象的成員;成員可以定義為公有,也可以定義為私有;構(gòu)造方法一般用來(lái)初始化對(duì)象中的數(shù)據(jù)成員;如果不定義構(gòu)造方法,將有默認(rèn)的構(gòu)造方法,一旦定義,默認(rèn)的構(gòu)造方法自動(dòng)消失。練習(xí)編寫一個(gè)包含名為Calculator類的程序。定義兩個(gè)整型屬性以及對(duì)該兩個(gè)變量的setter和getter,編寫用于對(duì)兩個(gè)屬性執(zhí)行加、減、乘、除運(yùn)算方法。在main方法里創(chuàng)立該類的對(duì)象并訪問(wèn)這些方法。編寫一個(gè)名為Box的類,含整型的length,width,height,volume四個(gè)屬性,要求在構(gòu)造方法中將其初始化,并定義一個(gè)計(jì)算體積的calcVolume方法和一個(gè)輸出體積的print方法,在main方法中進(jìn)行調(diào)用思考有三筐水果,一筐裝的全是蘋果,第二筐裝的全是橘子,第三筐是橘子與蘋果混在一起??鹕系臉?biāo)簽都是騙人的,〔比方,如果標(biāo)簽寫的是橘子,那么可以肯定筐里不會(huì)只有橘子,可能還有蘋果〕你的任務(wù)是拿出其中一筐,從里面只拿一只水果,然后正確寫出三筐水果的標(biāo)簽。一列時(shí)速15英里的火車從洛杉磯出發(fā),駛向紐約。另外一列時(shí)速20英里的火車從紐約出發(fā),駛向洛杉磯。如果一只鳥以每小時(shí)25英里的速度飛行,在同一時(shí)間從洛杉磯出發(fā),在兩列火車之間往返飛行,到火車相遇時(shí)為止,鳥飛了多遠(yuǎn)?回憶對(duì)象由屬性〔數(shù)據(jù)〕和方法〔函數(shù)〕組成;類是具有相同屬性和方法的對(duì)象的集合;封裝可以隱藏對(duì)象實(shí)現(xiàn)的細(xì)節(jié)局部;對(duì)象是引用數(shù)據(jù)類型,使用new運(yùn)算符創(chuàng)立對(duì)象實(shí)例,使用成員運(yùn)算符訪問(wèn)對(duì)象中的成員;訪問(wèn)修飾符用來(lái)控制訪問(wèn)權(quán)限,可以有效地保證數(shù)據(jù)平安;構(gòu)造方法一般用來(lái)初始化對(duì)象中的數(shù)據(jù)成員相關(guān)詞匯單詞說(shuō)明this這,這個(gè)static靜態(tài)的package包裹,包import引入,導(dǎo)入overloaded重載,超載overloadedmethod方法重載類和對(duì)象II方法重載重載構(gòu)造方法對(duì)象在內(nèi)存中的存放形式this關(guān)鍵字靜態(tài)成員,static關(guān)鍵字包打包,package關(guān)鍵字導(dǎo)入包,import關(guān)鍵字類和對(duì)象II方法重載重載構(gòu)造方法對(duì)象在內(nèi)存中的存放形式this關(guān)鍵字靜態(tài)成員,static關(guān)鍵字包打包,package關(guān)鍵字導(dǎo)入包,import關(guān)鍵字提示在Java中,函數(shù)無(wú)需C語(yǔ)言中的前向聲明,只要直接定義即可;Java中,函數(shù)被稱為方法;定義一個(gè)方法的一般形式: [訪問(wèn)權(quán)限]返回值類型方法名稱(形參列表){ 方法主體; }我們更關(guān)注的是方法原型,對(duì)于方法原型的三個(gè)主要組成局部應(yīng)當(dāng)明確區(qū)分:返回值類型方法名稱形式參數(shù)在Java中定義方法/*Java中的方法例如代碼片段*//*定義求平方值的方法*/publicintsquare(intx){return(x*x);}返回值類型方法名稱形式參數(shù)案例/*編寫求絕對(duì)值的方法來(lái)求整數(shù)的絕對(duì)值*//*AbsoluteValue類,其中包含求絕對(duì)值的方法Java中的任何方法都必須在類中定義*/public
classAbsoluteValue{
/*求絕對(duì)值的方法*/
public
intabs(intx){
return((x>=0)?x:-x);}
/*main方法,程序入口*/
public
static
voidmain(String[]args){
//必須先實(shí)例化類的對(duì)象,才可以調(diào)用到其中的成員方法
AbsoluteValueobj=newAbsoluteValue();
inta=-8,b;b=obj.abs(a);//調(diào)用abs方法求a的絕對(duì)值
System.out.println(a+"的絕對(duì)值是"+b);}}方法的定義方法的調(diào)用案例分析在上面的案例中,我們已經(jīng)定義了求整數(shù)絕對(duì)值的方法;但有時(shí)候,我們可能還需要求浮點(diǎn)數(shù)的絕對(duì)值,請(qǐng)問(wèn):可以繼續(xù)使用這個(gè)方法嗎?事實(shí)上是行不通的,這個(gè)方法只能求出整數(shù)的絕對(duì)值,對(duì)于浮點(diǎn)數(shù),還需另外再定義求浮點(diǎn)數(shù)絕對(duì)值的方法。修改案例public
classAbsoluteValue{
/*求整數(shù)絕對(duì)值的方法*/
public
intabsOfInt(intx){
return((x>=0)?x:-x);}
/*求浮點(diǎn)數(shù)絕對(duì)值的方法*/
public
floatabsOfFloat(floatx){
return((x>=0)?x:-x);}
public
static
voidmain(String[]args){AbsoluteValueobj=newAbsoluteValue();
inta=-8,b;b=obj.absOfInt(a);System.out.println(a+"的絕對(duì)值是"+b);
floatc=-3.14f,d;d=obj.absOfFloat(c);System.out.println(c+"的絕對(duì)值是"+d);}}如果還要求其它類型的絕對(duì)值,就需要定義更多的方法,這對(duì)于調(diào)用者來(lái)說(shuō),將會(huì)是非常麻煩的事情。方法重載用于定義一組方法,這些方法具有相同的名稱,并執(zhí)行類似的操作,但是卻使用不同的參數(shù)列表;編譯器會(huì)根據(jù)調(diào)用時(shí)傳遞的實(shí)際參數(shù)自動(dòng)判斷具體調(diào)用的是哪個(gè)重載方法,如:/*abs方法的重載*/intabs(intx){……}floatabs(floatx){……}doubleabs(doublex){……}longabs(longx){……}方法重載的三大原那么方法名相同參數(shù)不同〔可以有三方面的不同〕數(shù)量不同類型不同順序不同同一作用域溫馨提示:方法重載跟方法的返回值類型沒(méi)有任何關(guān)系。也就是說(shuō),只有返回值不同的方法不能構(gòu)成重載。/*錯(cuò)誤的方法重載*/voidfun(intx){……};intfun(intx){……};方法重載例如public
classAbsoluteValue{
public
intabs(intx){//重載方式1,求整數(shù)的絕對(duì)值
return((x>=0)?x:-x);}
public
floatabs(floatx){//重載方式2,求浮點(diǎn)數(shù)的絕對(duì)值
return((x>=0)?x:-x);}
public
doubleabs(doublex){//重載方式3,求雙精度數(shù)的絕對(duì)值
return((x>=0)?x:-x);}
public
longabs(longx){//重載方式4,求長(zhǎng)整型數(shù)的絕對(duì)值
return((x>=0)?x:-x);}
public
static
voidmain(String[]args){AbsoluteValueobj=newAbsoluteValue();
inta=-8,b;b=obj.abs(a);System.out.println(a+"的絕對(duì)值是"+b);
floatc=-3.14f,d;d=obj.abs(c);System.out.println(c+"的絕對(duì)值是"+d);}}方法重載的兩種方式之一利用不同數(shù)據(jù)類型的參數(shù)重載;對(duì)于帶有相同數(shù)量參數(shù)但參數(shù)類型不同的重載方法,編譯器可以區(qū)分它們,如:只要所有參數(shù)式樣都是唯一的,就可以使用多個(gè)重載;很多編程語(yǔ)言已經(jīng)重載了輸出方法,以便您可以用相同的函數(shù)名稱輸出任何類型的數(shù)據(jù)。intsquare(intx){……}floatsquare(floatx){……}doublesquare(doublex){……}方法重載的兩種方式之二利用不同數(shù)量的參數(shù)重載,如:將調(diào)用與參數(shù)最匹配的方法,如果沒(méi)有方法得出最正確匹配,那么編譯器將報(bào)錯(cuò);編譯器解決重載的方式與方法定義的順序無(wú)關(guān);重載不考慮方法的返回值類型。/*函數(shù)定義*/intfun(intn1){……}intfun(intn1,intn2,intn3){……}/*函數(shù)調(diào)用*/fun(a);fun(x,y,z);方法重載的作用域規(guī)那么只有屬于同一作用域范圍內(nèi)的方法才能構(gòu)成重載。classFirst{……public
voidshow(){……}……}classSecond{……public
voidshow(intx){……}……}不構(gòu)成重載課堂練習(xí)1在Java中,對(duì)于成員方法 floatadd(floatf1,floatf2){……} 下面選項(xiàng)〔〕是對(duì)該成員方法的重載。intadd(intn1,intn2){……}floatadd(floatf){……}voidadd(floatf1,floatf2){……}voidadd(floatf1,floatf2,floatx){……}floatadd(floatf2,floatf1){……}課堂練習(xí)2在Java中,以下方法〔〕不能與 intfun(intx){……} 構(gòu)成方法重載。intfun(intx,inty){……}floatfun(intx){……}intfun(floatx){……}intfun(intx,inty,intz){……}關(guān)于方法重載的重要提示請(qǐng)勿將功能完全不一樣的方法進(jìn)行重載!重載構(gòu)造方法方法重載的一個(gè)重要應(yīng)用就是重載構(gòu)造方法;可以定義一組構(gòu)造方法,使其構(gòu)成重載關(guān)系,從而方便使用者能夠靈活機(jī)動(dòng)地以各種不同的方式來(lái)實(shí)例化對(duì)象。重載構(gòu)造方法例如classMyTime{//定義時(shí)間類
private
intmHour,mMinute,mSecond;//三個(gè)成員變量,時(shí)、分、秒
publicMyTime(){//構(gòu)造方法重載1mHour=0;mMinute=0;mSecond=0;}
publicMyTime(intmHour){//構(gòu)造方法重載2 mHour=mHour;mMinute=0;mSecond=0;}
publicMyTime(inthour,intminute){//構(gòu)造方法重載3mHour=hour;mMinute=minute;mSecond=0;}
publicMyTime(inthour,intminute,intsecond){//構(gòu)造方法重載4mHour=hour;mMinute=minute;mSecond=second;}
public
voiddisplay(){//顯示時(shí)間信息的方法
System.out.println(mHour+":"+mMinute+":"+mSecond);}}重載構(gòu)造方法例如〔續(xù)〕/*測(cè)試時(shí)間類*/public
classTest{
/*main方法,程序入口*/
public
static
voidmain(String[]args){
//分別調(diào)用不同的構(gòu)造方法來(lái)初始化時(shí)間對(duì)象
MyTimet1=newMyTime();//調(diào)用重載方式1t1.display();MyTimet2=newMyTime(8);//調(diào)用重載方式2t2.display();MyTimet3=newMyTime(8,30);//調(diào)用重載方式3t3.display();MyTimet4=newMyTime(8,30,30);//調(diào)用重載方式4t4.display();}}/*使用重載構(gòu)造方法可以使初始化對(duì)象的方式靈活機(jī)動(dòng),大大方便類的使用者。*/對(duì)象在內(nèi)存中的存放形式成員方法1成員方法2……成員方法n成員變量1成員變量2……成員變量n成員變量1成員變量2……成員變量n成員變量1成員變量2……成員變量n對(duì)象1對(duì)象3對(duì)象2每個(gè)對(duì)象都有自己獨(dú)立的數(shù)據(jù)成員,但是所有的對(duì)象共享成員方法。this關(guān)鍵字既然所有的對(duì)象都共用相同的成員方法,那么在不同的對(duì)象都調(diào)用同一方法時(shí),它是怎么確定要使用哪個(gè)對(duì)象的數(shù)據(jù)成員呢?每個(gè)成員方法都有一個(gè)隱含的this引用,它總是指向調(diào)用它的對(duì)象;關(guān)鍵字this給出用于調(diào)用成員方法的對(duì)象的地址;每當(dāng)調(diào)用
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 供方采購(gòu)合同范本
- 企業(yè)項(xiàng)目合資合同范本
- 浙江長(zhǎng)興縣龍山中學(xué)人教版七年級(jí)下冊(cè)歷史與社會(huì)第八單元第三課 中華文明探源教學(xué)設(shè)計(jì)
- 2024年韶關(guān)市曲江區(qū)住房和城鄉(xiāng)建設(shè)管理局招聘筆試真題
- 公司英文合同范本
- 農(nóng)田路養(yǎng)護(hù)合同范本
- 前臺(tái)收銀合同范本
- 包材銷售合同范本
- 2024年金昌市金川區(qū)圖書館招聘筆試真題
- 農(nóng)村自建住宅買賣合同范本
- 勞動(dòng)防護(hù)用品培訓(xùn)試卷帶答案
- ORACLE執(zhí)行計(jì)劃和SQL調(diào)優(yōu)
- 2024年鐘山職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 2024年湖南交通職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 研究生導(dǎo)師談心談話記錄內(nèi)容范文
- 小學(xué)機(jī)器人課題報(bào)告
- 《字體設(shè)計(jì)》課程標(biāo)準(zhǔn)
- 圖像生成中的風(fēng)格遷移方法研究
- 寒假社會(huì)實(shí)踐大學(xué)生返鄉(xiāng)
- 站樁的知識(shí)講座
- 杭州園區(qū)招商規(guī)劃方案
評(píng)論
0/150
提交評(píng)論