java基礎教程_第1頁
java基礎教程_第2頁
java基礎教程_第3頁
java基礎教程_第4頁
java基礎教程_第5頁
已閱讀5頁,還剩65頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第一章Java語言的產生及其特點1.1Java產生的歷史與現狀1.1.1Java產生的歷史Java來自于Sun公司的一個叫Green的項目,其原先的目的是為家用消費電子產品開發一個分布式代碼系統,這樣我們可以把E-mail發給電冰箱、電視機等家用電器,對它們進行控制,和它們進行信息交流。開始,準備采用C+,但C+太復雜,安全性差,最后基于C+開發一種新的語言Oak(Java的前身),Oak是一種用于網絡的精巧而安全的語言,Sun公司曾依此投標一個交互式電視項目,但結果是被SGI打敗。可憐的Oak幾乎無家可歸,恰巧這時MarkArdreesen開發的Mosaic和Netscape啟發了Oak項目

2、組成員,他們用Java編制了HotJava瀏覽器,得到了Sun公司首席執行官ScottMcNealy的支持,觸發了Java進軍Internet。Java的取名也有一個趣聞,有一天,幾位Java成員組的會員正在討論給這個新的語言取什么名字,當時他們正在咖啡館喝著Java(爪哇)咖啡,有一個人靈機一動說就叫Java怎樣,得到了其他人的贊賞,于是,Java這個名字就這樣傳開了。1.1.2Java的現狀Java是Sun公司推出的新的一代面向對象程序設計語言,特別適合于Internet應用程序開發,它的平臺無關性直接威脅到Wintel的壟斷地位。一時間,“連Internet,用Java編程”,成為技術人

3、員的一種時尚。雖然新聞界的報導有些言過其實,但Java作為軟件開發的一種革命性的技術,其地位已被確立,這表現在以下幾個方面:1.計算機產業的許多大公司購買了Java的許可證,包括IBM,Apple,DEC,Adobe,SiliconGraphics,HP,Oracel,Toshiba,以及最不情愿的Microsoft。這一點說明,Java已得到了工業界的認可。2.眾多的軟件開發商開始支持Java的軟件產品。例如:Borland公司正在開發的基于Java的快速應用程序開發環境Latte,預計產品會在1996年中期發布。Borland公司的這一舉措,推動了Java進入PC機軟件市場。Sun公司自己

4、的Java開發環境JavaWorkshop已經發布。數據庫廠商如:Illustra,Sysbase,Versant,Oracle都在開發CGI接口,支持HTML和Java。今天是以網絡為中心的計算時代,不支持HTML和Java,應用程序的應用范圍只能限于同質的環境(相同的硬件平臺)。3.Intranet正在成為企業信息系統最佳的解決方案,而其中Java將發揮不可替代的作用。Intranet的目的是把Internet用于企業內部的信息系統,它的優點表現在:便宜,易于使用和管理。用戶不管使用何種類型的機器和操作系統,界面是統一的Intrnet瀏覽器,而數據庫、Web頁面、應用程序(用Java編的A

5、pplet)則存在WWW服務器上,無論是開發人員,還是管理人員,抑或是用戶都可以受益于該解決方案。Java語言正在不斷發展和完善,Sun公司是主要的發展推動者,較通用的編譯環境有JDK(JavaDevelopKit)與JWS(JavaWorkshop)。還有很多其他公司正在開發Java語言的編譯器與集成環境,預計不久Java語言的正確性與效率都將會提高,用戶用Java編程和現在用C+編程一樣方便。1.2Java語言的特點Java到底是一種什么樣的語言呢?Java是一種簡單的面象對象的分布式的解釋的健壯的安全的結構中立的可移植的性能很優異的多線程的動態的語言。1.2.1簡單Java最初是為對家用

6、電器進行集成控制而設計的一種語言,因此它必須簡單明了。Java語言的簡單性主要體現在以下三個方面:1.Java的風格類似于C+,因而C+程序員是非常熟悉的。從某種意義上講,Java語言是C及C+語言的一個變種,因此,C+程序員可以很快就掌握Java編程技術。2.Java摒棄了C+中容易引發程序錯誤的地方,如指針和內存管理。3.Java提供了豐富的類庫。1.2.2面向對象面向對象可以說是Java最重要的特性。Java語言的設計完全是面向對象的,它不支持類似C語言那樣的面向過程的程序設計技術。Java支持靜態和動態風格的代碼繼承及重用。單從面向對象的特性來看,Java類似于SmallTalk,但其

7、它特性、尤其是適用于分布式計算環境的特性遠遠超越了SmallTalk。1.2.3分布式Java包括一個支持HTTP和FTP等基于TCP/IP協議的子庫。因此,Java應用程序可憑借URL打開并訪問網絡上的對象,其訪問方式與訪問本地文件系統幾乎完全相同。為分布環境尤其是Internet提供動態內容無疑是一項非常宏偉的任務,但Java的語法特性卻使我們很容易地實現這項目標。1.2.4健壯Java致力于檢查程序在編譯和運行時的錯誤。類型檢查幫助檢查出許多開發早期出現的錯誤。Java自已操縱內存減少了內存出錯的可能性。Java還實現了真數組,避免了覆蓋數據的可能。這種功能特征大大縮短了開發Java應用

8、程序的周期。Java提供:Null指針檢測數組邊界檢測異常出口字節代碼校驗1.2.5結構中立另外,為了建立Java作為網絡的一個整體,Java將它的程序編譯成一種結構中立的中間文件格式。只要有Java運行系統的機器都能執行這種中間代碼。現在,Java運行系統有Solaris2.4(SPARC),Win32系統(Windows95和WindowsNT)等.Java源程序被編譯成一種高層次的與機器無關的byte-code格式語言,這種語言被設計在虛擬機上運行,由機器相關的運行調試器實現執行。1.2.6安全Java的安全性可從兩個方面得到保證。一方面,在Java語言里,象指針和釋放內存等C+功能被刪

9、除,避免了非法內存操作。另一方面,當Java用來創建瀏覽器時,語言功能和一?copy;瀏覽器本身提?copy;的功能結合起來,使它更安全。Java語言在你的機器上執行前,要經過很多次的測試。它經過代碼校驗,檢查代碼段的格式,檢測指針操作,對象操作是否過分以及試圖改變一個對象的類型。Byte-code校驗如果byte-code通過代碼校驗,沒有返回錯誤,我們可知道:代碼沒有堆棧上溢出和下溢出所有操作代碼參數類型都是正確的沒有發生非法數據轉換,如將整數轉換成指針。訪問對象操作是合法的類裝載ClassLoader通過將本機類與網絡資源類的名稱分開,來保持安全性。因為調入類

10、時總要經過檢查,這樣避免了特洛伊木馬現象的出現。從網絡上下載的類被調進一個與源相關的私有的名字域。當一個私有類訪問另一個類時,build-in(本機類)首先被檢查,然后檢查相關的類。這樣就避免了破壞本機類情況的出現。1.2.7可移植的同體系結構無關的特性使得Java應用程序可以在配備了Java解釋器和運行環境的任何計算機系統上運行,這成為Java應用軟件便于移植的良好基礎。但僅僅如此還不夠。如果基本數據類型設計依賴于具體實現,也將為程序的移植帶來很大不便。例如在Windows3.1中整數(Integer)為16bits,在Windows95中整數為32bits,在DECAlpha中整數為64b

11、its,在Intel486中為32bits。通過定義獨立于平臺的基本數據類型及其運算,Java數據得以在任何硬件平臺上保持一致。Java語言的基本數據類型及其表示方式如下:byte8-bit二進制補碼short16-bit二進制補碼int32-bit二進制補碼long64-bit二進制補碼float32-bitIEEE754浮點數double32-bitIEEE754浮點數char16-bitUnicode字符在任何Java解釋器中,數據類型都是依據以上標準具體實現的。因為幾乎目前使用的所有CPU都能支持以上數據類型、864位整數格式的補碼運算和單/雙精度浮點運算。Java編譯器本身就是用Ja

12、va語言編寫的。Java運算系統的編制依據POSIX方便移植的限制,用ANSIC語言寫成。Java語言規范中也沒有任何同具體實現相關的內容。1.2.8解釋的Java解釋器(運行系統)能直接運行目標代碼指令。鏈接程序通常比編譯程序所需資源少,所以程序員可以在創建源程序上花上更多的時間。1.2.9高性能如果解釋器速度不慢,Java可以在運行時直接將目標代碼翻譯成機器指令。Sun用直接解釋器一秒鐘內可調用300,000個過程。翻譯目標代碼的速度與C/C+的性能沒什么區別。1.2.10多線程Java提?copy;的多線程功能使得在一個程序里可同時執行多個小任務。線程有時也稱小進程是一個大進程里分出來的

13、小的獨立的進程。因為Java實現的多線程技術,所以比C和C+更鍵壯。多線程帶來的更大的好處是更好的交互性能和實時控制性能。當然實時控制性能還取決于系統本身(UNIX,Windows,Macintosh等),在開發難易程度和性能上都比單線程要好。任何用過當前瀏覽器的人,都感覺為調一副圖片而等待是一件很煩惱的事情。在Java里,你可用一個單線程來調一副圖片,而你可以訪問HTML里的其它信息而不必等它。1.2.11動態Java的動態特性是其面向對象設計方法的擴展。它允許程序動態地裝入運行過程中所需要的類,這是C+語言進行面向對象程序設計所無法實現的。在C+程序設計過程中,每當在類中增加一個實例變量或

