java 學習,目前看到的新手入門


  本章目標:

  本章中主要通過詳盡的實例,配以合理的練習,讓讀者瞭解、掌握Java語言的基本語法。通過本章的學習,讀者應能學會:Java程序的結構、變量、方法、運算符、表達式等,以便今後編寫Java程序時更加得心應手。

  5.1 JAVA程序結構

  傳授新知

  在上一章中,我們就已經看到了兩個使用Java語言編寫的程序實例,不僅編譯、運行了它,而且還對這兩個程序使用“逐層解析法”做了詳細的分析,相信各種應該對Java編寫的程序有了一定的瞭解。

  在本小節中,我們就更系統地說說Java程序的結構。下面我們再來看一個Java程序。

  源程序:TheTestApplet.java


import java.applet.Applet;
public class TheTestApplet extends Applet
{
String programOut;
// This section will run in browse initialization
public void init ()
{
programOut=”This is a test!”;
displayMessage();
}
/* This is displayMessage function */
public void displayMessage()
{
System.out .println(programOut);
}
}



  這是一個十分有代表性的一個程序,下圖直觀地標出了這個Java程序的結構:


  圖5-1 Java程序結構示意圖

  也就是說,通常一個Java程序可以分成五個部分:

  1."import"部分

  也就是輸入語句部分,它相當於C/C++語言中的include語句。在Java語言中,import語句是用來通知Java編譯器,在這個程序中正在使用當前類外部的其它類。

  在本程序中,我們定義的是一個叫TheTestApplet的類,它是一個小應用程序類,因此必須通知編譯器我們的類是在已定義的Applet(小應用程序類)的基礎上定義的。(也就是TheTestApplet類是Applet類的子類,Applet類是TheTestApplet類的超類。

  這一個部分應在程序的最開始部分。

  注意:

  import語句在功能上與C/C++語言中的include語句相同,但請大家注意它們之間有兩大不同:

  1) C/C++語言中用include是包含外部文件,所以include後面應是文件名,而import是輸入外部類,所以import後面應是類名;

  2) 與include不同,import語句後面應該跟上“;”,否則會出錯。

  2. "class define"部分

  也就是類定義部分。它用於給類命名(如下粗體字部分所示):


public class The TestApplet extends Applet



  另外,如果你的類是建立在另一個類的基礎上(也就是子類),那麼就必須在類定義時告訴Java編譯器。(如下粗體字部分所示):


public class TheTestApplet extends Applet



  注:extends,擴展。說明TheTestApplet是Applet類的擴展。

  一些提示:

  Applet類是所有小應用程序的基礎,也就是說,Applet是它們的超類;所有的小應用程序都是Applet類的子類。

  3. "field"部分

  這個部分也叫做域,它是用於定義類屬於類的數據(變量,具體將在下一小節說明)。這些數據是用來描述對象的狀態,方法就是對這個數據進行操作的。

  一些提示:

  請不要直接從“filed”字面上去理解,大家只要記住它就是類的數據,就是類中的變量就行了。

  4. "comment"部分

  做爲一個好的程序員,就應該知道在程序中適當地加上註釋語句是十分重要的。請你一定要養成給自己的程序加註釋的習慣,這樣有助於別人看懂你的程序,也有助於“年代久遠”之後自己閱讀自己的程序。

  一些提示:

  也許有些讀者會不以爲然,但請您一定要記住:能方便地讀懂的程序才談得上可維護性,而可維護性對於一個程序的生命是至關重要的因素之一。

  在Java中加入註釋語句很簡單,與C++相同,它支持兩種格式:

  1) 在註釋的前面加上“//”;

  2) 在註釋的前面加上“/*”,結束加上“*/”。

  注意:

  如果使用“/*”、“*/”來加註釋,請一定記住,不能嵌套使用它們!如:


/* this is comment1 /* this comment is in comment */ comment over */



  對於這個註釋語句,編譯器將理解成爲:


/* this is comment1 /* this comment is in comment */ 至此註釋結束



  comment over */成了合法的程序,這樣就會出問題了。請大家一定注意。

  5. "methods"部分

  這部分就是方法部分,用爲爲類定義它的“骨血”---方法,方法指引類進行具體的活動和操作。關於方法的更多內容,我們將在本章的後面幾個小節中詳細說明。

  自測練習

  練習一:閱讀本節中的源程序TheTestApplet.java,回答以下問題:

  1) TheTestApplet.java是java __________。

  a.應用程序 b.小應用

  2) 要運行這個程序需要如何做?(請詳細說明)

  3) 這個程序的輸出是什麼?

  練習二:修改TheTestApplet.java程序,使其滿中以下要求:

  1) 使程序輸出“Haha,I can modify java program!”。

  2) 將TheTestApplet類的名字改爲AnotherApplet類。

  練習三:閱讀以下源程序,並回答問題:


import java.applet.Applet
import java.awt.Graphics
public class HelloWorldApplet extends Applet
{
String programOut;
public void paint(Graphics g)
{
programOut=”Haha,I can modify java program!”;
g.drawString(programOut,0,50);
}
}



  1) 這段程序中有兩處錯誤,請指出:

  2) 這段程序中,屬於“field”部分的語句有:

  3) 屬於“methods”部分的語句是:

  練習答案

  練習一:

  1)a 這段程序是Java小應用程序(Java Applet)。

  2)首先,創建TheTestApplet.java文件,將程序輸入;

  接着,執行javac TheTestApplet.java,編譯它;

  再次,編輯一個HTML文件,使其包含以下內容:








  最後,使用AppletViewer或IE查看這個HTML文件。

  3) 這個程序輸出如下圖所示:


  圖5-2 程序輸出示意圖

  練習二:

  1) 只需將programOut=”This is a test!”;這一行改爲:


programOut=”Haha,I can modify java program!”;



  2) 先將public class TheTestApplet extends Applet這一行改爲:


public class AnotherApplet extends Applet



  然後將存儲這個程序的文件名改爲AnotherApplet.java就行了。

  練習三:

  1) 錯誤在於,下面兩句後面未加分號:


import java.applet.Applet
import java.awt.Graphics



  2) 屬於“field”部分的語句是:


String programOut;



  3) 屬於“methods”部分的語句是:


public void paint(Graphics g)
{
programOut=”Haha,I can modify java program!”;
g.drawString(programOut,0,50);
}



  5.2 變量

  傳授新知

  剛纔,我們系統地瞭解了Java程序的結構,現在我們一起來學習新的老概念----變量。之所以說新,是針對我們這本書來說;而它又是廣泛出現在各種程序設計語言教材中的一個術語,所以可謂之舊。

  如果有程序設計經驗的人,應該不需要我再多說,都能夠很清楚什麼叫變量。在Java語言中,對象就是由數據及對這些數據的操作組成的。

  5.2.1 什麼是變量

  變量就是這些數據的容器,在Java語言中,它也被稱爲域。我們都知道,在計算機中所有的數據都是存儲在內存中的,形象地說,變量就是在內存中預分配一個空間,這個空間裏可以根據需要存放不同的數據。下面我們通過幾張圖簡單地說明一下這個問題:

  1) 定義變量:

  定義變量,就象在內存中拿到一塊空間,然後標上自己的名字(在下圖中是A),這個名字就是變量名。


  圖5-3 定義變量示意圖

  2) 給變量賦值:

  給變量賦值,就象將一個數、或一個字符(在下圖是一個數:5),放到剛纔分配的空間中去。以後訪問A就可以得到5這個數。


  圖5-4 給變量賦值示意圖

  3) 修改變量的值

  修改變量賦值,與給變量賦值類似,只過是這個變量裏本身就存在一個值,新的一個值是取而代之。


  圖5-5 修改變量的值示意圖

  5.2.2 定義變量

  在Java語言中,使用變量之前,必須先定義變量的類型和名字。定義變量也可以稱爲“聲明變量”。在本章中的第一個程序裏,我們就看到過了一個定義變量語句:


String programOut;



  變量聲明的格式是:

  變量類型 變量名

  也就是說,String programOut語句定義了一個String型的變量,(關於變量類型,我們將在下一章中詳細說明)這個變量的名字叫做programOut。

  注意:

  請別忘了在變量聲明的後面一定要加上“;”,表示一句結束,否則將出錯。

  知道了變量聲明的格式之後,就只剩下兩個問題了:

  1. 變量名的取名規則:

  變量名是不是可以隨便取呢?不,雖然在Java語言中關於變量名的限制並不多,但也並意味着可以隨便取。

  1) 變量名可以由字母字符、數字、標點組成;

  2) 變量名必須以字母字符、“$”(美元符號)、“_”(下劃線)開頭;

  3) 變量名不能與Java語言的保留字重名;

  一些說明:

  保留字是指被Java使用掉的字母組合,由於在程序中有特殊的意義,所以不能用作變量名。如Applet就不能做爲變量名。

  注意:

  有兩個問題要特別強調一下:

  1) Java語言的變量是區分大小寫的,progarmOut與ProgramOut兩個變量名是不同的,請一定注意;

  2)以$符開始的變量是合法的,但是不鼓勵的。

  2. 應該在什麼地定義變量:

  在Java語言中,只要在同一個代碼段沒有同名的變量,就可以在程序中的任何一個地方定義變量。一個代碼塊就是兩個相對的“{”、“}”之間的部分。

  不過,做爲一個良好的編程習慣,您應該在使用變量的代碼塊的開始處定義變量。這樣利用程序的維護。這一點,當您看了“變量的作用範圍”小節就會深有體會的。

  5.2.3 爲變量賦值

  定義了變量之後,當然就要使用,也就是爲變量賦值。在Java語言中,與所有的程序設計語言一樣,提供了很簡單的手段爲變量賦值:

  變量名 = 值

  下面就是幾個爲變量賦值的例子:


