




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第一講Java語言入門Java 特點面向對象:與C+相比,JAVA是純的面向對象的語言C+為了向下兼容0,保留了很多C里面的特性,而C,眾所周知是 面向過程的語言,這就使C+成為一個混血兒。而JAVA語法中取消了C + +里為兼容C所保留的特性,如取消了頭文件、指針算法、結構、單元等??梢浦玻ㄆ脚_無關性):生成中間字節(jié)碼指令與其他編程語言不同Java并不生成可執(zhí)行文件(exe文件),而 是生成一種中間字節(jié)碼文件(class文件)。任何操作系統(tǒng),只要裝有 Java虛擬機JVM ),就可以解釋并執(zhí)行這個中間字節(jié)碼文件。這正墨va 實現(xiàn)可移植的機制。原始數(shù)據(jù)類型存儲方法固定,避開移植時的問題Java
2、的原始數(shù)據(jù)類型的大小是固定的。比如,在任何機器上,整型 都是32位,而C+里整型是依賴于目標機器的,對6位處理器(比如 8086),整數(shù)用兩個字節(jié)表示;在像un SPARC這樣的32位處理器中,整 數(shù)用4個字節(jié)表示。在Intel Pentium處理器上,整數(shù)類型由具體的操作系 統(tǒng)決定:對于DOS和Win32來說,整數(shù)是2個字節(jié);對于Windows 9x、NT 和2000,整數(shù)是4個字節(jié)。當然,使整數(shù)類型平臺無關之后,性能必然有 所下降,但就Java來說,這個代價是值得的Java的字符串,則采用標準 的Unicode格式保存??梢哉f,沒有這個特性Java的可移植性也不可能 實現(xiàn)。簡單JAVA在語
3、法上與C+類似JAVA的語法與C+很接近,有過C或者C+編程經驗的程序員很 容易就可以學會JAVA語法;取消了 C+的一些復雜而低效的特性比如:用接口技術代替了+的 多重繼承。C+中,一個類允許有多個超類,這個特性叫解重 繼承,多重繼承使得編譯器非常復雜且效率不高JAVA的類只允 許有一個超類,而用接口 Interface)技術實現(xiàn)與C+的多繼承相類似的功能 其它被取消的特性包括:虛擬基礎類、運算符過載等JAVA的基本解釋器和類支持模塊大概僅0K即使加入基本的標準庫和支持線程的模塊,也才20K左右。與GUI (圖形用戶界面)相比,明顯小很多健壯取消了指針算法C的最關鍵的一個特性是它的強大指針算
4、法,比如可以用指針訪問 字符串、數(shù)組甚至文件,很容易產生指針溢出,意外地改寫內存和損毀數(shù) 據(jù)。JAVA里有一個指針模型,對于普通的任務,如訪問字符串、數(shù)組,根 本不用指針,而一旦需要,比如訪問對象、文件時,也可以獲得指針的強大 能力,但JAVA同時有高度的指針安全保障,用戶永遠不可能訪問一個壞掉 的指針、不可能造成內存分配錯誤,也用不著專門提防可能出現(xiàn)的內存漏 洞。多線程強大的多線程能力多線程可以使程序有更好的交互性和實時性,并可以最大限度地利 用多處理器系統(tǒng)。JAVA有著強大的多線程處理能力,因為各主流操作系統(tǒng) 平臺在線程的實施方面有重大的差異,所以AVA為不同的操作系統(tǒng)實現(xiàn)了 專門的多線程
5、機制。在這點上來說JAVA沒有做到平臺無關。Java 簡史首次亮相一1995年5月Java技術起先是作為小型的計算機語言,用于消費類設備,比如有 線電視交換盒等。因為這些設備的功能和內存均不足以運行大程序,所以程 序要盡可能??;另外,由于不同的廠商可能選用不同曲U,所以要求這種 語言不能受限于任何一種獨立的體系結構1995年5月23日召開的 SunWorld 95大會上,一種全新的瀏覽器(今天的0盯丫的前身)亮 相,標志著Java的誕生。開始流行一1996年1月那時網景公司決定郎etscape2.0加入對 Java的支持, Netscape2.0在1996年1月發(fā)布,從這一版本開始,所有ets
6、cape瀏覽器均支持Java。注冊了Java使用許可證的還有IBM、Symantec. Inprise和 其他許多公司。就連微軟,也加入了這一行列(盡管他們支持蜥a和標 準的Java稍有不同)。SUN的第一個JAVA版本-1996年初Sun公司于1996年初發(fā)布了 Java 1.02,遺憾的是Java1.02還未 擺脫其小型語言的影子,只適合用來做諸如網頁上一個隨機移動的文字之類 的工作,并不適合用來做正規(guī)的程序開發(fā)Java1.02作為一種正規(guī)的編程 語言,可以說,準備得很不充分。成熟1998年1998年12月,Java1.2問世了。它是一個功能全面的、具有高度擴 展能力的新版本。3天后,Ja
7、va1.2被改進成Java2,向一次編寫,到處運 行的目標前進了一大步?,F(xiàn)狀現(xiàn)在最新的Java版本是JDK1.4,它是一個測試版,穩(wěn)定的正式版 是JDK1.3。用戶可以到http:/products免費下載。微軟在 它的最新瀏覽器IE6.0中不再支持Java,為Java的發(fā)展帶來陰影。JDK的安裝與編程環(huán)境的設定1.3.1 Java程序的開發(fā)過程經典的Java工具包是JDK。盡管可以用任何文本編輯器,如記事 本,都可以直接編寫丫程序然后用JDK的命令編譯和運行,為了調試方 便,也為了初學者容易上手,本教程課件將使用一個UPadPro的Java編 寫工具來調用JDK的工具。用戶可以到http:/
8、www.modelworks.coi下載這 個工具。JDK的安裝安裝運行之后,應該首先設小!(工具包所在的路徑。菜單欄的JDK-) select JDK Directory)選擇剛才安裝的JDK路 徑-OK。新建一個project菜單欄的File-new projects-選擇路徑輸入project的名字。兩個簡單的程序示例Java應用程序 :Hello.java編寫新建一個java文件。File-) new-) java file-輸入一個名字: Hello-點 creat file.出現(xiàn)了一個空的java 文件。編譯JDK-) compile Hello.java或者點擊如演示所示的按鈕。
9、實際上是 執(zhí)行JDK工具包里的javac.exe命令,與javacG:java2jiaochengexampleteach1Hello.jav是等價的。便已完成之后 在同一個文件夾就會有一個同名的31ass文件??淳幾g結果,改錯錯誤舉例:少寫一個分號;錄入錯誤;運行JDK-) Run classes)選擇要運行Kjblass,輸入?yún)?shù)(這里,沒 有參數(shù))或者點擊如演示所示的按鈕。一個有參數(shù)的例子看運行結果Java Applet: StarterApplet.java新建一個Java Applet文件。File-new-java Applet-輸入一 個名字:StarterApplet)出現(xiàn)了一
10、個空的java文件和一個Html文件。編譯JDK-) compile StarterApplet.java或者點擊如演示所示的按鈕。實際上是執(zhí)行JDK工具包里的javac.exe命令,與javacG:java2jiaochengexampleteach1 StarterApplet. ja是等價的。注意 不要隱藏文件的擴展名,否則給編譯時帶來麻煩!可以在工工具/文件夾先域查看/中修改!看編譯結果,改錯運行JDK-Test Applet)選擇要運行Kjclass,輸入?yún)?shù)(這里,沒 有參數(shù))或者點擊如演示所示的按鈕或者直接雙擊玳1文件。看運行結果如果獲得幫助下載幫助JDK并不包含幫助文件,需要到
11、網站上下載,里面有示例和說明。 HYPERLINK http:/www.confluent.fr/javadoc/jdk13e.htinl http:/www.confluent.fr/javadoc/jdk13e.htinl 下載下來時候, 雙擊安裝。使用幫助敲入想查找的關鍵字,按回車。編程的一些約定注意:在一個原文件中只能有一個ublic類!且文件名 與public類同名!命名規(guī)則類名與文件名應該一致,否則編譯出錯。比如Glass Hello的文 件名應該是Hello.java類名首字母大寫,每個單詞開頭大寫,其他用小寫。比如:Hello.java, StarterApplet.java變
12、量名用第一個單詞用小寫字母,第二個以后的單詞首字母大寫。 比如:int myAge;方法的名字第一個單詞用小寫字母,第二個以后的單詞首字母大 寫,比如:getMyAge();注釋/* Here is a block comment.*/表示完整的一段注釋;if (condition) /* Handle the condition. */ .)表示注釋該行以下部分if (a = 2) return TRUE; /* special case */ else return isPrime(a); / works only for odd a)注釋一行分行如果一行太長需要換行。比如:someMet
13、hod(longExpression1, longExpression2, longExpression3,longExpression4, longExpression5);var = someMethod1(longExpression1, someMethod2(longExpression2, longExpression3);var = someMethod1(longExpression1, someMethod2 (longExpression2, longExpression3);講演計劃第三講語句Java的語句可以分為以下4種:表達式語句方法調用語句控制語句表達式語句一個表達
14、式加上一個分號就構成了一個語句。分號表示一個語句的 結束,缺少分號,編譯將出錯。最典型的表達式語句是賦值語句。比如:int x;x=23;方法調用語句調用一個類的對象的方法:類名(或對象名訪法名(參數(shù)列表。比如:System.out.println(Hello).如果方法有返回值,還可以把返回值賦值給一個變量。比 如:String s=Hello”, int len;len=s.length();控制語句Java語言的控制語句有2種:條件語句、循環(huán)語句。條件語句:條件語句有兩種:if語句和switch語句。if語句:if (條件)代碼塊1 else代碼塊2如果條件為真,則執(zhí)行代碼塊,否則執(zhí)行代
15、碼塊else部分是可選的,也就是說,可以沒有l(wèi)se。如果有else,則與最近的if結合:switch 語句switch語句是多分支的開關語句,它的一般格式定義如下:switch 表達式case 常量值1 :代碼塊1break;case 常量值2 :代碼塊2break;default:代碼塊 語句中表達式的值必須整型或者字符型;常量值1到常量值n必 須也是整型或者字符型switch語句首先計算表達式的值,如果表達式的 值和某個case后面的常量值相同,就執(zhí)行該ase里的若干個語句直到 break語句為止。如果沒有一個常量與表達式的值相同,則執(zhí)行口正后 面的若干個語句。default是可有可無的,
16、如果它不存在,并且所有的常量 值都和表達式的值不相同,那么witch語句就不會進行任何處理。需要注意的是,缶witch同一個語句中,case后的常量值必須互 不相同。控制語句Java語言的控制語句有2種:條件語句、循環(huán)語句。條件語句:條件語句有兩種:if語句和switch語句。if語句:if (條件)代碼塊1else代碼塊2如果條件為真,則執(zhí)行代碼塊,否則執(zhí)行代碼塊else部分是可選的,也就是說,可以沒有l(wèi)se。如果有else,則與最近的if結合:switch語句switch語句是多分支的開關語句,它的一般格式定義如下:switch 表達式case 常量值1 :代碼塊1break;case 常
17、量值2 :代碼塊2break;default:代碼捌 語句中表達式的值必須是整型或者字符型;常量值到常量值n必 須也是整型或者字符型。switch語句首先計算表達式的值,如果表達式的 值和某個case后面的常量值相同,就執(zhí)行該ase里的若干個語句直到 break語句為止。如果沒有一個常量與表達式的值相同,則執(zhí)行口屋后 面的若干個語句。default是可有可無的,如果它不存在,并且所有的常量 值都和表達式的值不相同,那么witch語句就不會進行任何處理。需要注意的是,缶witch同一個語句中,case后的常量值必須互 不相同。循環(huán)語句:循環(huán)語句,顧名思義,是反復執(zhí)行的語句。比如,計算0的階 乘,
18、1*2*3*.*100,就需要用到循環(huán)語句,不然,就要寫一百遍乘法。循 環(huán)語句需要特別小心,很容易陷入死循環(huán),所以循環(huán)體的代碼塊里需要有能 使循環(huán)結束的語句。Java有三種循環(huán)語句:while語句,do-while語句和for語句。while 語句:while語句的格式是:while()代碼捌當條件成立的時候,執(zhí)行代碼塊,再檢查條件,如果還成立,再執(zhí) 行代碼塊,直到條件不成立。比如,計算10的階乘:do-while 語句do-while語句的格式是:do(代碼塊while(條件do-while語句和while語句的區(qū)別在于:while語句先檢查條件, 如果條件不成立,則不進入循環(huán)體do-whi
19、le語句先執(zhí)行循環(huán)體的代碼, 再檢查條件,如果條件成立,則在此執(zhí)行循環(huán)體的代碼。所以o-while 語句至少要執(zhí)行一遍循環(huán)體的代碼塊。比如,計算10的階乘:for語句for語句是Java語言中用得最多的循環(huán)語句。它的格式如下:for俵達式1,表達式2,表達式3)代碼捌其中,表達式1完成變量的初始化,表達式2時布爾類型的表達 式,是循環(huán)條件,表達式3是黨執(zhí)行了一遍循環(huán)之后,修改控制循環(huán)的變量 值。for語句的執(zhí)行過程是這樣的:首先計算表達式,完成必要的初始 化工作;然后判斷表達表的值,如果表達式的值為rue,則執(zhí)行循環(huán) 體;如果為false,則跳出循環(huán)。執(zhí)行完循環(huán)體之后緊接著計算表達式, 以便改
20、變循環(huán)條件,這樣一輪循環(huán)就結束了。第二輪循環(huán)從計算表達式開 始,如果表達式的值仍為rue,則繼續(xù)循環(huán);否則循環(huán)結束,執(zhí)行or語 句后面的語句。比如,計算10的階乘:嵌套循環(huán)經??梢杂龅角短籽h(huán)的例子。所謂嵌套循環(huán),是指一個循環(huán)體里 還有一個或者更多個循環(huán)。比如計算0以內的階乘之和,或者求0以內的 素數(shù),就需要用到嵌套循環(huán)。我們以求0以內的素數(shù)為例,說明嵌套循環(huán) 的用法;求10以內的階乘之和,將留作作業(yè)。循環(huán)語句里的break語句和 continue語句:在循環(huán)體中,遇至IJbreak語句,那么整個循環(huán)語句就結束;如果遇 到 continue語句,那么本次循環(huán)就結束,就是說,不再執(zhí)行本次循環(huán)中
21、continue語句后面的語句,而是轉入下一次循環(huán)。3.5變量的作用域變量是由作用域的。所謂變量的作用域,是指一個變量在什么地方 生效??偟膩碚f,變量的作用域是聲明它的塊所謂塊,是指用一對花括號 包圍起來的任意數(shù)量的丫語句。變量只在聲明它的塊中有效,在這塊以 外,變量是無效的。然而,不可以在兩個嵌套的塊中聲明兩個完全同名的變。注意,在C+中,這是允許的,內部定義會掩蓋外部定義。這很容 易造成錯誤,所以Java不允許這樣做。這一講,我們主要學習了lava的語句,主要是流程控制語句,包括 條件語句和循環(huán)語句等。語句是程序的基本組成部分,是我們進一步學習 Java的基礎。希望同學們切實掌握好這部分內
22、容,為我們的進一步學習打 下堅實的基礎。習題L編一個計算1!+2!+10的應用程序應用程序計算100以內的全部質數(shù). 一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為完數(shù)”,編寫 一個應用程序,求1000之內的所有完數(shù)。.求45和的最大公約數(shù)和最小公倍數(shù)。第四講數(shù)組和字符串什么是數(shù)組?為什么要數(shù)組?除了基本數(shù)據(jù)類型Java還提供一種導出類型:數(shù)組。數(shù)組是相同 類型的數(shù)據(jù)按順序組成的一種復合數(shù)據(jù)類型,通過數(shù)組名和下標,可以使用 數(shù)組中的數(shù)據(jù)。下標從0開始。數(shù)組是所有編程語言中常用的數(shù)據(jù)結構。為什么要數(shù)組呢?我們來舉一個例子。假設我們需要表示一個5班 個人的數(shù)學成績,要求求出平均成績。如果沒有數(shù)組,我
23、們需要用前面學過 的聲明變量的方法,聲阻0個變量,寫50次加法運算!數(shù)組可以大大地簡 化類似的問題!我們只要聲明一個長度為0的整型數(shù)組,結合上一講我們 學過的循環(huán)語句,就可以很方便地解決這個問題!在以前的編程語言比如:或者C+中,字符串也使用數(shù)組來表示 的:字符串是字符數(shù)組!所以字符串與數(shù)組有著天然的聯(lián)系。但JVa 中,提供了一種更方便的表示字符串的方法:用一班ring類來表示。類 是面向對象的語言特有的概念,對于初次接觸面向對象技術的人來說,比較 難理解。所以,這一講,我們將學習表示字符串的ring類,也對類的使 用有一個粗略的了解,作為下一講詳細學習類的準備。需要指出的是,C語言里的其他兩
24、種導出類型:結構體和共用體, 在Java里已經被取消。下面,我們來學習數(shù)組和字符串。數(shù)組的聲明、創(chuàng)建和初始化L數(shù)組的聲明:聲明數(shù)組,包括聲明數(shù)組的名字、數(shù)組包含的元素的數(shù)據(jù)類型。數(shù) 組可以一維的,也可以是二維或者多維的。舉例來說:一個班有個人, 我們用一個長度為50的一維數(shù)組表示;如果要表示每個同學的五門高考成 績,那我們就需要用一個第一維長度為0,第二維長度為5的二維數(shù)組。聲明一維數(shù)組有兩種格式:數(shù)組元素類型數(shù)組名】;數(shù)組元素類型數(shù)組名;比如 :int student;或者:int student;類似地,聲明二維數(shù)組有兩種格式:數(shù)組元素類型數(shù)組名;數(shù)組元素類型數(shù)組名;比如 :int sco
25、re ;或者:int score;下面,我們主要以一維數(shù)組為例,學習數(shù)組的用法。.數(shù)組的創(chuàng)建:聲明數(shù)組僅僅給出了數(shù)組名字和元素的數(shù)據(jù)類型,想要真正使用數(shù) 組還必須為數(shù)組分配內存空間,也就是創(chuàng)建數(shù)組。在為數(shù)組分配內存空間時 必須指明數(shù)組的長度。為數(shù)組分配內存空間的格式如下:數(shù)組名=new數(shù)組元素的類型數(shù)組的長度例如 :student = new int 50;score = new int 50 4事實上,數(shù)組的聲明和創(chuàng)建可以一起完成,比如:int student = new int 50;一旦數(shù)組被創(chuàng)建,數(shù)組的大小就不能改變。如果在程序運行期間, 需要對數(shù)組的大小進行擴展,通常需要使用另一種數(shù)
26、據(jù)對象ector。有關 向量和擴展數(shù)組,有興趣的同學可以在丫幫助中查找Vector的幫助。Student3 Student3 Student 4P Student-0 1Student11Student F 2 1L數(shù)組的初始化:創(chuàng)建數(shù)組后,系統(tǒng)會給每個元素一個默認的值,比如,整型數(shù)組的 默認值是0。我們也可以在聲明數(shù)組的同時給數(shù)組一個初始值,我們稱之為初始 化。int num = 2, 4, 4, 1這個初始化動作相當于:int num = new int 4;num 0=2; num 1=5; num 2=4; num 3=1;數(shù)組的使用L數(shù)組的訪問前面我們已經看到,數(shù)組通過下標訪問數(shù)組元
27、素,比Student 0 =70, student 49=87等。注意,下標從0開始,如果數(shù)組長度為 n,則下標是0 n -1,如果使用n或者以上的元素,將會發(fā)生數(shù)組溢出異 常。比如:student: 50 = 79,雖然編譯的時候能通過,程序運行時將中 止。二維數(shù)組的使用與之類似。L數(shù)組的復制可以把一個數(shù)組變量復制給另一個但兩個變量引用的都會是同一 個內存空間,所以改變一個數(shù)組的值,另一個數(shù)組變量的值也會改變。比如:int num = 2, 3, 5, 1 int numcopy: =num;numcopy2 =5;現(xiàn)在,num:2也變成了5。如果真的想把一個數(shù)組的所有值都復制到另一個數(shù)組中
28、,就需要采 用 System . arrarycopy05法:System . arrarycopy ( num, 0, numcopy, 0 4)。這樣,num和numcopy將指向不同的內存空間numcopy 的值的改變,不會在影口響ium。有興趣的同學可以參考幫助文件。字符串前面已經說過Java使用java.lang包中的String類來表示字符 串,盡管我們可以用字符數(shù)組來實現(xiàn)類似的功能。關于類的詳細知識,我們 下一講將會講到。由于類是面向對象編程語言最核心的概念,學習起來有些 難度,我們在這里先通逑tring類對類的概念有一個粗略的了解,以使我 們下面的學習更順利一些。字符串,顧名思
29、義,就是一串字符。比如:student100,“China 等。用一對雙引號表示字符串。我們也可以把字符串看成字符數(shù)組(事實 上,C就是把字符串當作字符數(shù)組來處理),但是把它視為類更方便一些。 為什么?我們下面馬上會看到。字符串的聲明、創(chuàng)建字符串聲明的格式是:String字符串名比如:String s;字符串的創(chuàng)建格式:字符串名:new String(字符串常量)或者 字符串售字符串常量比如:s = new String ( student);或者:s = student;聲明和創(chuàng)建可以一步完成,比如String s =new String ( student );或者String s = s
30、tudent;大家是不是覺得:String這個類的聲明,跟前面我們學過的基本數(shù) 據(jù)類型的聲明的格式是一樣的,比如:整型的聲明int n;比較一下: String s;事實上,類型變量名這種格式是類的聲明的一般格式,你可以把類當作基本數(shù)據(jù)類型一 樣來聲明。另一方面, 變量名= new類名(參數(shù)列表);比如s=new String(student);這是類的一般創(chuàng)建格式。與字符串有關的操作字符串的長度length()方法:String s = student;int len=s.length();需要指出的是,s.length()這種調用方法,是面向對象編程語言特 有的方法,我們Es叫做Strin
31、g類的對象,就像int n ,我們把n叫做整 型變量一樣;把length()叫做String類的方法。下面我們可以看到, String類的方法,都是通過對象名方法名()這種方式調用的。取子串String s = I am a Chinese;String subs;subs = s.substring (7);字符串的比較String tom = my name is tom;String jane = my name is jane;tom.equals(jane ;返回false。表示不相等pareTo(jane,返回一個負整數(shù),因為第一個不相等的字符t和j相比,t在j的后面;如果返回),
32、表示相 等;如果返回一個正整數(shù),表示須和jane第一個不相等 的字符,tom的在jane的前面。注意,不要用tom= =jane判斷兩個字符串是否相等因為這樣的話 比較的是它們在內存中的地址是否相同,而不是我們所希望的比較字符串的 內容是否相同。字符串連接String s = I am;String s2 = a Chinese;String s4, s4;s4 = s+s2;s4=s + 24;整數(shù)型24將會自動轉換為字符串。字符串檢索字符串檢索是指判斷一個字符串是否包含某一個字符或者子字符 串,如果有,返回它的位置,如果沒有,返回一個負數(shù)。String s = I am a Chinese
33、;s.indexOf(Chinese),返回 7 ;s.indexOf(a);返回 2 ;字符串轉換為數(shù)值如果一個字符串是一串數(shù)字,可以把它轉換成相應的數(shù)值。o轉換為整型:String s = 21;int x; x= Integer.parseInt (s);o轉換為浮點型String s = 22.124;float f; f = Float.valueOf(s).floatValue ;)o當然,也可以把整數(shù)或者浮點數(shù)轉換為字符串類:String s;int n = 24;s = String.valueOf ( n )o其他與字符串有關的方法還有很多,我們不可能一一講解。前面我們說 過
34、,我們要學會使用幫助。我們查找關于tring的幫助,就可以看到,有 關于String的所有方法的詳細講解。希望同學們可以學會使用幫助。小結這一講,我們學習了數(shù)組的一些知識,并通過tring類,一方面學 習了字符串的使用,另一方面先對類的一些概念和用法,比如類的方法調 用,有了一些粗略的了解。數(shù)組是我們經常要用到的數(shù)據(jù)結構,它是一種導出型的數(shù)據(jù)結構, 對我們處理大規(guī)模的數(shù)據(jù),有很大幫助。前面我們說,用String類表示字符串,比我們自己用字符數(shù)組來做 更方便。因為String類為我們提供了很多現(xiàn)成的可以直接使用的對字符串 的操作方法。比如substring( ),equals()等方法。如果我們
35、要用字符數(shù) 組來完成與substring類似的功能,就只能自己把子串的每一個字符復制到 另外一個字符數(shù)組中;與quals()類似的功能,就只能自己一個一個字符 地檢查兩個字符船是否相等。提供對自己的成員數(shù)據(jù)的完整的操作方法,也 就是把數(shù)據(jù)和對數(shù)據(jù)的操作封裝起來,是類的最大的好處。如果現(xiàn)在還不能 理解這句話,不要緊,我們現(xiàn)在只需要知道:使用ring類這種方法,非 常方便。習題.聲明一個數(shù)組,存一個學生的五門成績。求該學生總成績、平均成 績。.將一個數(shù)組中的值按逆序重新存放,例如,原來順序為9:, 5, 7, 4,8,要求改為:8,4,7,5,9。.編寫一個應用程序,連接兩個字符串“I am”和
36、“a student” , 并求出第7個字符是什么?找出“am”在該字符串中的位置,最后 把所有字符都變成大寫字符。.統(tǒng)計一個字符串中字母、空格和數(shù)字的個數(shù)。第五講:類、對象和接口1)什么是類上一講我們使用了一個String類,我們說過:類把一類對象的成員 函數(shù)和方法封裝起來,使用起來很方便。那么,什么是類呢?要理解類,我 們先來了解對象的概念,因為類就是用來創(chuàng)建對象的模板,它包含了被創(chuàng) 建的對象的狀態(tài)描述和方法定義。我們可以把長虹牌電視機看成是一個對象。我們不必關心電視機里 面的集成電路是怎樣的,也不用關心電視機的顯像管的工作原理,我們只需 要知道電視機的遙控器上提供了對這臺電視機的什么操作
37、,比如選臺、調節(jié) 色彩、聲音等。這樣,我們雖然不知道電視機內部是怎么工作的,但我們可 以使用這臺電視機。聽起來這跟編程沒什么關系,但面向對象的思想正是與 它類似:對象,對外只提供操作該對象的方法,內部的實現(xiàn)對外是隱藏的。 我們把這種技術叫做數(shù)據(jù)隱藏。這樣,程序員不必了解一個對象內部是怎么 實現(xiàn)的,但可以很方便地使用這個對象。類,就是對象的模板。比如,電視機是一個類,而某一臺電視機就 是這個類的一個對象,也叫一個實例。我們前面使用String類,雖然我們不知道,也不必知道里面的實 現(xiàn)細節(jié),但我們只要知道他的操作方法,就可以很方便地使用它。這樣,對 別的程序員編寫的程序,我們可以很方便地拿來使用,
38、從而提高軟件的復用程度和編程的效率。比如,我們構造一個類TV,然后對外提供一些對它的操作方法, 選臺selectChannel(等。然后用這個類創(chuàng)建一個對象TV kongKai;然 后就可以這樣操作這臺電視:kongKai. selectChannel類的另一個特性,也是它的一個大好處,是繼承。繼承的概念類似 于這樣一種表達:電視是一種電器。如果我們有一個電器類,那么,我們 說,電視機類繼承了電器類。繼承有什么好處呢?設想電器類有一些屬性, 比如工作電壓,功率,有些一些方法,比如:打開pen(),關閉:close()。這時候,如果電視類繼承了電器類,電視類就自動擁有了電器類 的這些屬性和方法,
39、而不用再自己重寫一遍(當然,如果想重寫,也可以, 我們把這種技術叫做重載)。這樣做有什么好處呢?最明顯的好處就是減輕 編程的工作量。假設我們有令一個類VCD類,它也繼承了電器類,對于打 開關閉等,同樣不用重新編寫。好了,既然面向對象的方法有這么多好處,我們下面就來學習類和 對象的一些基本知識。一個例子下面是一個完整的類的例子,我們用這個例子詳細講解類的一些用 法。class Employeeprivate String name;private double salary;private int hireYear;private static String company=new String
40、(IBM);public Employee(String n, double s, int d)name = n;salary = s;hireYear = d;)public void print()System.out.println(name + “ + salary + “ + getHireYear() + “ + getCompany();return;)public void raiseSalary(double byPercent) salary *= 1 + byPercent / 100;)public void raiseSalary(int byAbsolute) sa
41、lary +=byAbsolute;)public int getHireYear() return hireYear;)public static String getCompany()return company;)為了測試這個類,我們寫了一個測試程序:package teach4;public class EmployeeTest public static void main(String口 args) Employee emp = new Employee (Tony Tester, 38000, 1990);emp.print();emp.raiseSalary(5.0D);emp
42、.print();int raise=1000;emp.raiseSalary(raise);emp.print();)類的結構class Employee 表示一個類的聲明,其中class是關鍵字, Employee是類名。在一對大括號中的內容,我們叫做類體,是這個類的實 現(xiàn)部分。前面我們說過,類把數(shù)據(jù)和在數(shù)據(jù)上的操作方法封裝起來,所以, 類體中有兩部分,一部分是數(shù)據(jù),另一部分是方法。數(shù)據(jù)部分是:private String name;private double salary;private int hireDay;分別是String類型的name,代表該員工的姓名,double類型的 s
43、alary,代表該員工的薪水;int類型的hireDay,代表該員工的雇傭年 份。private是一個關鍵字,是私有的意思,表明這些數(shù)據(jù),只能被類 里面的方法訪問,外部程序是不能直接訪問這些數(shù)據(jù)的。這正是類的一個好 處:對外隱藏數(shù)據(jù)。我們建議,始終保持數(shù)據(jù)的私用,也就是始終用private來修飾數(shù)據(jù),來是我們的程序更安全。這個類的方法部分是:public Employee(String n, double s, Day d)public void print()public void raiseSalary(double byPercent)public void raiseSalary(in
44、t byAbsolute)public int getHireYear()public static String getCompany()所謂方法,就是對數(shù)據(jù)的操作,有過編程時間的同學,可以把它 理解為函數(shù),只是這些函數(shù)是放在類里并對類的數(shù)據(jù)進行操作的。比如這個 方法:public void raiseSalary(double byPercen就是對數(shù)據(jù)523U 的操作。public是一個關鍵字,是公有的意思,表明該方法可以胸象名 方法名的方式調用。比如我們的測試程序中emp.raiseSalary(5.0D),就 是對這個方法的調用。否則,如果是衣=6,該方法就只能被類里的方法 調用,像
45、emp.raiseSalary(5.0D這種調用是非法的。void表明方法的返回類型為空,也就是什么都不返回public int getHireYear()這個方法的返回類型曷址。一般來說,返回類型這部分是 不能缺少的,即使方法什么都不返回,也要用一介id關鍵字修飾。有一 個例外:構造函數(shù)我們后面會講到。raiseSalary(double byPercen提方法名,前面我們已經說過方法 的命名規(guī)則,第一個單詞小寫,以后沒個單詞首字母大寫。這樣可以增加可 讀性,根據(jù)raiseSalary這個名字就可以知道這個方法的功能是漲工資。括 號里是參數(shù)列表,類似于我們前面學過的變量的聲明。如果有多個參數(shù)
46、,用 逗號隔開,比如 Employee(String n, double s, int d)方法的一對大括號里是方法的實現(xiàn),就是我們前面學過的語句的組 合。比如print()方法,是打印出該員工的姓名工資等信息;raiseSalary(方法是根據(jù)參數(shù),把員工工資漲相應的比例。注意,如果方 法有返回類型且不為void,那么在方法的實現(xiàn)中必須有eturn語句,返回 相應的類型。比如hireYear()方法,就有return子句。相反,如果返回 類型是void,那么不能返回任何數(shù)據(jù),但可以是一個eturn語句,后面不 帶返回值,比如print()方法里就有一個空的return語句。構造方法我們注意到
47、,有一個方法是與類名同名的,而且沒有返回類型比如這個例子中Klpublic Employee(String n, double s, int )我們把 它叫做構造方法。構造方法是做什么用的呢?構造方法是在聲明對象的時 候,自動調用的方法,其作用是為對象的數(shù)據(jù)做一些必要的初始化工作。比 如,這里的public Employee(String n, double s, int 方法,就是初 始化這個員工的姓名,工資和雇傭年份。在聲明mp對象的時候,調用的就 是構造函數(shù)。Employee emp = new Employee (Tony ”, 10000, 1990);如果沒有定義構造函,Java會
48、自動提供一個默認的構造函數(shù),把 所有成員數(shù)據(jù)初始化為默認,比如數(shù)字類型(包括整型、浮點型)將是 0,布爾類型將是false等。注意在沒有構造方法時new后面的()中不 能有數(shù)字!需要注意的是,與構造函數(shù)相對的是析構函數(shù),目的是在對象不再 使用的時候回收對象使用的內存。C+里就支持析構函數(shù)。但是,由于ava 提供自動回收垃圾的機制,所以不需要進行內存回收,所以ava沒有析 構函數(shù)。方法的重載方法的名字相同但參數(shù)的類型或個數(shù)不同,我們叫做方法的重載。類允許有相同名字的方法,比如我們這個例子中的iseSalary方 法。public void raiseSalary(double byPercent
49、) public void raiseSalary(int byAbsolute)第一個的參數(shù)是口匕卜型,表明工資上漲的百分比;第二個的參數(shù) 使int型,表明工資上漲的數(shù)額。這兩個方法參數(shù)不同。調用的時候,根據(jù) 參數(shù)的不同,決定使用哪一個方法。比如,我們的例子中, emp.raiseSalary(5.0D的參數(shù)是double型,所以將會調用第一個,工資上 漲5%,emp.raiseSalary(raise的參數(shù)raise是一個int型,所以將會調 用第二個,是工資上漲1000元。方法的重載的好處是使我們的程序處理更方便。比如,我們的例子 中,漲工資,我們提供了統(tǒng)一的aiseSalary()方法
50、,我們不用自己判斷 漲的是百分比還是絕對數(shù)額,由程序自己判斷,是程序更好用,可讀性更 強。靜態(tài)方法和靜態(tài)成員變量所謂靜態(tài)方法和靜態(tài)成員變量,是指那些麻atic關鍵字修飾的方 法或者變量,比如我們例子中的rivate static String compan就是一個 靜態(tài)成員變量,而ublic static String getCompany 和 public static void setCompany(String s都是靜態(tài)方法。靜態(tài)的意思,是指該方法或者變量在整個類中只有一份我們說, 類是用來創(chuàng)建對象的模板,就是說,我們創(chuàng)建對象的時候,每個對象都會有 類中所聲明的成員變量的一個副本。但是
51、,對于靜態(tài)成員變量,在內存中只 有一個副本,所有的對象將共享這個副本。比如我們的例子中,所有 Employee所在的公司就只有一個,所以我們沒有必要為每一個mployee的 對象都保留一個company的副本,所以我們把它聲明為靜態(tài)的成員變量。比 如我們例子中有兩個Employee類的對象力1和emp2,他們的成員變量內 存模式如下圖所示:Tom200001989100001990IBMTom200001989100001990IBM所以,只要改變了饃19丫的值,對所Employee的對象都是起作 用的。另一方面,靜態(tài)方法只能訪問靜態(tài)成員變量比如我們的例子中, setCompany()只能訪問
52、company,如果它訪問name之類的變量,編譯器將 會報錯。而且靜態(tài)方法的調用是類名.方法名的方式來調用,也可以用一 般的對象名方法名的方式來調用。實際上,我們先前用的System.out.println(方法,就是一個靜 態(tài)的方法,所以我們可以直接用類名.方法名的方式調用。而一個類里如 果有main函數(shù)都要聲明為靜態(tài)方法,因為一個程序只能有一命in函數(shù)入 口。這一講我們學習了類和對象的一些基本概念和知識,包括類的結 構,構造方法,方法的重載,靜態(tài)方法和靜態(tài)成員變量。類和對象,是面 向對象編程語言的最重要的特征,也是精髓所在。希望大家努力掌握好這部 分知識。下一講,我們繼續(xù)學習ava的繼承
53、、接口等概念。習題.類的成員變量和局部變量有什么區(qū)別?從內存考慮。.編個程序檢驗一下mblic方法和private方法有什么區(qū)別。.編一個程序檢驗靜態(tài)方法和靜態(tài)成員變量的用法。.在我們的例子中再重iraiseSalary(方法,按工齡漲工資,比 如,如果工齡為5年,那么增長1%*5 ;第六講類,對象和接口(2)6.1類的繼承繼承是類的另一個特性。繼承的意義在于:我們重復使用或更改現(xiàn) 成的類的方法,也可以加入新的數(shù)據(jù)成員以及新的方法,以滿足新環(huán)境的需 要。這種技術是所有面向對象的編程語言的一個基本特征。讓我們來看一個例子:前面我們定義了一個mployee類,這只是普 通員工,現(xiàn)在我們要定義一個經
54、理類。經理也是員工的一種,所以 Employee類中的數(shù)據(jù)和方法他也應該有;但經理又不同于普通員工,經理 有秘書,而且漲工資的時候還要加上分紅。怎么辦?我們要不要從頭開始寫 一個經理類?有了繼承的技術,我們可以在mployee類的基礎上,編寫我們的 Manager類。程序如下:package teach4;import java.util.Date;class Manager extends Employee private String secretaryName;public Manager(String n, double s, int d) super(n, s, d)必須在構造方法的
55、第一個語句。secretaryName =;)public void raiseSalary(double byPercent) / add 1/2% bonus for every year of serviceDate today = new Date(2001,1,1);double bonus = 0.5 * (today.getYear()- getHireYear();super.raiseSalary(byPercent + bonus); )public void setSecretaryName(String n) secretaryName = n; )public Str
56、ing getSecretaryName() return secretaryName;) )我們以這個例子為例,學習繼承的用法。首先,請注意這個類的頭部有些不同class Manager extends Employee ;其中,關鍵字extends是擴展的意思,表Manager類是從 Employee類繼承而來。我們把Employee叫做父類或者超類,把Manager叫 做子類或者衍生類。一般來說,子類比父類有更多的功能。Manager的構造方法中有個語句super(n, s, d), super是一個關 鍵字,意思是調用父類的方,在這里是父類,也就Employee的構造方 法;類似地,s
57、uper.raiseSalary(byPercent + bonusj表 示調用父類 Employee的raiseSalary方法。所以,如果要在子類中調用父類的方法, 使用 super。Manage的構造方法調用了Employee的構造方法。事實上,一般要求子類用 super語句調用父類的構造方法并附上恰當?shù)膮?shù)。如果沒有用per調 用,將默認地調用父類的默認構造方法,這時,如果父類沒有沒有默認的構 造方法,編譯器將報錯。在子類的構造方法中,如果葡per語句,要求 super語句在第一行。子類自動擁有父類的標志為ublic的成員變量和方法,比如:雖然 我們在Manager類中沒有定義prin
58、t()方法,但是boss.print()是合法 的,因為print()是Employee類的一個方法。如果希望改變父類中的方 法,使之適合子類,我們也可以覆蓋它。比如,因為經理的提薪方式是:除 了上漲百分比,還要加上工齡0.5的獎金,與普通員工的提薪方式就有不 同。所以,我們要覆蓋掉這個方法。實際上,只要重寫這個方法就可以了。 boss.raiseSalary(1.0),將自動調用9286類里定義的 raiseSalary() 方法,而不是Employeee里的方法。但是,如果是私有的成員變量或者方法,也就是周ivate關鍵字 修飾的那些,那么子類是不能訪問的。如果希望子類能訪問而別的類不能訪
59、 問,我們可以protected關鍵字,比如:protected String name;這 樣,name對于Manager來說是可以可見和可訪問的,而對于不Jlmployee 的子類的其他類,則是不能訪問的??偨Y一下訪問權限關鍵字:public:對全世界來說都是可見的;private:僅對類來說是可見的;protected:對所有子類和同一個包package)來說是可見的;不聲明:如果這三個關鍵字都沒有,那么默認為對整個包可見。Manager類里定義的setSecretaryNamejD getSecretaryName (方 法,都只能為Manager類的對象調用,Employee類的對象
60、是不能調用這兩 個方法的。繼承可以是幾層的。比如,我們可以以anager為父類,再衍生出 Executive類來。我們也可以從Employee類衍生出Programmer類來,它與 Manager類沒有什么關系。如果希望防止別人從自己編寫的一個類中衍生出 另一個類,可以加上關鍵字inal,比如,不希望從Manager類中再衍生出 別的類,我們可以把tanager類的聲明改為 :final class Manager extends Employee這樣可以提高程序的安全性,但可擴展性會受到影響。我們可以畫出類的繼承結構如下:造型也叫強制類型轉換?;貞浺幌?,我們在第二講的ava的基本語法 中,說
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣東省佛山市南海區(qū)中考一模英語試題(原卷版+解析版)
- 項目執(zhí)行階段成果匯報及后期規(guī)劃
- 住宅銷售代理合同
- 目前光伏發(fā)電產品主要用于哪些方面
- 基于大數(shù)據(jù)的農業(yè)現(xiàn)代化種植模式優(yōu)化方案
- 企業(yè)員工心態(tài)培訓課件
- 農產品電商市場分析
- 房地產項目銷售與成交數(shù)據(jù)表
- 停車場智能系統(tǒng)招標采購
- 公司增資項目可行性研究報告
- 電動汽車自用樁安裝承諾書
- 2023年10月自考00150金融理論與實務試題及答案含解析
- 《直流電纜敷設安裝導則》
- 幼兒園課件:《黑夜我不怕》
- 2024年-急診氣道管理共識課件
- 2024年江蘇食品藥品職業(yè)技術學院單招職業(yè)技能測試題庫及答案解析
- 活動招商合同
- 標準化法及相關知識課件
- 新視野大學英語(第四版)讀寫教程1(思政智慧版)課件 Unit 6 Winning is not everything Section B
- 2023年10月自考03706思想道德修養(yǎng)與法律基礎試題及答案含評分標準
- 工廠組織架構圖
評論
0/150
提交評論