14、一種成員函數后,引用該類的所有子類都必須重新編譯,否則將導致程序崩潰。Java從如下幾方面采取措施來解決這個問題。Java編譯器不是將對實例變量和成員函數的引用編譯為數值引用,而是將符號引用信息在字節碼中保存下傳遞給解釋器,再由解釋器在完成動態連接類后,將符號引用信息轉換為數值偏移量。這樣,一個在存儲器生成的對象不在編譯過程中決定,而是延遲到運行時由解釋器確定的。這樣,對類中的變量和方法進行更新時就不至于影響現存的代碼。解釋執行字節碼時,這種符號信息的查找和轉換過程僅在一個新的名字出現時才進行一次,隨后代碼便可以全速執行。在運行時確定引用的好處是可以使用已被更新的類,而不必擔心會影響原有的代碼

15、。如果程序連接了網絡中另一系統中的某一類,該類的所有者也可以自由地對該類進行更新,而不會使任何引用該類的程序崩潰。Java還簡化了使用一個升級的或全新的協議的方法。如果你的系統運行Java程序時遇到了不知怎樣處理的程序,沒關系,Java能自動下載你所需要的功能程序。1.3與C和C+語言的異同Java提供了一個功能強大語言的所有功能,但幾乎沒有一點含混特征。C+安全性不好,但C和C+還是被大家所接受,所以Java設計成C+形式,讓大家很容易學習。Java去掉了C+語言的許多功能,讓Java的語言功能很精煉,并增加了一些很有用的功能,Java去掉了以下幾個C和C+功能和特征:指針運算結構typed

16、efs#define需要釋放內存全局變量的定義這種功能都是很容易引起錯誤的地方。1.4Java的應用簡介1.4.1Web瀏覽Web瀏覽是現在國際網甚至局域網的主要使用方式。文檔能很容易地顯示文本和各種圖片,他還能提供超文本鏈接。這些瀏覽器調用HTML語言寫的文檔,HTML/WWW瀏覽器技術只限于文本和圖象。如果你想播放一種聲音或運行一個演示程序,你不得不下載那個文件并用你本機上的能理解和運行那個文件格式的程序來播放它。Java程序和它的瀏覽器HotJava,提供了可讓你的瀏覽器運行程序的方法。你能從你的瀏覽器里直接播放聲音。你還能播放頁面里的動畫。Java還能告訴你的瀏覽器怎樣處理新的類型文件

17、。當我們能在2400baud線上傳輸視頻圖象時,HotJava將能顯示這些視頻。1.4.2網絡應用系統Java是一種與平臺無關的語言,因此用Java開發的網絡應用系統可以在各種平臺上運行,大大增加了開發效率,減少重復勞動。而且,Java集成的網絡功能充分有利于開發網絡應用系統。本章小結:1.Java的產生與流行是當今internet發展的客觀要求2.java是一門各方面性能都很好的編程語言,它的基本特點是簡單、面象對象、分布式、解釋的、健壯的、安全的、結構中立的、可移植的、性能很優異的、多線程的、動態的。?reg;分適合在internet環境上開發應用系統。3.java可以制作大部分網絡應用程

18、序系統,而且與當今流行的WWW瀏覽器結合得很好。第二章Java程序開發與運行環境2.1JDK環境Java不僅提供了一個豐富的語言和運行環境,而且還提供了一個免費的Java開發工具集(JavaDevelopersKits,簡稱JDK)。編程人員和最終用戶可以利用這個工具來開發java程序或調用Java內容。JDK包括以下工具:javacJava語言編譯器,輸出結果為Java字節碼java,Java字節碼解釋器javapDisassembeler:Java字節碼分解程序,本程序返回Java程序的成員變量及方法等信息。javaprof資源分析工具,用于分析Java程序在運行過程中調用了哪些資源,包括

19、類和方法的調用次數和時間,以及各數據類型的內存使用情況等。javahC代碼處理工具,用于從Java類調用C+代碼javaAppletViewer小應用程序瀏覽工具,用于測試并運行Java小應用程序javaDebuggerAPIJava調試工具APIPrototypeDebuggerJava調試工具原型Java開發環境還包括Java類庫(包括I/O類庫、用戶界面類庫、網絡類庫等)和HotJavaWWW瀏覽器。其中,HotJava瀏覽器提供了在WWW環境下運行Java代碼的一個運行系統,而且還為WWW開發人員提供了一個Java開發框架。Java解釋器是面向Java程序的一個獨立運行系統,它可以一種