String programOut;
int _weight;
char $ch;
programOut=”This is a test”;
_weight=220;
$ch=’A’;



  在Java語言中,也允許你在一個語句中完成變量的定義與賦值:

  變量類型 變量名 = 值

  這樣,上面的示例就可以改爲:


String programOut=”This is a test”;
int _weight t=220;
char $ch=’A’;



  5.2.4 變量的作用範圍

  變量的定義、賦值都比較簡單,而在變量這一概念中,有一個十分重要的知識點,也是最難理解的知識點,那就是“變量的作用範圍”。

  一個變量的“影響力”是有限的,它的“影響力”取決於這個變量在什麼位置被定義。在它的“影響力”到達的地方,程序就可訪問它;而在它“影響力”無法到達的地方,它就像不存在一樣。

  我們把變量的“影響力”稱爲作用範圍。那麼如何判斷一個變量的作用範圍呢?請你記住一句話:每個變量只在定義它的代碼塊中(包括這個代碼塊包含的代碼塊)生效。(一個代碼塊就是兩個相對的“{”、“}”之間的部分)

  一些提示:

  一個變量的作用範圍外可以有一個與它同名的變量名存在,它們雖然同名,同在一個程序,卻可以相安無事的共存。

  下面,我們通過一個實踐來體會一下變量的作用範圍。

  實例說明

  首先,我們輸入以下源程序,編譯後運行它,然後觀察輸出結果。

  源程序:VariableScope.java


import java.applet.Applet;
public class VariableScope extends Applet
{
String preString=”Good Luck! “;
public void init ()
{
printOne();
printTwo();
}
public void printOne()
{
String printaddString=”NO.1”;
System.out .println(preString+printaddString);
}
public void printTwo()
{
String printaddString=”NO.2”;
System.out .println(preString+printaddString);
}
}



  這個程序結果如下圖所示:


  圖5-6 VariableScop類執行結果

  在這個程序中,我們一共定義了三個變量:

  1) preString:它所在的代碼段是整個VariableScope類;

  2) printaddString:第一個printaddString所在的代碼段是printOne方法中;

  3) printaddString:第二個printaddString所在的代碼段是printTwo方法中;

  一些提示:

  在printOne方法與printTwo方法中都定義了一個變量printaddString,但它們並未衝突,工作得好好的。

  你記得嗎,我們曾經說過,爲了程序更好維護,應把變量定義放在塊的最前面,這樣利於大家分清這個變量所在的塊,就不容易看錯。

  自測練習

  1) 請說明下面變量名是否合法,不合法的說明理由:

  Xing ___________________________________________

  @Ming _________________________________________

   __________________________________________

  _AGE __________________________________________

  3fox ___________________________________________

  $weight _________________________________________

  2) 寫出定義一個類型的int的變量Age,並賦值9的程序段:

  如果只有一行代碼,該如何寫:

  3) 在Java語言中,變量也叫做 __________。

  a.方法 b.函數 c.狀態數據 d.域

  4) 以下關於變量作用範圍的敘述,正確的是____________。

  a. 是指變量可存數據的最大數量; b.是指變量中可存儲數據的最大範圍;

  c.變量範圍是包含這個變量定義的最近的一對大括號之間的代碼段。

  5) 本節實踐說明部分的那段程序中,有三個變量,請分別標註出它們的變量作用範圍。

  練習答案

  1) Xing:合法; @Ming:不合法,變量名不能以“@”開頭;

  :不合法,變量名不能以“<”開頭; _ AGE:合法;

  3fox:不合法,變量名不能以數字開頭; $weight:合法

  2) 使用標準的方法,應該爲:


int Age;
Age = 9;



  也可以使用一行來表示:int Age = 9;

  3) d 變量也叫做域;

  4) c 變量的作用範圍是指它能夠生效的範圍;

  5) 如下圖所示:


  圖5-7 變量作用範圍

  5.3方法

  傳授新知

  說完了變量,現在講一個“舊酒新瓶”的概念---方法。它是“面向對象”引入的術語,它與其它非面嚮對象語言的函數(function)十分接近,但又有不同。下面我們就一起來學習一下。

  5.3.1 什麼是方法

  方法是Java程序的靈魂,在Java中,方法就像C、C++、Pascal等程序設計語言裏的函數一樣,小應用程序、應用程序中的所有操作都是由方法來完成的。

  使用一個形象的比喻,變量與方法就象是構建Java程序這一偉大建築所使用的磚和瓦,是它們最終構成了Java的程序。

  方法包含兩個部分:

  1) 聲明:用來說明方法的相關信息;

  2) 體:方法的實際內容。

  5.3.2 定義一個方法

  在前面的Java程序中,我們其實已經見過方法的定義了。下面我們就以本章第一個示例程序TheTestApplet中的displayMessage方法的定義爲例,觀察一下“方法定義”的語法結構與組成成分。


  圖5-8 “方法”的結構示意圖

  在這裏,我們不討論方法體,而主要分析方法的聲明,讓大家明白如何定義的一個方法、更加明白和更解Java語言程序。

  現在我們一起來認真分析一下方法的聲明部分:


