Java基礎(chǔ)知識課件_第1頁
Java基礎(chǔ)知識課件_第2頁
Java基礎(chǔ)知識課件_第3頁
Java基礎(chǔ)知識課件_第4頁
Java基礎(chǔ)知識課件_第5頁
已閱讀5頁,還剩278頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

OracleJavaEE實訓(xùn)教材系列Java面向?qū)ο蟮暮诵倪壿嫷谝徽翵ava技術(shù)簡介目標(biāo)Java編程語言的主要概念Java產(chǎn)品分組產(chǎn)品生命周期的各階段Java基礎(chǔ)知識Java編程語言的關(guān)鍵概念面向?qū)ο蠓植际胶唵位嗑€程安全平臺獨立性Java基礎(chǔ)知識過程化編程過程化編程著重于順序。Java基礎(chǔ)知識面向?qū)ο驤ava基礎(chǔ)知識分布式Java基礎(chǔ)知識簡單化使用引用代替內(nèi)存指針。boolean數(shù)據(jù)類型有true或false值。自動管理內(nèi)存。Java基礎(chǔ)知識多線程Java基礎(chǔ)知識安全Java基礎(chǔ)知識依賴于平臺的程序Java基礎(chǔ)知識依賴于平臺的程序Java基礎(chǔ)知識依賴于平臺的程序Java基礎(chǔ)知識獨立于平臺的程序Java基礎(chǔ)知識獨立于平臺的程序Java基礎(chǔ)知識認(rèn)識Java產(chǎn)品組Java基礎(chǔ)知識使用Java平臺標(biāo)準(zhǔn)版SDK組件Java運行環(huán)境(JRE):所選平臺上的Java虛擬機所選平臺上的Java類庫Java編譯器Java類庫(API)文檔(單獨下載)其它工具,例如創(chuàng)建Java存檔文件(JAR文件)和調(diào)試Java程序的工具Java程序示例Java基礎(chǔ)知識產(chǎn)品生命周期(PLC)的各階段1. 分析2. 設(shè)計3. 開發(fā)4. 測試5. 實現(xiàn)6. 維護7. 產(chǎn)品終止(EOL)Java基礎(chǔ)知識分析階段Java基礎(chǔ)知識設(shè)計階段Java基礎(chǔ)知識開發(fā)階段Java基礎(chǔ)知識測試階段Java基礎(chǔ)知識實現(xiàn)階段Java基礎(chǔ)知識維護階段Java基礎(chǔ)知識產(chǎn)品終止(EOL)階段Java基礎(chǔ)知識第二章創(chuàng)建第一個Java程序目標(biāo)JDK軟件開發(fā)工具Java程序的裝載與執(zhí)行創(chuàng)建并運行HelloJava程序Java基礎(chǔ)知識Java應(yīng)用程序Java基礎(chǔ)知識開發(fā)與運行環(huán)境Java基礎(chǔ)知識開發(fā)與運行環(huán)境JRE=JVM+JavaSE標(biāo)準(zhǔn)類庫JDK=JRE+開發(fā)工具集(例如Javac編譯工具等)Java基礎(chǔ)知識Java虛擬機(JVM)什么是JVM?JVM對平臺有依賴性嗎?Java程序?qū)ζ脚_有依賴性嗎?什么是JavaHotSpot?虛擬機?什么是JavaHotspot?客戶端虛擬機?什么是JavaHotspot?服務(wù)器端虛擬機?Java基礎(chǔ)知識JDK的安裝Java基礎(chǔ)知識設(shè)置path環(huán)境變量Java基礎(chǔ)知識Java程序的裝載與執(zhí)行Java基礎(chǔ)知識創(chuàng)建并運行HelloJava程序TestGreeting.java類的代碼如下:1//2//"HelloJava"程序示例3//4publicclassTestGreeting{5publicstaticvoidmain(String[]args){6Greetinghello=newGreeting();7hello.greet();8}9}Greeting.java類的代碼如下:1publicclassGreeting{2publicvoidgreet(){3System.out.println("HelloJava!");4}5}Java基礎(chǔ)知識創(chuàng)建并運行HelloJava程序Java基礎(chǔ)知識第三章類和對象目標(biāo)類和對象的概念使用類和對象主類與main方法Java內(nèi)存管理與垃圾回收J(rèn)ava基礎(chǔ)知識類和對象的概念面向?qū)ο螅∣O)語言是最接近現(xiàn)實世界的編程語言對象—對應(yīng)現(xiàn)實世界的實體類—對現(xiàn)實世界實體的抽象定義Java基礎(chǔ)知識類和對象的關(guān)系類是對象的抽象對象是類的實例Java基礎(chǔ)知識類和對象中的信息類中的信息:屬性行為(或操作)—稱為方法對象中的信息狀態(tài)—即屬性值來自類中方法Java基礎(chǔ)知識類的聲明publicclass<類名>{[屬性的聲明][構(gòu)造器的聲明][方法的聲明]}Java基礎(chǔ)知識類的聲明示例1publicclassDog{2privateintweight;3publicintgetWeight(){4returnweight;5}6publicvoidsetWeight(intnewWeight){7weight=newWeight;8}9}Java基礎(chǔ)知識創(chuàng)建和訪問對象應(yīng)針對類使用new關(guān)鍵字來創(chuàng)建Java對象。使用.符號訪問對象成員—<對象>.<成員>成員包括屬性和方法1publicclassTestDog{2publicstaticvoidmain(String[]args){3Dogd=newDog();4System.out.println("Dogd’sweightis"+d.getWeight());56d.setWeight(42);7System.out.println("Dogd’sweightis"+d.getWeight());8}9}Java基礎(chǔ)知識主類與main方法一個應(yīng)用程序可以包含多個類主類—包含main方法的類main方法—程序的入口方法