20、穩定、高性能方式運行那些獨立于平臺的Java字節碼,Java編譯器則用于生成這種字節碼。2.1.1Java程序的編譯Java程序的編譯程序是javac.exe。javac命令將Java程序編譯成字節碼,然后你可用java解釋器java命令來解釋執行這種Java字節碼。Java程序源碼必須存放在后綴為.java的文件里。Java程序里的每一個類,javac都將生成與類相同名稱但后綴為.class文件。編譯器把.class文件放在.java文件的同一個目錄里,除非你用了-d選項。當你引用到某些自己定義的類時,必須指明它們的存放目錄,這就需要利用環境變量參數CLASSPATH。環境變量CLASSPA

21、TH是由一些被分號隔開的路徑名組成。如果傳遞給javac編譯器的源文件里引用到的類定義在本文件和傳遞的其它文件中找不到,則編譯器會按CLASSPATH定義的路徑來搜索。例如:CLASSPATH=.;C:javaclasses則編譯器先搜索當前目錄,如果沒搜索到,則繼續搜索C:javaclasses目錄。注意,系統總是將系統類的目錄缺省地加在CLASSPATH后面,除非你用classpath選項來編譯。javac_g是一個用于調試的未優化的編譯器,功能與用法和javac一樣。javac的用法如下:javac-g-O-debug-depend-nowarn-verbose-classpathpat

22、h-nowrite-ddirfile.java.以下是每個選項的解釋。選項解釋:-classpathpath定義javac搜索類的路徑。它將覆蓋缺省的CLASSPATH環境變量的設置。路徑是由一?copy;由逗號隔開的路徑名組成,一般格式如下:.;例如:.;C:javadocclasses;C:toolsjavaclasses表示編譯器遇到一個新類,它先在本文件中查找它的定義,如果沒有,則在本文件所處目錄下其它文件中查找它的定義,如果還沒有,則繼續搜索C:javadocclasses目錄中的所有文件,以此類推。-ddirectory指明類層次的根目錄,格式如下:javac-dMyProgram

23、.java這樣將MyProgram.java程序里的生產的.class文件存放在my_dir目錄里.-g帶調試信息編譯,調試信息包括行號與使用java調試工具時用到的局部變量信息。如果編譯沒有加上-O優化選項,只包含行號信息。-nowarn關閉警告信息,編譯器將不顯示任何警告信息。-O優化編譯static,final,private函數,注意你的類文件可能更大。-verbose讓編譯器與解釋器顯示被編譯的源文件名和被加載的類名。環境變量CLASSPATH用來提?copy;給系統搜索用戶定義的類的缺省路徑。各路徑由分號隔開,例如:.;C:javadocclasses;C:toolsjavacla

24、sses表示編譯器遇到一個新類,它先在本文件中查找它的定義,如果沒有,則在本文件所處目錄下其它文件中查找它的定義,如果還沒有,則繼續搜索C:javadocclasses目錄中的所有文件,以此類推。2.1.2Java程序的調試使用java調試器jdb導游在早期前Betal版的Java調試器jdb是命令行形式的,如用Sun公司的dbx調試器。用jdb來調試Java應用程序,在調試?reg;前,要確證你的應用程序是帶標志g編譯的。例如:javac-gHelloWorld.javahelp命令將顯示jdb里的可用命令列表。helpthreadsthreadgroup-列出線程thread設置缺省線程S

25、uspendthreadsid(s)將線程掛起resumethreadid(s)重新啟動線程whereid|a1|打印線程的堆棧threadgroups-列出線程組號threadgroup設置當前線程組printid(s)打印對象或域dumpid(s)打印所有對象信息locals打印當前堆棧所有局部變量classes列出當前所知的類methods列出一個類的成員函數stopin.在一個成員函數里設置斷點stopat:在一行里設置斷點upnframes在線程堆棧里往上移downnframes在線程堆棧里往下移clear:清除一個斷點step執行當前行cont從斷點處繼續執行catch為指定的情況

26、中斷ignor為指定的情況忽略listlinenumber打印源程序useSourcefilepath顯示或改變源路徑memeory報告內存使用情況loadclassname加載Java類以便調試run開始執行加載的類!重復以上的命令help(?)列出所有的命令exit(orquit)離開調試器2.1.3Java程序的執行java-java語言解釋器java命令解釋java字節碼語法:javaoptionsclassnamejava_goptionsclassname描述:java命令由java編譯器javac輸出的Java字節碼。classname參數是要執行的類名稱。注意任意在類名稱后的參