public void displayMessage()



  方法聲明的格式是:

  訪問說明符 [修飾符] 返回值類型 方法名 ([參數列表])

  注:其中用“[]”括起來的部分是可選的。

  下面,我們就逐個地做一簡單的說明:

  1.訪問說明符

  在方法的定義中,第一個部分是“訪問說明符”。顧名思義,它就是用來定義誰能夠訪問這個方法。在Java語言中提供了四種訪問說明符:

  1) public

  “public”這個單詞的意思是:公衆的、公用的。顧名思義,如果一個方法將其訪問說明符定義爲public,那麼這個方法能夠被所有的外部類訪問。

  一些說明:

  在此,外部類指的是這個方法所在類以外的類。

  2) protected

  “protected”這個單詞的意思是:受保護。顧名思義,如果一個方法將其訪問說明符定義爲protected,那麼就不是所有的外部類都能夠訪問這個方法,因爲這個方法是受保護的,只有外部類是這個方法所在類的子類才能訪問它。

  3) private

  “private”這個單詞的意思是:私人的、私有的。如果一個方法的訪問說明符選用了private的話,那麼所有的外部類都無法能夠訪問這個方法。這是最嚴格的保護。

  4) default

  這是最特殊的一種訪問說明,如果一個類與該方法所在類同屬一個包,那麼就可以訪問這個方法。

  最後,我們通過一幅圖來說明:


  圖5-9 訪問說明符示意圖

  在我們前面的例子中,dispalyMessage方法使用了public這個訪問說明符,說明它可以讓任何外部類訪問。

  2.修飾符

  修飾符在方法的定義中是可選項,用來爲方法設置一些特珠的屬性,由於它比較抽象,而且在初學Java時並不常遇到它們,所在在此我們暫時跳過。

  在前面的例子中,並沒有定義修飾符。

  3.返回值類型

  當一個方法被調用時,它可以返回一個值給該方法的調用者。我們可以通過定義方法的“返回值類型”來規定它返回的值的數據類型。這個數據類型可以是任何一個有效的Java數據類型(關於數據類型,請參見下一章),或者void。

  如果象本例中一樣,返回值類型爲void,則說明這個方法調用後不返回任何值。

  4.方法名

  就象要爲類定義類名,要爲變量定義變量名一樣,我們也需要爲方法命名。象本例中,方法名是:displayMessage。

  方法名的起名規則與變量名一樣:

  1) 方法名可以由字母字符、數字、標點組成;

  2)方法名必須以字母字符、“$”(美元符號)、“_”(下劃線)開頭;

  3)方法名不能與Java語言的保留字重名。

  有一點需要提醒您注意,爲了使你的程序更容易維護,請取一個容易通過名字猜出作用的方法名,或者在方法定義的前面加上適當的註釋。

  一些說明:

  在Java語言中,允許許多方法共用一個名字,我們將在遇到這種情況時做詳細的說明。大家現在只要有這樣的印象就可以了。

  5.參數列表

  參數列表在方法的定義中也是可選項,它的作用與函數的參數類似。您可以通過參數列表將一些數據傳遞給方法。具體的用法與功能,我們會在以後的章節中詳細說明。

  一些說明:

  對於一個方法,還有一個特殊的定義,那就是“簽名”,它是由給定方法的名字和參數組成的。如本例中的dispalyMessage方法的簽名就是:


public void displayMessage()



  其實,就是將方法體、分隔符去掉,就可以得到一個方法的“簽名”了。就象人們使用人的簽名確定一個人一樣,一個方法的簽名也就確定了一個方法。

  5.3.3方法的類型

  根據“方法”完成的工作性質,通常可以分爲三類:

  1)“轉換”型:調用這種方法,將修改內部變量的值;

  2)“訪問”型:調用這種方法,將返回內部變量的值;

  3)“效果”型:調用這種方法,通常不返回任何值,而是執行了某個動作,例如向屏幕打印一些信息。

  那麼,大家以爲剛纔我們舉的這個例子:displayMessage是哪一種類型的方法呢?對,它是“效果”型的方法,它並未修改什麼變量,而是完成“向屏幕輸出字符”這一動作。

  自測練習

  1) 方法定義中不包含 ___________ 部分。

  a. 方法名 b. 訪問說明符 c. 方法類型 d. 參數列表

  2) 在Java中,方法同名可以嗎?__________。

  a. 可以 b. 不可以

  3) 如果想讓一個方法只能夠被子類訪問,應該使用訪問說明符 ___________定義。

  a. public b. private c. default d. protected

  4) 如果想讓一個方法不能被任何外部類訪問,應使用訪問說明符 ___________定義。

  a. public b. private c. default d. protected

  5) 下面這一個方法,它是_________型的方法。