publicstaticvoidmain(String[]args){……

}Java基礎(chǔ)知識JVM使用的內(nèi)存堆?!糜谂R時保存局部變量的值堆—用于存儲對象及其加載的類Java基礎(chǔ)知識堆內(nèi)存Java基礎(chǔ)知識JVM的垃圾回收機制垃圾對象—內(nèi)存中不再被使用的對象垃圾回收(GC)—JVM自動釋放垃圾對象所占內(nèi)存的機制例如:1publicclassTestDog{2publicstaticvoidmain(String[]args){3Dogd=newDog();4System.out.println("Dogd’sweightis"+d.getWeight());5d=null;67Dogd1=newDog();8System.out.println("Dogd’sweightis"+d1.getWeight());9}10}Java基礎(chǔ)知識第四章聲明和使用字段目標(biāo)字段的聲明使用基本數(shù)據(jù)類型使用引用類型字段的初始化分號、注釋和空白Java基礎(chǔ)知識字段與屬性類中的屬性可分為兩種形式:用字段聲明用get/set方法聲明Java基礎(chǔ)知識聲明字段聲明對象字段的語法格式如下:<修飾符><類型><字段名稱>;例如:1publicclassFoo{2privateintx;3privatefloaty=10000.0F;4privateStringname="BatesMotel";5}Java基礎(chǔ)知識數(shù)據(jù)類型的分類基本數(shù)據(jù)類型intvar1;charvar2;floatvar3;引用類型,或?qū)ο箢愋?,或類類型Stringstr;Datedate;Java基礎(chǔ)知識標(biāo)識符是為字段(或類、方法、局部變量)起的一個名稱可以用字母、_或$作為開頭區(qū)分大小寫,無長度限制下列為有效的標(biāo)識符示例:identifieruserNameuser_name_sys_var1$change//合法但不推薦MAX_VALUEJava基礎(chǔ)知識Java語言的關(guān)鍵字注意:不能將關(guān)鍵字作為標(biāo)識符Java基礎(chǔ)知識基本數(shù)據(jù)類型Java語言定義了8種基本數(shù)據(jù)類型:整型:byte、short、int和long浮點類型:float和double字符類型:char邏輯類型:booleanJava基礎(chǔ)知識邏輯類型—booleanboolean類型只有兩個字面值:true和false例如:booleanflag=true;Java基礎(chǔ)知識字符類型—char表示16位Unicode字符字符的字面值使用單引號(‘’)引起例如:‘a(chǎn)’—字母a‘\n’,‘\t’—轉(zhuǎn)義字符“換行”和“制表符” ‘\u03a6’—希臘字母ΦJava基礎(chǔ)知識整型—byte、short、int和long數(shù)據(jù)類型的大?。簲?shù)值的字面值可用三種形式來表示:2十進制數(shù)077八進制數(shù)(以0開頭)0xBAAC十六進制數(shù)(以0x開頭)數(shù)值的字面值缺省為int類型,可使用后綴字母L或l來表示long類型。例如:100,205LJava基礎(chǔ)知識浮點類型—float和double數(shù)據(jù)類型的大小:

數(shù)值的字面值可用兩種形式來表示:3.14簡單的浮點數(shù)值3.14E23大浮點數(shù)值數(shù)值的字面值缺省為double類型可使用后綴字母D或d來表示double數(shù)值,可使用后綴字母F或f來表示float數(shù)值。例如:3.14,2.718F,6.02DJava基礎(chǔ)知識引用類型引用類型—在字段定義中,<數(shù)據(jù)類型>為某個預(yù)定義的類。也稱為對象類型或類類型。例如:<數(shù)據(jù)類型><標(biāo)識符名稱>int var; //var為基本類型String str; //str為引用類型Dog dog //dog為引用類型String是JavaSE類庫中定義的最常用類之一Java基礎(chǔ)知識引用類型可用的類JavaSE類庫中的類,如String,Date,……用戶自行定義的類,如DogJava基礎(chǔ)知識使用String類String的字面值須包含在雙引號中:

例如:"Thequickbrownfoxjumpsoverthelazydog."String類型引用變量的聲明和初始化: Stringgreeting="GoodMorning!!"; StringerrorMessage="RecordNotFound!";Java基礎(chǔ)知識使用自定義類自定義類1publicclassDog{2privateintweight;3publicintgetWeight(){4returnweight;5}6publicvoidsetWeight(intnewWeight){7weight=newWeight;8}9}聲明Dogdog;聲明并賦值Dogdog=newDog();Java基礎(chǔ)知識初始化字段的方式在使用對象的字段之前,必須對其進行初始化賦值。可使用下列方式初始化字段:使用缺省值進行初始化使用顯式值進行初始化使用構(gòu)造器進行初始化(后續(xù)章節(jié)介紹)Java基礎(chǔ)知識使用缺省值進行初始化1classStock{2//字段聲明3Stringsymbol;//初始化為null4doubleprice;//初始化為0.05Datedate;//初始化為null67//方法聲明8}Java基礎(chǔ)知識各數(shù)據(jù)類型的缺省值數(shù)據(jù)類型缺省值byte0short0int0long0Lfloat0.0fdouble0.0dchar‘\u0000’booleanfalse引用類型nullJava基礎(chǔ)知識使用顯式值進行初始化1classStock{2//字段聲明3Stringsymbol=“SUNW”;4doubleprice=16.98;5Datedate=newDate();67//方法聲明8}Java基礎(chǔ)知識分號單行或多行語句用(;)結(jié)束a=1;b=2;c=3;total=a+b+c;Java基礎(chǔ)知識注釋共有三種注釋方式可以使用://單行注釋/**多行注釋*//***JavaDoc文檔注釋*注釋內(nèi)容將被自動生成到JavaDoc文檔中*/Java基礎(chǔ)知識空白Java語言中的空白包括:空格制表符換行符程序中可以使用任意數(shù)量的空白可以使用空白來增加源程序的可讀性

例如:{intx;x=23*54;}

{intx;

x=23*54;}Java基礎(chǔ)知識第五章聲明和使用方法(一)目標(biāo)方法的聲明塊語句和局部變量使用表達(dá)式表達(dá)式中的數(shù)據(jù)類型轉(zhuǎn)換Java基礎(chǔ)知識聲明方法基本語法:<返回類型><方法名>([參數(shù)列表]){[方法體]}例如:1publicclassDog{2privateintweight;3publicintgetWeight(){4returnweight;5}6publicvoidsetWeight(intnewWeight){7weight=newWeight;8}9}Java基礎(chǔ)知識方法體的構(gòu)成塊語句 {……}局部變量的聲明和賦值語句 {intx=10;}表達(dá)式語句 x=x+1;流程控制語句分支語句—if,switch循環(huán)語句—while,do-while,forJava基礎(chǔ)知識塊語句是由成對的大括號({})限定一組語句。{ x=y+1;y=x+1;}塊語句可以嵌套while(i<large){a=a+i;//可以嵌套語句塊if(a==max){b=b+a;a=0;}i=i+1;}Java基礎(chǔ)知識局部變量的聲明和賦值語句局部變量—在方法體(或方法體中的塊語句)中聲明的變量:publicvoidcompute(intparam){ intx=10;}局部變量只在其所在塊內(nèi)有效局部變量必須先初始化賦值,才能使用方法的參數(shù)也是局部變量Java基礎(chǔ)知識表達(dá)式語句一個表達(dá)式至少要有一個運算符。例如:x+5;//一個運算符x+5*y;//多個運算符一個運算符有幾個操作數(shù)是由運算符決定的。例如:x<2;//二元運算符++x;//一元運算符一個表達(dá)式將求出一個類型的數(shù)據(jù)表達(dá)式運算符類型結(jié)果的類型x+y;加法數(shù)值x<2;比較布爾值“sun”+22字符串連接字符串x&22;按位與int或long(取決于x)Java基礎(chǔ)知識運算符及優(yōu)先級結(jié)合方向運算符功能R到L++--+-~!單目加,單目減,正號、負(fù)號、取補、取反L到R*/%乘,除,取余L到R+-加,減L到R<<>>>>>算術(shù)左移,算術(shù)右移,邏輯右移L到R<><=>=instanceof小于,大于,小于等于,大于等于L到R==!=等于判定,不等于判定L到R&^|與,異或,或L到R&&||與判定,或判定R到L<bool_expr>?<expr1>:<expr2>按條件求值R到L=*=/=%=+=-=<<=>>=&=^=|=賦值Java基礎(chǔ)知識表達(dá)式語句通常有以下表達(dá)式語句形式:賦值表達(dá)式x=a+b;++或––的使用x++;方法調(diào)用System.out.println(“hello”);對象創(chuàng)建表達(dá)式d=newDate(2010,1,1);Java基礎(chǔ)知識字符串的連接運算符“+”可以對String對象執(zhí)行連接操作,并創(chuàng)建新的String。例如:Stringsalutation=“Dr.”;Stringname="Pete"+""+"Seymour";Stringtitle=salutation+""+name;結(jié)果為:Dr.PeteSeymour在連接運算時,非String對象會被自動轉(zhuǎn)換為String對象Java基礎(chǔ)知識表達(dá)式中的數(shù)值升級數(shù)值升級—在將運算符作用于操作數(shù)之前,Java會按照需要將操作數(shù)的數(shù)據(jù)類型轉(zhuǎn)換為結(jié)果類型。例如:result=<操作數(shù)1>+<操作數(shù)2>操作數(shù)1操作數(shù)2resultbyte/short/charbyte/short/charIntbyte/short/char/intIntIntbyte/short/char/intlonglongbyte/short/char/int/longfloatFloatbyte/short/char/int/long/floatdoubledoubleJava基礎(chǔ)知識變量值的自動升級變量可以自動升級為較長的形式(如int或long),反之則不行。例如:longbigval=6;//6是int,自動升級intsmallval=99L;//99L是long,錯誤doublez=12.414F;//12.414F是float,自動升級floatz1=12.414;//12.414是double,錯誤Java基礎(chǔ)知識強制類型轉(zhuǎn)換當(dāng)從一種較長的數(shù)據(jù)類型賦值到較短的數(shù)據(jù)類型時,需要使用強制類型轉(zhuǎn)換。例如:shorta,b,c;a=1;b=2;則:c=a+b;//編譯失敗應(yīng)為:c=(short)(a+b);Java基礎(chǔ)知識第六章聲明和使用方法(二)目標(biāo)分支語句循環(huán)語句Java基礎(chǔ)知識分支語句if語句switch語句Java基礎(chǔ)知識簡單的if語句語法 if(<布爾表達(dá)式>) <語句或語句塊>例如:if(x<10)System.out.println("Areyoufinishedyet?");推薦寫法if(x<10){System.out.println("Areyoufinishedyet?");}Java基礎(chǔ)知識簡單的if-else語句語法if(<布爾表達(dá)式>) <語句或語句塊>else <語句或語句塊>例如:if(x<10){System.out.println("Areyoufinishedyet?");}else{System.out.println("Keepworking...");}Java基礎(chǔ)知識復(fù)雜的if-else語句如果需要進行一系列的條件檢查,可以用一連串的if-else-ifif(<布爾表達(dá)式>) <語句或語句塊>elseif(<布爾表達(dá)式>) <語句或語句塊>else <語句或語句塊>例如:intcount=getCount();//類中定義的方法if(count<0){System.out.println("Error:countvalueisnegative.");}elseif(count>getMaxCount()){System.out.println("Error:countvalueistoobig.");}else{System.out.println("Therewillbe"+count+"peopleforlunchtoday.");}Java基礎(chǔ)知識switch語句語法switch(<表達(dá)式>){ case<常量1>: <語句或語句塊>* [break;] case<常量2>: <語句或語句塊>* [break;] default: <語句或語句塊>* [break;]}Java基礎(chǔ)知識switch語句示例常規(guī)的switch語句示例:switch(carModel){case‘D’://DeluxeaddAirConditioning();addRadio();addWheels();addEngine();break;case‘S’://StandardaddRadio();addWheels();addEngine();break;default:addWheels();addEngine();}Java基礎(chǔ)知識switch語句示例switch語句中的break語句可以省略,但這會導(dǎo)致在執(zhí)行了相應(yīng)的case語句塊后,將繼續(xù)執(zhí)行其后緊鄰的語句塊。例如:switch(carModel){case‘D’://DeluxeaddAirConditioning();//向下通過case‘S’://StandardaddRadio();//向下通過default:addWheels();addEngine();}Java基礎(chǔ)知識循環(huán)語句while語句do-while語句for語句Java基礎(chǔ)知識for循環(huán)作用:按指定的起始及終止條件循環(huán)語法:for(<初始表達(dá)式>;<終止表達(dá)式>;<步長表達(dá)式>) <語句或語句塊>例如:for(inti=0;i<10;i++){ System.out.println(i+"squaredis

"+(i*i));}Java基礎(chǔ)知識while循環(huán)作用:循環(huán)0到N次語法:while(<布爾表達(dá)式>) <語句或語句塊>例如:inti=0;while(i<10){ System.out.println(i+"

squaredis

"+(i*i)); i++;}Java基礎(chǔ)知識do/while循環(huán)作用:循環(huán)1到N次語法:do <語句或語句塊>while(<布爾表達(dá)式>);例如:inti=0;do{ System.out.println(i+"

squaredis

"+(i*i)); i++;}while(i<10);Java基礎(chǔ)知識循環(huán)中的break和continue語句break語句—結(jié)束當(dāng)前循環(huán),并跳轉(zhuǎn)到循環(huán)之后do{ …… if(<條件表達(dá)式1>){ break; } ……}while(<條件表達(dá)式2>);continue語句—結(jié)束當(dāng)前循環(huán),并跳轉(zhuǎn)到循環(huán)之前do{ …… if(<條件表達(dá)式1>){ continue; } ……}while(<條件表達(dá)式2>);Java基礎(chǔ)知識循環(huán)中帶標(biāo)號的break語句結(jié)束當(dāng)前循環(huán),并跳轉(zhuǎn)到標(biāo)號所對應(yīng)循環(huán)之后outer:do{ …… do{ …… if(<條件表達(dá)式1>){

breakouter; } …… }while(<條件表達(dá)式2>); ……}while(<條件表達(dá)式3>);Java基礎(chǔ)知識循環(huán)中帶標(biāo)號的continue語句結(jié)束當(dāng)前循環(huán),并跳轉(zhuǎn)到標(biāo)號所對應(yīng)循環(huán)之前outer:do{ …… do{ …… if(<條件表達(dá)式1>){ continueouter; } …… }while(<條件表達(dá)式2>); ……}while(<條件表達(dá)式3>);Java基礎(chǔ)知識第七章聲明和使用方法(三)目標(biāo)方法的調(diào)用重載方法Java基礎(chǔ)知識方法的調(diào)用方法調(diào)用—可以通過執(zhí)行某個對象的方法來完成相應(yīng)的任務(wù)實例方法—必須通過對象的實例來調(diào)用的方法。(同理,通過對象的實例來訪問的屬性稱為實例變量)應(yīng)使用“.”符號調(diào)用實例方法。例如:Dogd=newDog();d.setWeight(42);Java基礎(chǔ)知識方法的參數(shù)和返回值如果方法簽名中有參數(shù)列表,則調(diào)用時必須向方法傳遞與之相對應(yīng)的參數(shù)(包括參數(shù)類型及參數(shù)個數(shù))。例如: d.setWeight(42);如果方法有返回值,可使用相同類型的變量來接收。例如:intweight=d.getWeight();Java基礎(chǔ)知識參數(shù)的按值傳遞所有參數(shù)都是以傳值的方式傳遞。當(dāng)傳遞基本數(shù)據(jù)類型的參數(shù)時,傳遞的是其值。當(dāng)傳遞對象類型的實例時,傳遞的是對象的引用。Java基礎(chǔ)知識重載方法重載方法—同一類中方法名相同而參數(shù)(類型或/和個數(shù))不同的方法。在程序執(zhí)行時,JVM將根據(jù)參數(shù)來確定調(diào)用哪個重載方法。目的—為調(diào)用者提供便利。例如:publicvoidprintln(inti)publicvoidprintln(floatf)publicvoidprintln(Strings)……Java基礎(chǔ)知識第八章聲明和使用構(gòu)造器目標(biāo)聲明構(gòu)造器使用指定的構(gòu)造器創(chuàng)建對象缺省構(gòu)造器this關(guān)鍵字對象在內(nèi)存中的結(jié)構(gòu)模型Java基礎(chǔ)知識聲明構(gòu)造器構(gòu)造器是一種特殊的方法(無返回類型)。用于構(gòu)建對象,通常用來初始化對象的屬性值。構(gòu)造器的基本語法:<類名>(<參數(shù)列表>*){ <語句>*}聲明示例:1publicclassDog{2privateintweight;34publicDog(){5weight=42;6}7Java基礎(chǔ)知識構(gòu)造器體的構(gòu)成構(gòu)造器體的構(gòu)成與方法相同,可以包含:局部變量的聲明和賦值語句表達(dá)式語句流程控制語句Java基礎(chǔ)知識構(gòu)造器的重載構(gòu)造器是方法,所以允許重載。通常使用重載構(gòu)造器進行不同情況下的屬性初始化。例如:1publicclassStock{2//字段聲明3Stringsymbol;4doubleprice;5Datedate=newDate();67//構(gòu)造器聲明8Stock(StringstockSymbol){9symbol=stockSymbol;10}1112Stock(StringstockSymbol,doublenewPrice){13this(stockSymbol);//調(diào)用另一個構(gòu)造器14price=newPrice;15}16//方法聲明17}Java基礎(chǔ)知識構(gòu)造器的調(diào)用構(gòu)造器不能被直接調(diào)用。在使用new關(guān)鍵字創(chuàng)建對象時,實際上調(diào)用了相應(yīng)的構(gòu)造器。調(diào)用哪個構(gòu)造器,由參數(shù)的匹配來決定。例如:Stockstock1=newStock(“ENCY”);Stockstock2=newStock(“ZUMZ”,52.00);Java基礎(chǔ)知識缺省構(gòu)造器每個類中始終至少有一個構(gòu)造器。如果編程時不提供構(gòu)造器,則類在編譯時會被自動添加一個缺省構(gòu)造器:缺省構(gòu)造器不帶參數(shù)缺省構(gòu)造器體為空例如:5publicclassStock{6//字段聲明7Stringsymbol;8doubleprice;9Datedate;1011//沒有聲明構(gòu)造器1213//方法聲明1415}Java基礎(chǔ)知識this關(guān)鍵字的作用this關(guān)鍵字有以下作用:解決實例變量與參數(shù)的二義性調(diào)用重載構(gòu)造器(必須在構(gòu)造器的第1行使用)代表對象自身,可將當(dāng)前對象作為參數(shù)傳遞給另一個方法Java基礎(chǔ)知識this關(guān)鍵字示例1publicclassMyDate{2privateintday=1;3privateintmonth=1;4privateintyear=2000;56publicMyDate(intday,intmonth,intyear){7this.day=day;8this.month=month;9this.year=year;10}1112publicMyDate(MyDatedate){13this.day=date.day;14this.month=date.month;15this.year=date.year;16}1718publicMyDateaddDays(intmoreDays){19MyDatenewDate=newMyDate(this);20newDate.day=newDate.day+moreDays;21//尚未實現(xiàn)...22returnnewDate;23}24……Java基礎(chǔ)知識對象在內(nèi)存中的結(jié)構(gòu)模型現(xiàn)定義用于表示日期的MyDate類:1publicclassMyDate{2privateintday=1;3privateintmonth=5;4privateintyear=1999;5publicMyDate(intday,intmonth,intyear){6this.day=day;7this.month=month;8this.year=year;9}10publicvoidprint(){...}11}Java基礎(chǔ)知識構(gòu)造和初始化對象可以如下使用MyDate類:1publicclassTestMyDate{2publicstaticvoidmain(String[]args){3MyDateref=newMyDate(10,10,2010);4}5}執(zhí)行第3行創(chuàng)建MyDate對象時,內(nèi)部過程大致如下:1. 為新對象分配空間并初始化為0或null。2. 執(zhí)行顯式的初始化。3. 執(zhí)行構(gòu)造器。new方法的括號中的參數(shù)傳遞給構(gòu)造器(1,10,2010)。4. 將ref變量賦值為對堆內(nèi)存中新對象的引用。Java基礎(chǔ)知識a.在堆棧中為引用變量分配空間Java基礎(chǔ)知識b.在堆中為對象分配內(nèi)存Java基礎(chǔ)知識c.執(zhí)行屬性的顯式初始化Java基礎(chǔ)知識d.執(zhí)行構(gòu)造器Java基礎(chǔ)知識e.由new運算符返回對象引用值Java基礎(chǔ)知識f.將對象引用值賦給引用變量Java基礎(chǔ)知識第九章包的管理目標(biāo)package與import語句包與目錄的布局Java編程語言編碼約定使用JavaAPI文檔Java基礎(chǔ)知識源程序文件布局Java源程序文件的基本語法:[<包的聲明>][<導(dǎo)入聲明>*]<類的聲明>例如:1packageshipping.reports;23importshipping.domain.*;4importjava.util.List;5importjava.io.*;67publicclassVehicleCapacityReport{8privateListvehicles;910publicvoidgenerateReport(Writeroutput){11...12}13}Java基礎(chǔ)知識Java語言中的包包可以幫助我們管理較大型的軟件。包可以包含類和子包。與包相關(guān)的語句有:packageimportJava基礎(chǔ)知識package語句告訴編譯器我(指所在類)屬于哪個包基本語法: package<頂層包名>[.<子包名>]*;示例:1//ClassVehicleofthe’domain’sub-packagewithin2//the’shipping’applicationpackage.3packageshipping.domain;45publicclassVehicle{6...7}package語句須在源文件的開始處使用每個類只能有一個包聲明。如果沒有包聲明,則將該類放在缺省包中。Java基礎(chǔ)知識import語句告訴編譯器我(指所在類)所用的類位于哪個包?;菊Z法:import<包名>[.<子包名>]*.<類名>;或import<包名>[.<子包名>]*.*;示例:packageshipping.reports;importshipping.domain.*;importjava.util.List;importjava.io.*;publicclassVehicleCapacityReport{privateCompanycompanyForReport;...}位于類聲明之前,package語句之后。Java基礎(chǔ)知識包名與目錄的關(guān)系Java基礎(chǔ)知識開發(fā)Java基礎(chǔ)知識編譯時使用-d選項javac的-d選項可以將編譯所產(chǎn)生字節(jié)碼文件直接放到包所對應(yīng)的目錄中。例如:cdJavaProjects/ShippingPrj/srcjavac-d../classesshipping/domain/*.javaJava基礎(chǔ)知識部署創(chuàng)建tempfile.txt文本文件: Main-Class:mypackage.MyClass<換行>jarcmftempfile.txtMyProgram.jarMyApp.java-jar/path/to/file/MyProgram.jarJava基礎(chǔ)知識Java語言的編碼約定包名—應(yīng)全部小寫。例如: com.example.domain;類名(含接口等特殊類)—由一到多個名詞組成,各詞首字母大寫。例如: SavingsAccount方法名—由一個動詞+一到多個名詞組成,各名詞首字母大寫。例如: getAccount()變量—由一到多個名詞組成,第二個及之后各詞首字母大寫。例如: currentCustomer常量—由一到多個名詞組成,全部大寫,詞間用下劃線連接。例如: HEAD_COUNTJava基礎(chǔ)知識Java語言的編碼約定控制結(jié)構(gòu)(分支和循環(huán))—每條語句應(yīng)獨立成行:

if(condition){ statement1; }else{ statement2; }空格每行只包含一條語句使用兩個或四個縮進空格注釋—用于對不易理解的代碼進行說明簡短說明使用//注釋大段說明使用/*……*/注釋用于生成javadoc的內(nèi)容使用/**……*/注釋Java基礎(chǔ)知識使用JavaAPI文檔Java基礎(chǔ)知識第十章類的封裝目標(biāo)訪問控制修飾符實現(xiàn)封裝Java基礎(chǔ)知識訪問控制修飾符訪問控制修飾符可用來修飾類的成員,以達(dá)到控制其被他人訪問的目的。Java語言提供了四種訪問控制修飾符:private=僅能被同類中的成員訪問default=private+能被同包的其他類訪問protected=default+能被不同包的子類訪問public=被任意訪問Java基礎(chǔ)知識訪問控制修飾符Java基礎(chǔ)知識示例1packagecom.abc.util;23publicclassDate{4privateintday;56publicDate(){//...}78publicvoidaddDays(intdays){}9intgetDaysInMonth(intmonth){}10}1packagecom.abc.brokerage;23publicclassStock{4privateStringsymbol;5publicStock(Stringsymbol,doubleprice){}67publicStringgetSymbol(){}8publicvoidsetSymbol(Stringsymbol){}9}Java基礎(chǔ)知識對類的修飾對于常規(guī)的Java類,只能使用public或default修飾符。由default修飾的類,只能被同包的其他類所訪問Java基礎(chǔ)知識封裝的概念通常,封裝是針對類而言:隱藏類的實現(xiàn)細(xì)節(jié)(如字段值的運算和訪問)強制訪問者使用接口來訪問數(shù)據(jù)Java基礎(chǔ)知識未封裝類存在的問題訪問者直接訪問類的內(nèi)部數(shù)據(jù):MyDated=newMyDate();d.day=32;//無效日期d.month=2;d.day=30;d.day=d.day+1;//無效日期運算Java基礎(chǔ)知識封裝的解決方案訪問者必須使用set和get方法來訪問內(nèi)部數(shù)據(jù):MyDated=newMyDate();d.setDay(32);//無效日期,返回falsed.setMonth(2);d.setDay(30);//無效日期,返回falsed.setDay(d.getDay()+1);//無效日期運算,返回falseJava基礎(chǔ)知識封裝的優(yōu)點保護數(shù)據(jù)的完整性提升應(yīng)用程序的可維護性Java基礎(chǔ)知識第十一章創(chuàng)建和使用數(shù)組目標(biāo)聲明和創(chuàng)建數(shù)組使用數(shù)組命令行參數(shù)Java基礎(chǔ)知識聲明數(shù)組數(shù)組是用來組合相同類型數(shù)據(jù)對象的集合。聲明基本數(shù)組或引用類型數(shù)組:chars[];或char[]s;Pointp[];或Point[]p;數(shù)組是對象;需要使用new關(guān)鍵字創(chuàng)建。Java基礎(chǔ)知識創(chuàng)建數(shù)組應(yīng)使用new關(guān)鍵字來創(chuàng)建數(shù)組對象。例如,創(chuàng)建一個基本類型(char)的數(shù)組,并賦值:1publicchar[]createArray(){2char[]s;3s=newchar[26];4for(inti=0;i<26;i++){5s[i]=(char)(’A’+i);6}7returns;8}一旦創(chuàng)建數(shù)組后,其大小不能再改變。Java基礎(chǔ)知識創(chuàng)建字符基本數(shù)據(jù)類型的數(shù)組Java基礎(chǔ)知識創(chuàng)建引用數(shù)組另一個例子是對象數(shù)組:1publicPoint[]createArray(){2Point[]p;34p=newPoint[10];5for(inti=0;i<10;i++){6p[i]=newPoint(i,i+1);7}8returnp;9}Java基礎(chǔ)知識創(chuàng)建Point對象引用的數(shù)組Java基礎(chǔ)知識初始化數(shù)組初始化數(shù)組元素。創(chuàng)建帶有初始值的數(shù)組String[]names;names=newString[3];names[0]="Georgianna";names[1]="Jen";names[2]="Simon";MyDate[]dates;dates=newMyDate[3];dates[0]=newMyDate(22,7,1964);dates[1]=newMyDate(1,1,2000);dates[2]=newMyDate(22,12,1964);String[]names={"Georgianna","Jen","Simon"};MyDate[]dates={newMyDate(22,7,1964),newMyDate(1,1,2000),newMyDate(22,12,1964)};Java基礎(chǔ)知識多維數(shù)組二維數(shù)組:int[][]twoDim=newint[4][];twoDim[0]=newint[5];twoDim[1]=newint[5];int[][]twoDim=newint[][4];//illegal非矩形數(shù)組的數(shù)組:twoDim[0]=newint[2];twoDim[1]=newint[4];twoDim[2]=newint[6];twoDim[3]=newint[8];4X5的整型數(shù)組: int[][]twoDim=newint[4][5];Java基礎(chǔ)知識數(shù)組邊界所有的數(shù)組索引從0開始。publicvoidprintElements(int[]list){for(inti=0;i<list.length;i++){System.out.println(list[i]);}}Java基礎(chǔ)知識使用增強型for循環(huán)使用Java語言“增強型for循環(huán)”功能publicvoidprintElements(int[]list){for(intelement:list){System.out.println(element);}}此版本的for循環(huán)可以被讀作對于(for)list中的每個元素(element)去執(zhí)行。Java基礎(chǔ)知識數(shù)組大小的不變性不能改變其大小??梢允褂猛粋€引用變量引用一個全新的數(shù)組。int[]myArray=newint[6];myArray=newint[10];Java基礎(chǔ)知識命令行參數(shù)任何Java應(yīng)用程序都可以使用命令行參數(shù)這些字符串參數(shù)可以被放在命令行中的類名后面,用來啟動Java解釋器每個命令行參數(shù)都被放在args數(shù)組中,這個數(shù)組被傳遞給靜態(tài)main方法中。Java基礎(chǔ)知識命令行參數(shù)1publicclassTestArgs{2publicstaticvoidmain(String[]args){3for(inti=0;i<args.length;i++){4System.out.println("args["+i+"]is’"+args[i]+"’");5}6}7}執(zhí)行示例:javaTestArgsarg1arg2"anotherarg"args[0]is’arg1’args[1]is’arg2’args[2]is’anotherarg’Java基礎(chǔ)知識第十二章類的繼承(一)目標(biāo)繼承的概念對繼承成員的訪問控制Java基礎(chǔ)知識繼承的概念繼承是最重要的面向?qū)ο蟾拍钪?。繼承發(fā)生在類之間,與現(xiàn)實世界的繼承類似。被繼承者稱為父類(或超類),繼承者稱為子類。子類將繼承父類的所有成員(構(gòu)造器除外)。Java基礎(chǔ)知識繼承示例Java基礎(chǔ)知識繼承示例Java基礎(chǔ)知識單繼承Java基礎(chǔ)知識繼承的優(yōu)點可以創(chuàng)建更為特殊的類型消除重復(fù)代碼利于可維護性Java基礎(chǔ)知識對繼承成員的訪問控制子類能否直接訪問從父類繼承的成員,取決于成員的訪問控制修飾符。訪問控制修飾符繼承規(guī)則private繼承但無法訪問default繼承并且如果父類和子類在同一個包中可訪問protected繼承且可訪問public繼承且可訪問Java基礎(chǔ)知識第十三章類的繼承(二)目標(biāo)實現(xiàn)繼承覆蓋方法子類的構(gòu)造器Java基礎(chǔ)知識繼承實現(xiàn)的因素確定父類和子類聲明子類。為子類添加特有的屬性和方法。根據(jù)需要覆蓋父類的方法(后續(xù)介紹)。根據(jù)需要為子類添加構(gòu)造器。Java基礎(chǔ)知識聲明子類聲明子類的語法如下:<修飾符>class<子類名>[extends<父類名>]{ <聲明語句>*}例如:publicclassManagerextendsEmployee{protectedStringdepartment;

publicStringgetDepartment(){returndepartment;}publicvoidsetDepartment(Stringdepartment){}}Java基礎(chǔ)知識方法的覆蓋覆蓋—因為需要,子類可能重寫父類的方法。子類可以通過方法覆蓋來達(dá)到對所繼承行為(即方法)進行功能修改的目的。Java基礎(chǔ)知識方法覆蓋示例2publicclassEmployee{……12publicStringgetDetails(){13return“Name:“+name+“\n”14 +“Salary:“+salary;15}16}1publicclassManagerextendsEmployee{……7@Override8publicStringgetDetails(){9return“Name:“+name+“\n”10+“Salary:“+salary+“\n”11+“Managerof:“+department;12}13}Java基礎(chǔ)知識覆蓋的規(guī)則子類中被覆蓋的方法須遵守以下規(guī)則:匹配方法接口要求:方法名稱和參數(shù)列表與父類方法相同。返回類型相同。如果返回類型是引用類型,則子類方法可以是被覆蓋返回類型的子類。在覆蓋方法上,可選地使用Override標(biāo)注。覆蓋方法的訪問修飾符范圍須不小于父類方法。Java基礎(chǔ)知識使用super調(diào)用父類被覆蓋方法子類方法中,可以使用super關(guān)鍵字調(diào)用被覆蓋的方法。調(diào)用的目的是為了繼續(xù)使用被覆蓋方法的原有功能。例如:12publicclassManagerextendsEmployee{13privateStringdepartment;1415publicStringgetDetails(){16//調(diào)用父方法17returnsuper.getDetails()+"\nDepartment:"+department;18}19}Java基礎(chǔ)知識super使用的說明super關(guān)鍵字也可用來訪問所繼承父類的屬性,但不推薦使用。super所調(diào)用的方法不一定在父類中,它也可能位于更深的層次結(jié)構(gòu)中(如父類的父類)。Java基礎(chǔ)知識子類的構(gòu)造器在子類構(gòu)造器中可以(顯式或隱式)調(diào)用父類的構(gòu)造器,以借助父類構(gòu)造器來初始化從父類繼承的屬性。提醒:除非父類在開發(fā)中,否則不應(yīng)該修改父類,也不應(yīng)該加入新的父類構(gòu)造器。子類構(gòu)造器要負(fù)責(zé)調(diào)用適當(dāng)?shù)母割悩?gòu)造器,不管是以顯式或隱式的方式。父類的字段必須比子類的字段先初始化。建議步驟:步驟A:了解父類的構(gòu)造器步驟B:聲明子類構(gòu)造器步驟C:從每個子類構(gòu)造器調(diào)用適當(dāng)?shù)母割悩?gòu)造器Java基礎(chǔ)知識步驟A:了解父類的構(gòu)造器1publicclassEmployee{2privateStringname;3//方法4}1publicclassEmployee{2privateStringname;3publicEmployee(Stringname){4=name;5}6}1publicclassEmployee{2privateStringname;3publicEmployee(){//此處添加代碼}4publicEmployee(Stringname){5=name;6}7}Java基礎(chǔ)知識步驟B:聲明子類構(gòu)造器1publicclassManagerextendsEmployee{2privateStringdepartment;3publicManager(Stringdepartment){4this.department=department;5}6//以下代碼不列出7}Java基礎(chǔ)知識步驟C:從每個子類構(gòu)造器調(diào)用適當(dāng)?shù)母割悩?gòu)造器1publicclassManagerextendsEmployee{2privateStringdepartment;3publicManager(Stringdepartment){4this.department=department;5}6//以下代碼不列出7}Java基礎(chǔ)知識示例1:顯式調(diào)用父類無參數(shù)構(gòu)造器1publicclassEmployee{2privateStringname;3//方法4}

1publicclassManagerextendsEmployee{2privateStringdepartment;3publicManager(Stringdepartment){4super();//注意:顯式的super是可選的5this.department=department;6}7}Java基礎(chǔ)知識示例2:顯式調(diào)用父類帶參數(shù)的構(gòu)造器1publicclassEmployee{2privateStringname;3publicEmployee(Stringname){4=name;5}6}1publicclassManagerextendsEmployee{2privateStringdepartment;3publicManager(Stringname,Stringdepartment){4super(name);//注意:顯式的super是必需的5this.department=department;6}7}Java基礎(chǔ)知識示例3:父類具有無參數(shù)以及有參數(shù)構(gòu)造器1publicclassEmployee{2privateStringname;3publicEmployee(){//此處插入代碼}4publicEmployee(Stringname){5=name;6}7}

1publicclassManagerextendsEmployee{2privateStringdepartment;3publicManager(Stringname,Stringdepartment){4super(name);//注意:刪除此行仍可以編譯5this.department=department;6}7}Java基礎(chǔ)知識復(fù)雜的構(gòu)造器鏈?zhǔn)纠?publicclassEmployee{2privateStringname;3privatedoublesalary;45publicEmployee(Stringname,doublesalary){6=name;7this.salary=salary;8}910publicEmployee(Stringname){11this(name,15000.00);12}13}Java基礎(chǔ)知識復(fù)雜的構(gòu)造器鏈?zhǔn)纠?publicclassManagerextendsEmployee{2privateStringdepartment;34publicManager(Stringname,doublesalary,Stringdepartment){5super(name,salary);6this.department=department;7}89publicManager(Stringname,Stringdepartment){10super(name);11this.department=department;12}1314publicManager(Stringname){15this(name,"**NODEPARTMENTYET**");16}17}如果有外部代碼要創(chuàng)建Manager實例:Managerm=newManager(“JoeSoap”);Java基礎(chǔ)知識第十四章多態(tài)目標(biāo)使用多態(tài)對象引用類型的轉(zhuǎn)換Java基礎(chǔ)知識多態(tài)多態(tài)是重要的面向?qū)ο蟾拍钪唬贘ava編程中,幾乎無處不在。多態(tài)是指一個對象具有多種形態(tài)。例如:Employeee=newManager();此對象既具有父類Employee的形態(tài)又具有子類Manager的形態(tài)。一個對象到底有幾種形態(tài),取決于其繼承結(jié)構(gòu)層次。Java基礎(chǔ)知識多態(tài)引用一個對象只對應(yīng)一個實例,但可以使用不同形態(tài)的引用變量來引用它,即多態(tài)引用。例如:

Employeee=newManager();//合法但是:

e.department="Sales";//錯誤因為對象作為父類形態(tài)時,是沒有department屬性的。Java基礎(chǔ)知識虛擬方法調(diào)用在多態(tài)引用變量上的調(diào)用對象的方法時,將執(zhí)行本態(tài)對象的方法。假設(shè)下面的情形為真:Employeeworker=newEmployee();Managerboss=newManager();Employeeworker=newManager();worker.getDetails();編譯時的類型和運行時調(diào)用的類型有下列特征:方法名必須是已聲明的變量類型的成員,例如,Employee類就帶有g(shù)etDetails方法。執(zhí)行使用的方法是以運行時對象類型為基礎(chǔ)的,例如,Manager類就帶有g(shù)etDetails方法的執(zhí)行。Java基礎(chǔ)知識異類集合可以創(chuàng)建一群具有相同類的對象集合。這樣的集合稱之為同類集合。例如:MyDate[]dates=newMyDate[2];dates[0]=newMyDate(22,12,1964);dates[1]=newMyDate(22,7,1964);異類集合是一組由不同項組成的集合。例如:Employee[]staff=newEmployee[1024];staff[0]=newManager();staff[1]=newEmployee();staff[2]=newEngineer();Java基礎(chǔ)知識多態(tài)參數(shù)因為Manager是Employee,以下是正確的:publicclassTaxService{publicTaxRatefindTaxRate(Employeee){//計算并為e返回稅率}}

//此時,在應(yīng)用程序類的其它地方TaxServicetaxSvc=newTaxService();Managerm=newManager();TaxRatet=taxSvc.findTaxRate(m);Java基礎(chǔ)知識instanceof運算符publicclassEmployeepublicclassManagerextendsEmployeepublicclassEngineerextendsEmp

溫馨提示

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

評論

0/150

提交評論