27、數都將傳遞給要執行類的main函數。java執行完main函數后推出,除非main函數創建了一個或多個線程。如果main函數創建了其它線程,java總是等到最后一個線程推出才推出。選項:-cs,-checksource當一個編譯過的類調入時,這個選項將比較字節碼更改時間與源文件更改時間,如果源文件更改時間靠后,則重新編譯此類并調入此新類。-classpathpath定義javac搜索類的路徑。它將覆蓋缺省的CLASSPATH環境變量的設置。路徑是由一?copy;由逗號隔開的路徑名組成,一般格式如下:.;例如:.;C:javadocclasses;C:toolsjavaclasses表示解釋器遇

28、到一個新類,它先在本文件中查找它的定義,如果沒有,則在本文件所處目錄下其它文件中查找它的定義,如果還沒有,則繼續搜索C:javadocclasses目錄中的所有文件,以此類推。-mxx設置最大內存分配池,大小為x,x必須大于1000bytes。缺省為16兆。-msx設置垃圾回收堆的大小為x,x必須大于1000bytes。缺省為1兆。-noasyncgc關閉異步垃圾回收功能。此選項打開后,除非顯式調用或程序內存溢出,垃圾內存都不回收。本選項不打開時,垃圾回收線程與其它線程異步同時執行。-ssx每個Java線程有兩個堆棧,一個是java代碼堆棧,一個是C代碼堆棧。-ss選項將線程理C代碼用的堆棧設

29、置成最大為x。-ossx每個Java線程有兩個堆棧,一個是java代碼堆棧,一個是C代碼堆棧。-oss選項將線程理java代碼用的堆棧設置成最大為x。-v,-verbose讓java解釋器在每一個類被調入時,在標準輸出打印相應信息。環境變量CLASSPATH用來提?copy;給系統搜索用戶定義的類的缺省路徑。各路徑由分號隔開,例如:.;C:javadocclasses;C:toolsjavaclasses表示解釋器遇到一個新類,它先在本文件中查找它的定義,如果沒有,則在本文件所處目錄下其它文件中查找它的定義,如果還沒有,則繼續搜索C:javadocclasses目錄中的所有文件,以此類推。2.

30、2JWS環境JavaWorkShop是SUN公司的一個新產品,它是一個集成的java語言開發環境,它包括以下工具:lPortfolio和Project管理器l源文件編輯器lBuild管理工具l調試器l項目測試l?copy;展在線超文本連接到幫助文件這?copy;工具在JavaWorkShop的第一頁都有類似Web頁面的超級連接,如圖:注意,JavaWorkShop采用的是當今瀏覽器的界面風格,你想作什么,只需找到相應的超級連接就可以了,具體編譯及調試功能是用嵌如到HTML文檔里的Applet實現的,因此,對習慣于用internet瀏覽方式的用戶來說,這種界面很容易接受。2.2.1Portfol

31、io和Project管理器Protfolios是一?copy;java應用程序或Applet的集中。它讓你更好的管理更多的projects。一個project是portfolio里的一個子集,它包含了以下信息:1.怎樣編譯本項目2.怎樣調試和瀏覽本項目3.怎樣運行本項目4.怎樣發布本項目2.2.2源文件編輯器源文件編輯器可以從build管理器、調試器和源文件瀏覽器里的超級連接進入。在這個模塊里,你可以輸入源文件。2.2.3Build管理工具本模塊是項目的編譯器,你可以點build按鈕直接進入本模塊,如果某個文件出錯,錯誤信息會提?copy;一個超級連接,直接指到出錯的源文件地點。2.2.4Vi