public void printOne()
{
String printaddString=”NO.1”;
System.out .println(preString+printaddString);
}



  a. 轉換型 b. 效果型 c. 訪問型

  6) 閱讀第5題的源代碼,回答以下問題:

  ① 這個方法的訪問說明符是什麼? ____________________________________

  ② 這個方法的返回值類型是什麼? ____________________________________

  ③ 這個方法的方法名是什麼?________________________________________

  ④ 這個方法是否有參數列表?________________________________________

  ⑤ 請寫出這個方法的“簽名” _______________________________________

  練習答案

  1)c 方法類型並不在方法定義時指出;

  2)a 在Java中是允許這樣的情況出現,但有一些特殊的要求;

  3)d 定義其爲ptotected,這樣就只有子類才能訪問它了;

  4)b 使用private,使這個方法成爲私有的,這樣別的類就無法訪問了;

  5)b 這個方法實現的是執行一個動作,屬於效果型的。

  6)① 訪問說明符是:public

  ② 返回值類型是:void

  ③ 方法名是:printOne

  ④ 它沒有參數列表;

  ⑤ 它的“簽名”是:public void printOne()

  5.4 運算符

  傳授新知

  運算符是用來表示某一種運算的符號。在程序設計中,我們經常要進行各種運算,從而達到改變變量的值的目的。要實現運算,就要使用運算符,在本節中,我們就一起關注一下Java語言所提供的運算符。

  5.4.1算術運算符

  顧名思義,算術運算符就是那些用來進行算術運算的符號。這類運算符是最基本、最常見的,它包括:

  運算符 說 明 示 例

  + 執行加法運算 5+5 (等於10)

  - 執行減法運算 6-2 (等於4)

  * 執行乘法運算 5*7 (等於35)

  / 執行除法運算 8/2 (等於4)

  % 執行模運算(就是求餘數) 7%2 (等於1)

  表5-1 算術運算符

  一些說明:

  %:模運算,就是求餘數。7/2=3…1,所以7%2=1。

  5.4.2賦值運算符

  賦值運算符就是用來爲變量賦值的。最基本的賦值運算符就是等號“=”。我們在變量那一個小節就已經使用過了:“變量名=值”,這裏的“=”就是賦值運算符。

  在Java語言中,還提供了一種叫算術賦值運算符:

  運算符 實例 說明

  += X += 5 等價於 X = X+5

  -= X -= 5 等價於 X = X-5

  *= X *= 5 等價於 X = X*5

  /= X /= 5 等價於 X = X/5

  %= X %= 5 等價於 X = X%5

  表5-2 賦值運算符

  5.4.3自增/減運算符

  如果對C/C++有一些瞭解的話,你一定記得++、--兩個運算符吧,它們經常出現在程序中,這兩個運算符是一元運算符。“++”就是自增運算符,而自減運算符就是“--”。

  自增運算符的作用是使變量加1,而自減運算符的作用則是使變量減1。

  也就是說:

  X ++ 等價於 X+=1、X=X+1;

  X-- 等價於 X-=1、X=X-1;

  自增/減運算符放在變量的左邊或者右邊將使得到值完全不同,完成的功能也完成不同。爲了更好地理解它,下面我們來看一個例子。

  實例說明

  1.首先,我們使用以下命令調用“寫字板”程序來編輯源程序。


c:javastudy> notepad test01.java 



  在寫字板中,輸入下面的程序代碼,然後存盤退出。

  源程序:test01.java


public class test01 
{
public static void main(String args[])
{
int x=5;
int y=x++;
int x1=5;
int y1=++x1;
System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("x1="+x1);
System.out.println("y1="+y1);
}
}



  2.編譯程序,輸入命令:


c:javastudy> javac test01.java 



  3.編譯完成後,執行這個程序了。輸入命令:


c:javastudy> java test01



  這個程序的結果如下圖所示:


  圖5-10 test01的輸出

  傳授新知

  從上面的練習,可以看出:


int x=5;
int y=x++;



  的作用是:首先令x=5,接着y=x++,x就變成了6,然而y的值是多少呢?y=x,那到底是6還是5,程序的輸出告訴我們,是5。那麼,程序段


