摘要
本章中主要通過詳盡的實例,配以合理的練習,讓讀者了解、把握Java語言的基本語法。通過本章的學習,讀者應能學會:Java程序的結構、變量、方法、運算符、表達式等,以便今後編寫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 XY
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是提供安全,而不網上購買安全。