32、sulJava(圖形界面構造?copy;顧名思義,本模塊能讓你可視化建造一?copy;復雜界面,如果你用過VisualBasic,你會發現它們很相似。2.2.5調試器調試器能讓你很方便地跟蹤程序的執行與發現程序的錯誤。本章小結:Java語言有兩個開發環境,一個是免費的JDK,是命令行方式的。還有一個JavaWorkShop,是開發java程序的集成環境。本章簡要介紹了它們的使用方法。第三章Java程序設計基礎3.1Java編程概況現在你可以復習一下Java語言的背景材料,它的基本結構象C/C+,但任何用面向過程語言編寫過程序的人都可以了解Java語言的大部分結構.3.1.1程序結構Java語言

33、的源程序代碼由一個或多個編譯單元(compilationunit)組成,每個編譯單元只能包含下列內容(空格和注釋除外):*一個程序包語句(packagestatement)*入口語句(importstatements)*類的聲明(classdeclarations)*界面聲明(interfacedeclarations)每個Java的編譯單元可包含多個類或界面,但是每個編譯單元最多只能有一個類或者界面是公共的。Java的源程序代碼被編譯之后,便產生了Java字節代碼。Java的字節代碼由一種不依賴于機器的指令組成,這種指令能被Java的運行系統(runtimesystem)有效地解釋。Java

34、的運行系統工作起來如同一臺虛擬機。在當前的Java實現中,每個編譯單元就是一個以.java為后綴的文件。每個編譯單元有若干個類,編譯后,每個類生成一個.class文件。.class文件是Java虛擬機能夠識別的代碼。3.1.2注釋三種類型如下:/注釋一行/*一行或多行注釋*/*文檔注釋*/文檔注釋一般放在一個變量或函數定義之前,指示在任何自動生成文檔系統中調入。這種注釋都是聲明條目的描述.。3.1.3標識符變量,函數,類和對象的名稱都是標識符,程序員需要標識和使用的東西都需要標識符。在Java語言里,標識符以字符或_,$開頭,后面可以包含數字,標識符是大小寫有區別的,沒有長度限制。有效的標識符

35、mynameict_networkHello_sys_path$bill例子:inta_number;char_onechar;float$bill;關鍵詞abstractcontinuefornewswitchbooleandefaultgotonullsynchronizedbreakdoifpackagethisbytedoubleimplementsprivatethreadsafebyvalueelseimportprotectedthrowcaseextendsinstanceofpublictransientcatchfalseintreturntruecharfinalinte

36、rfaceshorttryclassfinallylongstaticvoidconstfloatnativesuperwhile其它保留詞以下單詞被保留使用:castfuturegenericinneroperatorouterrestvar3.1.4數據類型Java使用五種基本類型:integer(整數),floating(浮點數),point(指針),Boolean(布爾變量),CharacterorString(字符或字符?reg;)。integer整數下邊給出的數據表示都是整數的例子:4,15,089,0xAD00整數長度數據類型表示8bitsbyte16bitsshort32bit

37、sint64bitslongfloating浮點數下邊給出的數據表示都是浮點數的例子:6.37,3.7E15,3e8浮點數長度數據類型表示32bitsfloat64bitsdoubleBoolean布爾變量下邊是布爾變量的兩種可能取值:truefalseCharacter字符下邊給出的都是字符的例子:at(tab)u?(unicode)String字符?reg;下邊給出的都是字符?reg;的例子:Thisisastringliteral中國科學院計算所數組你可以定義任意類型的數組.chars;這是字符型數組;intarray;這是整型數組;你還可以定義數組的數組.intblock=newint

38、23;數組邊界在運行時被檢測,避免堆棧溢出和內存崩潰.在Java里,數組實際上是一個對象,數組有一個成員變量:length。你可以用這個成員函數來查看任意數組的長度.inta=newint103a.length/*10*/a0.length/*3*/創建數組在Java里創建數組,你可使用兩種基本方法?reg;一。創建一個空數組:intlist=newint50;或你可以用初始數值填充數組.Stringnames=Chenji,Yuan,Chun,Yang;相當于下面功能:Stringnames;names=newString4;names0=newString(Chenji);names1=n

39、ewString(Yuan);names2=newString(Chun);names3=newString(Yang);在編譯時你不能象下例那樣創建靜態數組。intname50;/將產生一個編譯錯誤你也不能用new操作去填充一個沒定義大小的數組。intname;for(inti=0;i9;i+)namei=i;3.1.5表達式Java語言的表達式和C語言非常類似。運算符運算符(operator)優先級從高到底排列如下:.()+-!instanceof*/%+-=!=&|?:=op=,整數運算符在整數運算時,如果操作數是long類型,則運算結果是long類型,否則為int類型,絕不會是byte

40、,short或char型。這樣,如果變量i被聲明為short或byte,i+1的結果會是int。如果結果超過該類型的取值范圍,則按該類型的最大值取模。單目整數運算符是:運算符操作-單目非位補碼+加1-減1+運算符用于表示直接加1操作。增量操作也可以用加運算符和賦值操作間接完成。+lvalue(左值?copy;表示lvalue+=1,+lvalue也表示lvalue=lvalue+1(只要lvalue沒有副作用)。-運算符用于表示減1操作。+和-運算符既可以作為前綴運算符,也可以做為后綴運算符。雙目整數運算符是:運算符操作*+加-減*乘/除%取模&位與位或位異或右移(帶符號)添零右移整數除法按零

41、舍入。除法和取模遵守以下等式:(a/b)*b+(a%b)=a整數算術運算的異常是由于除零或按零取模造成的。它將引發一個算術異常。下溢產生零,上溢導致越界。例如:加1超過整數最大值,取模后,變成最小值。一個op=賦值運算符,和上表中的各雙目整數運算符聯用,構成一個表達式。整數關系運算符,=,=和!=產生boolean類型的數據。布爾運算符布爾(boolean)變量或表達式的組合運算可以產生新的boolean值。單目運算符!是布爾非。雙目運算符,和是邏輯AND,OR和XOR運算符,它們強制兩個操作數求布爾值。為避免右側操作數冗余求值,用戶可以使用短路求值運算符和。用戶可以使用=和!=,賦值運算符也

42、可以用&=、|=、=。三元條件操作符?:和C語言中的一樣。浮點運算符浮點運算符可以使用常規運算符的組合:如單目運算符+、-,雙目運算符+、-、*和/,以及賦值運算符+=,-=,*=,和/=。此外,還有取模運算:%和%=也可以作用于浮點數,例如:a%b和a-(int)(a/b)*b)的語義相同。這表示a%b的結果是除完后剩下的浮點數部分。只有單精度操作數的浮點表達式按照單精度運算求值,產生單精度結果。如果浮點表達式中含有一個或一個以上的雙精度操作數,則按雙精度運算,結果是雙精度浮點數。數組運算符數組運算符形式如下:可給出數組中某個元素的值。合法的取值范圍是從0到數組的長度減1。取值范圍的檢查只在

43、運行時刻實?copy;。?reg;運算符?reg;以String對象實現。運算符+完成并?reg;操作,如果必要則自動把操作數轉換為String型。如果操作數是一個對象,它可定義一個方法toString()返回該對象的String方式,例如floata=1.0print(“Thevalueofais”+a+“n”);+運算符用到?reg;上的例子Strings=“a=”+a;+=運算符也可以用于String。注意,左邊(下例中的s1)僅求值一次。s1+=a;/s1=s1+a/若a非String型,自動轉換為String型。對象運算符雙目運算符instanceof測試某個對象是否是指定類或其子類

44、的實例。例如:if(myObjectinstanceofMyClass)MyClassanothermyObject=(MyClass)myObject;是判定myObject是否是MyClass的實例或是其子類的實例。強制和轉換Java語言和解釋器限制使用強制和轉換,以防止出錯導致系統崩潰。整數和浮點數?reg;間可以來回強制轉換,但整數不能強制轉換成數組或對象。對象不能被強制為基本類型。3.1.6Java流控制下面幾個控制結構是從C語言借鑒的。分支結構if/else分支結構if(Boolean)statemanets;elsestatements;switch分支結構switch(expr

45、1)caseexpr2:statements;break;caseexpr3:statements;break;default:statements;break;循環結構for循環結構for(initexpr1;testexpr2;incrementexpr3)statements;While循環結構While(Boolean)statements;Do循環結構dostatements;while(Boolean);一般順序控制breaklabelcontinuelabelreutrnexpr;label:statement;for循環例子下面是一個程序例子,畫幾條線,分別用紅,綠,藍顏色,這

46、段程序可能是Java函數的一部分:intcount;for(count=1;count=12;count+)switch(count%3)case0:setColor(Color.red);break;case1:setColor(Color.blue);break;case2:setColor(Color.green);break;g.drawLine(10,count*10,80,count*10);3.2Java變量和函數的實例Java的類包含變量和函數。數據變量可以是一?copy;原始的類型,如int,char等。成員函數是一?copy;可執行的過程。例如,下面程序里:publiccl

47、assClassOneinti;publicClassOne()i=10;publicvoidAdd_i(intj)i=i+j;ClassOne包含一個變量i和兩個成員函數,ClassOne(intfirst)和Add_i(intj)。成員函數成員函數是一?copy;可被其它類或自己類調用的處理子程序。一個特殊的成員函數叫構造函數,這個函數名稱一般與本類名程相同。它沒有返回值。構造函數和成員函數當你在Java里定義一個類時,你可定義一個或多個可選的構造函數,當創建本類的一個對象時用某一個構造函數來初始化本對象。用前面的程序例子來說明,當ClassOne類創建一個新實例時,所有成員函數和變量被創

48、建(創建實例)。構造函數被調用。ClassOnemc:mc=newClassOne();關鍵詞new用來創建一個類的實例,一個類用new初始化?reg;前并不占用內存,它只是一個類型定義,當mc對象初始化后,mc對象里的i變量等于10。你可以通過對象名來引用變量i。(有時稱?reg;為實例變量)mc.i+;/mc實例變量加1因為mc有ClassOne類的所有變量和成員函數,我們可以使用同樣的語法來調用成員函數Add_i:Add_i(10);現在mc.i變量等于21.結束函數Java并不支持析構函數(C+里的定義),因為java本身提?copy;對象無用時自動清除的功能,同時它也提?copy;了

49、一個自動拉圾箱的成員函數,在清除對象時被調用:Protectedvoidfinalize()close();3.3對象有效范圍和廢物自動回收對象有一定的生命期并在它的生命期間使用資源,當一個對象不再被使用時,它應釋放內存,避免內存溢出。在Java里,收集和釋放內存是一個叫自動廢品回收站的線程的責任。這個線程監視對象有效范圍并給一個走出有效范圍的對象作上標識。例如:Strings;/沒有分配內存s=newString(oldstring);/分配內存s=newstring;/重新分配內存(創建新對象)我們將在以后訪問String類時將更加明白它的工作過程,但它的快速工作過程是這樣的:1.創建一個

50、新的String類對象并填充以oldstring2.創建另一個String對象并填充以newstring注意我們創建了兩個對象。Stirng對象oldstringStirng對象newstring在第三條語句里,第一個包括oldstring的叫做s的對象已走出了有效范圍,沒有任何方法可以再訪問他,我們現在有一個新的對象也叫s,包含newstring。在下一個廢品回收線程,前一個對象將被標識并清除。3.4子類子類是利用存在的對象創建一個新對象的機制,比如,如果你有一個Horse類,你可以創建一個Zebra子類,Zebra是Horse的一種。classZebraextendsHorseintnum

51、ber_OF_stripes:關鍵詞extends來定義對象有的子類.Zebra是Horse的子類。Horse類里的所有特征都將拷貝到Zebra類里,而Zebra類里可以定義自己的成員函數和實例變量。Zebra稱為Horse的派生類或繼承。另外,你也許還想覆蓋基類的成員函數。用ClassOne說明,下面是一個派生類覆蓋Add_i功能的例子.importClassOne;publicclassNewClassextendsClassOnepublicvoidAdd_i(intj)i=i+(j/2);當NewClass類的實例創建時,變量i初始化值為10,但調用Add_i產生不同的結果。NewCl

52、assmnc;mnc=newNewClass();mnc.Add_i(10);訪問控制Java里當你創建一個新類時,你可以標明變量和成員函數的訪問層次。publicpublicvoidAnyOneCanAccess()public實例變量和成員函數可以任意其它類調用。protectedprotectedvoidOnlySubClasses()protected實例變量和成員函數只能被其子類調用.privateprivateStringCreditCardNumber;private實例變量和成員函數只能在本類里調用.friendlyvoidMyPackageMethod()缺省的,如果沒有定義

53、任何防火控制,實例變量或函數缺省定義成friendly,意味著可以被本包里的任意對象防問,但其它包里的對象不可防問。靜態成員函數和變量有?copy;時候,你創建一個類,希望這個類的所有實例都公用一個變量。也就是說,所有這個類的對象都只有實例變量的同一個拷貝。這種方法的關鍵詞是static,例如:classBlockstaticintnumber=50;所有從Block類創建的對象的number變量值都是相同的。無任在哪個對象里改變了number的值,所有對象的number都跟著改變。同樣的,你可以定義static成員函數,但這個成員函數不能訪問非static函數和變量。classBlockst

54、aticintnumber=50;intlocalvalue;staticvoidadd_local()localvalue+;/沒有運行staticvoidadd_static()number+;/運行3.5this和super訪問一個類的實例變量時,this關鍵詞是指向這個類本身的指針,在前面ClassOne例子中,我們可以增加構造函數如下:publicclassClassOneinti;publicClassOne()i=10;publicClassOne(intvalue)this.i=value;publicvoidAdd_i(intj)i=i+j;這里,this指向ClassOne

55、類的指針。如果在一個子類里覆蓋了父類的某個成員函數,但又想調用父類的成員函數,你可以用super關鍵詞指向父類的成員函數。importClassOne;publicclassNewClassextendsClassOnepublicvoidAdd_i(intj)i=i+(j/2);super.Add_i(j);下面程序里,i變量被構造函數設成10,然后15,最后被父類(ClassOne)設成25。NewClassmnc;mnc=newNewClass();mnc.Add_i(10);3.6類的類型至今為止,我用在類前面只用了一個public關鍵詞,其實它有下面4種選擇:abstract一個ab

56、stract類必須至少有一個虛擬函數,一個abstract類不能直接創建對象,必須繼承子類后才能。final一個final類聲明了子類鏈的結尾,用final聲明的類不能再派生子類。publicpublic類能被其它的類訪問。在其它包里,如果想使用這個類必須先import,否則它只能在它定義的package里使用。synchronicable這個類標識表示所有?copy;類的成員函數都是同步的。3.7抽象類面向對象的一個最大優點就是能夠定義怎樣使用這個類而不必真正定義好成員函數。如果程序由不同的用戶實現時是很有用的,這不需用戶使用相同的成員函數名。在java里Graphics類里一個abstract類的例子如下:publicabstractclassGraphicspublicabstractvoiddrawLine(intx1,inty1,intx2,inty2);publicabstractvoiddrawOval(intx,inty,intwidth,intheight);pu

溫馨提示

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

評論

0/150

提交評論