int x1=5;
int y1=++x1;



  的作用是:首先令x1=5,接着y1= ++x1,x1就變成了6,然而y1的值是多少呢?y1=x1,那到底是6還是5,程序的輸出告訴我們,是6。

  通過比較這兩個程序,我們可以發現,它們的區別就在於++在什麼地方:變量的前面,還是變量的後面。

  如果在變量的後面,則是執行了這個語句之後,再使自己加1。

  如果在變量的前面,則是先使自己加1,然後再執行這個語句。

  5.4.4關係運算符

  我們在現實生活中經常遇到比較,而在使用Java語言進行程序設計時,也常常需要對兩個對象進行比較,例如:比較兩個對象是否相低,或者哪個對象更大些…。

  Java語言提供了 種關係運算符:

  1)“= =”:比較兩個對象是否相等;

  例如:a = = b

  在這個表達式中,如果a等於b的話,表達式的值爲“真”,否則爲“假”。

  2)“>”:大於

  例如:a>b

  在這個表達式中,如果a大於b的話,表達式的值爲“真”,否則爲“假”。

  3)“<”:小於

  例如:a 

  在這個表達式中,如果a小於b的話,表達式的值爲“真”,否則爲“假”。

  4)“>=”:大於等於

  例如:a>=b

  在這個表達式中,如果a大於或者等於b的話,表達式的值爲“真”,否則爲“假”。

  5)“<=”:小於等於

  例如:a<=b

  在這個表達式中,如果a小於或者等於b的話,表達式的值爲“真”,否則爲“假”。

  5.4.5邏輯運算符

  邏輯運算符又稱爲布爾運算符,是用來處理一些邏輯關係的運算符,它最經常應用於流程控制(關於流程控制的內容,我們將在第7章詳細說明)。在Java語言中提供了四種邏輯運算符:

  1) 與運算符:“&&”

  2) 或運算符:“||”

  3) 非運算符:“!”

  4) 異或運算符:“^”

  在邏輯運算世界中,只有兩種值:真(true)、假(false)。所以不管是參與運算的變量,還是運算的結果都只有這兩種可能的取值。

  下面,我們就逐一對它們做一簡單的說明。

  1.與運算符“&&”

  與運算符,可以理解爲“而且”。例如:(yuwen > 85)&&(shuxue > 90)就可以理解成爲語文成績(yuwen)大於85分而且數學成績(shuxue)大於90分。這樣只要以下兩個命題之一是假的,整句話說明的事情也就是假的。

  1) 語文成績大於85分;

  2) 數學成績大於90分;

  如果我們使用X來代表第一個命題,Y來代表第二個命題,我們就可以得到下面這一張與運算表:

  X Y X&&Y

  true(真) true(真) true(真)

  true(真) false(假) false(假)

  false(假) true(真) false(假)

  false(假) false(假) false(假)

  表5-3 與運算表

  一些提示:

  我們舉個例子來說明,假如一個學生它的成績是雙科88,那麼“語文成績大於85”就是真的,而“數學成績大於90”就是假的。這時如果我們說他“語文成績大於85,而且數學成績大於90”就是假的。

  2.或運算符“||”

  或運算符,則可以理解爲“或者”。例如:(yuwen > 85)||(shuxue > 90)就可以理解成爲語文成績(yuwen)大於85分或者數學成績(shuxue)大於90分。這樣只要以下兩個命題之一是真的,整句話說明的事情也就是真的。

  1) 語文成績大於85分;

  2) 數學成績大於90分;

  如果我們使用X來代表第一個命題,Y來代表第二個命題,我們就可以得到下面這一張與運算表:

  X Y X||Y

  true(真) true(真) true(真)

  true(真) false(假) true(真)

  false(假) true(真) true(真)

  false(假) false(假) false(假)

  表5-4 或運算表

  一些提示:

  我們再用上面那個例子來說明,如果我們說“語文成績大於85,或者數學成績大於90”,則這句話就是真的。

  3.非運算符“!”

  非運算符,可以理解爲“不是”、“非”。例如:!(yuwen > 85)就可以理解爲語文成績不大於85分。這時,如果語文成績大於85,則!(yuwen > 85)就是假的;如果語文成績不大於85分,!(yuwen > 85)就是真的。

  我們可以通過一張表來說明:

  X !X

  true(真) false(假)

  false(假) true(真)

  表5-5 非運算表

  4.異或運算符“^”

  最後一種邏輯運算符在現實生活中不常見,大家掌握起來就需要更費力一些了。這就是“異或”運算。

  我們可以通過下表來理解這個邏輯運算:

  X Y X^Y

  true(真) true(真) false(假)

  true(真) false(假) true(真)

  false(假) true(真) true(真)

  false(假) false(假) false(假)

  表5-6 或運算表

  從這張表,我們可以看出,異或運算的結果與或運算極爲類似,只有當X與Y都是真(true)值時不同。我們可以通過一句話來記住它:“兩個值不同,值爲真;兩個值相同,值爲假”。(這不,因此我們稱之爲“異”。異者,不同也,也就是說兩個值不能相同)

  自測練習

  1) Java語言中提供了_______個算術運算符。

  a.6個 b.5個 c.4個

  2) 70%20=________。

  a.3.5 b.50 c.10

  3) 閱讀這個程序,寫出這個程序的輸出:


public class lianxi01 
{
public static void main(String args[])
{
int x=5;
int y=--x;
System.out.println("x="+x);
System.out.println("y="+y);
}
}



  4) 在Java語言中,或運算符是____________。

  a.| b.|| c.& d.!!

  5) true ^ true =___________

  a.true b.false

  6) 閱讀以下程序,寫出這個程序的輸出,然後再運行一下這個程序檢驗一下是否正確:


public class lianxi02 
{
public static void main(String args[])
{
int x=5;
System.out.println(x==5);
System.out.println(x>5);
System.out.println(x>=5);
System.out.println(x<5);
System.out.println(x<=5);
}
}



  練習答案

  1)b Java語言提供了“+”、“-”、“*”、“/”、“%”5個算術運算符;

  2)c “%”是模運算符,也就求70/20的餘數,因爲70/20=3…10,餘數爲10;

  3)該程序的輸出如下圖所示:


  圖5-11 lianxi01的輸出

  在這個程序中,首先將變量x賦值爲5,然後執行y=--x時,先將x做一個自減運算(因爲自減運算符--位於變量的前面,所以在賦值前先自減),再賦值給y,這樣x就變成了4,最後將4賦給y。

  4)b 在Java語言,或運算符是||。

  5)b 異或運算是最奇怪的一種邏輯運算,只有兩個值不相同時才返回真值。而在本題中,做異或運算的兩個值都是true,所以返回假值。

  6)該程序的輸出如下圖所示:


  圖5-12 lianxi02程序的輸出

  我們一起來看一下,由於x=5,所以:

  1) 表達式x= =5:因爲x是等於5,所以表達式的值爲true;

  2) 表達式x>5:因爲x等於5,而不是大於5,所以表達式的值爲false;

  3) 表達式x>=5:因爲x等於5,也就大於等於5,所以表達式的值爲true;

  4) 表達式x<5:因爲x等於5,而不是小於5,所以表達式的值爲false;

  5) 表達式x<=5:因爲x等於5,也就小於等於5,所以表達式的值爲true;

  5.5 表達式

  傳授新知

  表達式是運算符與操作數的結合,它是Java語言重要的組成部分。其實在前面的章節中,我們就看到過了表達式,例如:

  y=--x 

  這是一個極爲簡單的表達式。其實一個表達式是可以由多個運算符構成的,它就象我們在兒時就學到過的“四則計算”一樣。例如:

  y=x-z*5/2

  我們需要通過表達式來執行各種複雜的計算及其它操作,所以我們必須搞懂如何計算表達式。其實掌握Java語言中表達式的計算方法並不難,大家只要藉助當年對付“四則運算”的經驗就可以輕鬆進行。

  大家應該還能記得如何計算一個四則運算題吧!就如:

  3*(2+6/3)

  在這個例子中,我們最先計算括號中的表達式2+6/3,而在這個表達式中,應先計算除法,再計算加法,因此得到4,最後,我們再計算3*4,得到12。這種計算思路可以歸納成兩點:

  1) 有括號先算括號內的,有乘除先乘除,最後算加減;

  2) 存在多個加減,或多個乘除,則從左到右進行;

  :-P,好象在複習小學知識了!其實這種思路可以歸納成一句嚴謹的話:

  按從左到右進行計算,先算優先級高的,再算優先級低的計算。

  在以前的數學中,運算符的優先級可分爲三級:

  1) 最高級:( )

  2) 第二級:*、/;

  3) 最低級:+、-

  而在Java語言中,運算符可就多了,那其實也一樣,根據其優先級來逐步計算,直到運算結束。以下就是各種運算符的優先級表:

  描述 運算符

  最高優先級 [ ] ( )

  一元運算符 ++ -- !

  算術運算符1 * / %

  算術運算符2 + /

  關係運算符 < <= >= >

  等於運算符 = = !=

  邏輯運算符 && ´ ´ ^

  賦值運算符 = += -= *= /= %=

  表5-7 Java運算符優先級表

  注意:

  在這裏僅列出了最常見的運算符,還不包括所有的運算符。關於一些特殊的運算符,我們會在遇到時再作說明。 

  5.6 包

  傳授新知

  在Java語言中,包的使用是它的一大特色。使用Java提供的大量包,程序員可以輕鬆、方便地編寫出複雜的、功能強大的應用程序。這些包就是Java應用程序編程界面,即Java API。它是爲用戶開發自己的類、小應用程序和應用程序而設計。

  5.6.1 Java核心API

  在Java語言,最基本的包就是Java語言核心API,它包括:


java.lang
java.lang.reflect
java.bean
java.rmi、java.rmi.registry和java.rmi.server
java.security、java.security.acl和java.security.interfaces
java.io
java.util
java.util.zip
java.net
java.awt
java.awt.image
java.awt.peer
java.awt.datatransfer
java.awt.event
java.applet
java.sql
java.text



  下面,我們就對它們做一個簡單的描述,以幫助大家能夠更好的理解它們,方便大家在需要時使用。

  1)java.lang

  它是Java語言中最核心的包,它提供了最基本的數據類型,編程框架。

  2)java.io

  io,就是input/output的縮寫,它是Java語言的標準輸入/輸出庫。

  3)java.util

  它是由幾個基本的實用類組成的,如日期類。

  4)java.net

  這是使Java具備網絡處理功能的類,使用這個包就可輕鬆地創建、連接套接字(socket)、可以編寫出自己的telnet、FTP等程序。

  5)java.awt.*

  代表java.awt以及java.awt.image等其它包。這些包就是通常說的Java Abstract Window Toolkit(抽象窗口工具包,簡稱AWT)。它是由一些能夠爲用戶的小應用程序創建豐富、有吸引力的、實用的界面資源組成的。它是使用Java開發圖形界面程序時必不可少的一個包。使用它就可創建出美麗的圖形世界。

  6)java.applet

  大家應該還能夠記得applet是什麼吧?對,小應用程序。這個Java API中最小的包是編寫Java小應用程序的基礎。大家應該注意到,在我們前面的所有關於小應用程序的例子中,都包含了這樣一句:


import java.applet



  過去是這樣,今後也是這樣。要寫Applet程序就要使用它!

  7)java.sql

  在這個包中,包含了JDBC(Java DataBase Connect,Java數據庫連接),使用它可以開發出數據庫應用程序。

  5.6.2 JDK 1.2新增API

  JDK 1.2版的發佈,大大提高了Java語言的功能,它增加了許多包來完成,它們包括:

  1)Java Enterprise API

  在這個API中,提供對企業數據庫的連接的支持。使用這個API可以構造出分佈式的客戶機/服務器方式的Java小應用程序和應用程序。這些程序可以運行在企業內部任何操作和硬件平臺之上。

  2)Java Commerce API

  這個API主要是爲網上購買和財政管理提供安全保障。

  3)Java Server API

  它是一個可擴展框架,它使用戶能夠開發互聯網上的和企業網上的服務器端應用 程序。它提供了對服務器和管理信息資源統一和一致的訪問。

  4)Java Media API

  它使得開發網頁上的交互媒體成爲現實。

  5)Java Security API

  它提供了一個保證小應用程序和應用程序安全功能的框架。

  自測練習

  1) Java API中最基本的包是:__________。

  a. Java 核心API b.Java基本API c. Java Server API

  2) 寫一個小應用程序必須使用___________包。

  a. java.awt b.java.applet c.java.application

  3) 要使用Java語言開發socket程序,需要使用___________包。

  a.java.net b.java.io c.java.awt

  4) 而提供了圖形界面開發支持的,是__________包。

  a.java.io b.java.awt c.java.applet

  5) 如果要使用JDBC,應該包含____________包。

  a.java.io b.java.sql c.java.applet

  6) 在JDK1.1中包含Java Server API嗎?___________。

  a.是的 b.不包含

  7) Java Enterprise API最大的特點是支持了_____________程序的開發。

  a.企業應用 b.集中式 c.分佈式

  8) 在JDK1.2版中,提供了一個同步的播放聲音、視頻的媒體播放器,你認爲它屬於___________包。

  a.Java Enterprise API b.Java Commerce API c.Java Media API

  9) 以下_____________包是爲網上購買提供安全保證的。

  a.Java Enterprise API b.Java Commerce API c.Java Security API

  練習答案

  1)a Java語言最基本的API稱爲核心API。

  2)b 在java.applet包中包含了所有開發小應用程序所需要的類。

  3)a 在java.net包中包含了對套接字程序的支持。

  4)b 在java.awt包中提供了一套抽象窗口工具包,以供開發GUI之用。

  5)b 所有與數據庫操作有關的類,包含在java.sql中。

  6)b Java Enterprise API是在JDK1.2中發佈的。

  7)c 它支持的是分佈式C/S結構的程序開發。

  8)c 提供這方面的,當然是Java Media API。

  9)b Java Security API是提供安全,而不網上購買安全。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章