程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> Java入門(5) JAVA語言基本語法

Java入門(5) JAVA語言基本語法

編輯:JAVA編程入門知識
  摘要
  
  本章中主要通過詳盡的實例,配以合理的練習,讓讀者了解、把握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是提供安全,而不網上購買安全。
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved