第1章 java語言基礎
本章內(nèi)容(一般掌握3%~5%)
本章重點:應用程序和小應用程序的基礎知識,程序的開發(fā)過程,基本數(shù)據(jù)類型。 本章難點:程序的開發(fā)過程,了解一種Java程序的開發(fā)環(huán)境。
1.1 Java 語言特點
Java 語言最初的應用對象是消費性電子產(chǎn)品(即PDA 、電子游戲機、電視機頂盒之類的產(chǎn)品)。為了進入消費性電子產(chǎn)品市場,SUN公司專門成立了一個項目開發(fā)小組,目標是設計嵌在消費性電子產(chǎn)品的小型分布式系統(tǒng)軟件,能夠適用于異構(gòu)網(wǎng)絡、多主機體系結(jié)構(gòu),能實現(xiàn)信息安全傳遞。項目小組的最初設想是用C++語言完成這個目標。由于C++語言的復雜性和不安全性,不能勝任這項工作。為此,項目小組開發(fā)一個取名為Oak的語言。 Oak語言在消費性電子產(chǎn)品市場上沒有獲得青睞。但在當時,Internet開始流行,人們發(fā)明了一種網(wǎng)絡傳輸協(xié)議,這種協(xié)議可以在文本中插入圖片和聲音,能使單調(diào)的Internet世界變得圖文并茂。雖然Web頁面擁用圖文和聲音,但仍然是靜態(tài)的,不具備交互性。要讓頁面擁有動態(tài)畫面,并能交互,需要在Web頁面中嵌入一會段程序。由于在Internet上運行的數(shù)以千計不同類的計算機,這就要求編寫這種程序的語言必須具有平臺無關性,并要求語言必須簡練,支撐環(huán)境要小,而安全性卻很高。Oak語言恰好能夠滿足這些要求。
將Oak 語言正式應用于Internet還需要進一步完善,還要求有一個支持它的Web瀏覽器。能用于編寫瀏覽器,并獲得瀏覽器扶持的新版本Oak語言取名Java。Internet得到Java語言的支持,可以實現(xiàn)真正的交互,人們使用瀏覽器能“漫游”豐富多彩的Internet世界。
Java語言是適用于分布式計算環(huán)境的面向?qū)ο缶幊陶Z言,它雖類似C和C++,但比C++簡單,忽略了許多為提高計算效率,初學者較難掌握的程序語言特性。
Java語言主要有以下特點:
1. 強類型
Java語言是一種強類型語言,強類型能約束程序員必須遵守更多的編程規(guī)定,也能讓編譯器檢測出程序中盡可能多的錯誤。
2. 編譯和解釋
Java語言是一種高級編程語言,用Java語言編寫的源程序在計算機上運行需經(jīng)過編譯和解釋執(zhí)行兩個嚴格區(qū)分的階段。Java語言的編譯程序先將Java源程序翻譯成機器無關的字節(jié)碼(bytecode),不是通常的編譯程序?qū)⒃闯绦蚍g成計算機的機器代碼。運行時,Java的運行系統(tǒng)和鏈接需要執(zhí)行的類,并作必要的優(yōu)化后,解釋執(zhí)行字節(jié)碼程序。
3. 自動無用內(nèi)存回收功能
Java語言具有自動無用內(nèi)存回收功能,程序可以按需使用內(nèi)存,但不需要對無用內(nèi)存顯式地撤銷分配。系統(tǒng)有一個垃圾收集器(garbage collector),自動收集程序不再使用的內(nèi)存。這樣,能避免顯式的撤銷分配所引起的安全問題。Java語言不再含有任何不安全的語言成分。例如,沒有指針,數(shù)組元素都要檢查下標是否越界。
4. 面向?qū)ο?/span>
面向?qū)ο笫浅绦騿T編寫大型程序、有效控制程序復雜性的重要手段。Java語言在面向?qū)ο蠓矫妫菴++更“純”,它的所有數(shù)據(jù)類型,包括布爾類型、整形、字符型等,都有相應的類,程序可完全基于對象編寫。
面向?qū)ο笳Z言主要有封裝性、繼承性和多態(tài)性三個特點。封裝就是將實現(xiàn)細節(jié)隱藏起來,只給出如何使用的信息。數(shù)據(jù)及數(shù)據(jù)上的操作用類封裝,對象是類的實例,外界使用對象中的數(shù)據(jù)及可用的操作受到一定的限制。繼承體現(xiàn)眾多的一種層次對象的特性,下一層的類可從上一層的類繼承定義,從上一層類派生的類的對象能繼承上一層對象的特性,同時可以改變和擴充一些特性,以適應其自身的特點。多態(tài)性的意義主要體現(xiàn)在邏輯上相同的不同層次上的操作,使用相同的操作名,根據(jù)具體對象,能自動選擇對應的操作。Java語言很實用地實現(xiàn)了這三種特性。 5. 與平臺無關
與平臺無關是對程序可移植性最直接最有效的支持。Java語言的設計者在設計時重點考慮了Java程序的可移植性,采用多種機制來保證可移植性,其中最主要的是定義了一種虛擬機(virtual machine),以及虛擬機使用的java字節(jié)碼。在任何平臺上,Java源程序被Java編譯器編譯成虛擬機能夠識別的字節(jié)碼。這樣,只要有Java虛擬機的
型,在任何平臺上,同上種數(shù)據(jù)類型是一致的。例如,用int標識32位二進制位(bit)整型數(shù)據(jù),那么無論在哪一臺計算機上,Java的int數(shù)據(jù)都是32位整數(shù)。相反,C語言會隨著硬軟件平臺的改變,用int標識的整數(shù)位數(shù)也可能不全相同。
Java語言提高可移植性的代價是降低程序的執(zhí)行效率。出于java語言也是一種解釋執(zhí)行的語言,Java程序的執(zhí)行速度與C程序的執(zhí)行速度有較大的差別。不過,為了盡量彌補執(zhí)行效率低的缺陷,java的字節(jié)碼在設計上非常接近現(xiàn)代計算機的機器碼,這有助于提高解釋執(zhí)行的速度。 6. 安全性
Java是在網(wǎng)絡環(huán)境中使用的編程語言,必須考慮安全性問題,主要有以下兩個方面:
設計的安全防范:Java語言沒有指針,避免程序因為指針使用不當,訪問不應該訪問的內(nèi)存空間;提供數(shù)組元素上標檢測機制,禁止程序越界訪問內(nèi)存;提供內(nèi)存自動回收機制,避免程序遺漏或重復釋放內(nèi)存。
運行安全檢查:為了防止字節(jié)碼程序可能被非法改動,解釋執(zhí)行前,先對字節(jié)碼程序作檢查,防止網(wǎng)絡“黑客”對字節(jié)碼程序已作了惡意改動,達到破壞系統(tǒng)的目的。最后,瀏覽器限制下載的小應用程序不允許訪問本地文件,避免小應用程序破壞本地文件。 7. 分布式計算
Java語言支持客戶機/服務器計算模式。Java程序能利用URL對象,能訪問網(wǎng)絡上的對象,如同訪問本地的文件一樣,實現(xiàn)數(shù)據(jù)分布。另外,Java的客戶機/服務器模式也可以把計算從服務器分散到客戶機端,實現(xiàn)操作分布。 8. 多線程
線程是比進程更小的一種可并發(fā)執(zhí)行的單位,每個進程都有自己獨立的內(nèi)存空間和其他資源,當進程切換時需要進行數(shù)據(jù)和資源的保護與恢復。若干協(xié)同工作的線程可以共享內(nèi)存空間和資源,線程切換不需要數(shù)據(jù)的保護與恢復。
Java的運行環(huán)境采用多線程實現(xiàn),可以利用系統(tǒng)的空閑時間執(zhí)行諸如內(nèi)存回收等操作;Java語言提供語言級多線程支持,用Java語言能直接編寫多線程程序。
1.2 Java應用程序和小應用程序
Java程序可以是獨立的應用程序和能在瀏覽器上執(zhí)行的小應用程序(Applet)。兩種Java程序都由一個或多個擴展名為“.class”的文件組成。都需要java虛擬機(JVM)載入并翻譯。這兩種程序的主要區(qū)別是:小應用程序只能在與Java兼容的容器中運行,可以嵌入在HTML網(wǎng)頁內(nèi),在網(wǎng)絡上發(fā)布,當網(wǎng)頁被瀏覽時,在瀏覽器中運行。小應程序的運行還要受到嚴格的安全限制,例如,它不能訪問用計算機上的文件。Java應用程序沒有這些限制,也不支持網(wǎng)頁嵌入和下載運行。 小應用程序和應用程序在代碼編寫上也有很大差異。一個小應用程序必須定義成一個Applet類的子類,應用程序可以是Applet類的子類,也可以不是。應用程序必須在一個類中定義一個main()方法,該方法代表應用程序的入口。而小應用程序不必定義main()方法,它的執(zhí)行由Applet類中定義的多個方法控制。 [例 1.1] 一個非常簡單的應用程序。
public class Example1_1{//這是我的第一個應用程序 public static void main(String []args){ System.Out.println(“你好!歡迎你學習Java語言。”);
} }
上述java程序的執(zhí)行將輸出以下字樣: 你好!歡迎你學習Java語言。
一個應用程序由若干個類組成,上面這個應用程序只有一個類,類的名字是Example1_1。public是java語言的關鍵字,表示聲明的類Example1_1是公用的。class也是關鍵字,用來聲明類。最外層的一對花括號以及括號內(nèi)的內(nèi)容叫做類體。public static void main(String []args)是類Example1_1的一個方法。一個應用程序必須只有一個類含有main()方法,這個類是應用程序的主類。public static void 是對main()方法的說明。應用程序的main()方法必須被說明成public static void。表示main()方法的訪問權(quán)限是公有的,它是一個類方法,沒有結(jié)果返回,參見第3章。String []args或String args[],聲明main()方法的參數(shù)是一個字符串數(shù)組,參見第4章。
Java源程序命名受嚴格的限制。Java源文件的擴展名必須是“.java”如果源文件中有多個類,那么只能有一個public類;如果源文件中有public類,那么源文件的名字必須與這個類的名字完全相同。例如,例1.1應用程序的源
[例1.2]一個簡單的小應用程序,用一同顏色顯示兩行文字: 歡迎你學習Java語言。
只要認真學習,多上機實習,一定能學好Java語言。 import java.applet.*; import java.awt.*;
public class Example1_2 extends Applet{ public void paint(Graphics g){ g.setColor(Color.blue);//設置顯示的顏色為blue g.drawString(“歡迎你學Java語言”,30,20); g.setColor(Color.red);//設置顯示的顏色為red g.drawString(“只要認真學習,多上機實習,一定能學好Java語言。”,30,50); } }
一個小應用程序也出若干個類組成,其中必須有一個類,它繼承系統(tǒng)提供的Applet類,這個類是小應用程序的主類。主類必須是public的,源文件名必須與小應用程序的主類名相同。上述程序的源文件名必須是Example1_2.java。小應用程序的結(jié)構(gòu)參見3.5節(jié)。
在結(jié)束這一節(jié)之前,先討論一下程序中經(jīng)常出現(xiàn)的注釋。注釋是程序中的說明文字,用于幫助閱讀程序,它不是語句,不會影響程序的執(zhí)行效率。Java語言的注釋有三種形式:
行注釋 // 變量r是賀的半徑
塊注釋 /* 以下程序段是采用冒泡排序?qū)?shù)組元素實現(xiàn)從小到大排序 */ 文檔注釋 /* *類Student是學生類*/
行注釋用于簡短地說明前面代碼的意義或功能。注釋內(nèi)容至行末結(jié)束,不能跨行。 例如:
int fontsize =30 ;//標題字體大小
塊注釋是多行注釋,用于說明下面程序段的算法、功能等,塊注釋不可嵌套使用。 文檔注釋能被實用程序javadoc接受,它能自動生成程序的HTML文檔。
1.3 Java程序的開發(fā)過程
Java程序的開發(fā)過程如圖1.1所示。對于Java應用程序,先編寫Java源程序,源程序經(jīng)Java編譯器編譯后產(chǎn)生碼文件,最后由Java解釋器解釋執(zhí)行字節(jié)碼文件。對于小應用程序,先編寫源程序,然后經(jīng)Java編譯器編譯后,產(chǎn)生字節(jié)碼文件,最后由Web瀏覽器解釋執(zhí)行字節(jié)碼文件。
以下以使用SUN公司提供的Java JDK(java Developer’s Kit)為例,并假設Java JDK 安裝在d:\java目錄下,則在該目錄下還應包含以下幾個文件和子目錄:
(1) 子目錄 d:\java\bin,這個子目錄是Java JDK的核心,其中最主要的可執(zhí)行文件有:
1) javac---編譯器 2) java---解釋器 3) jdb---調(diào)試器
4) appletviewer---java Applet解釋器
(2) 子目錄d:\java\lib,這個子目錄存儲的是函數(shù)庫。
編寫源程序時,使用一個文字編輯器,輸入源程序文件,并保存。鍵入編譯命令,使用Java編譯器編譯Java源程序。鍵入解釋命令,通過解釋器解釋執(zhí)行Java應用程序的字節(jié)碼文件。對于小應用程序需通過支持Java的瀏覽器解釋執(zhí)行字節(jié)碼文件。 設輸入前面所述Java程序,源文件名為Example1_1.java,保存在D:\java目錄下。 Java編譯器的使用格式是: javac [選項] 源文件
例如,可用以下命令編譯以上輸入的Java應用程序: javac d:\java\Example1_1.java
編譯時,可能編譯器指定選項,java JDK 編譯器的選項參見表1-1。
選項
-classpath<路徑> -d<目錄> -g -ng -nowarn -o -verbose
引用類的路徑表
說明
編譯后類文件存放的目錄 生成調(diào)試信息表 不生成調(diào)試信息表 關閉編譯器警告功能 優(yōu)化類文件
顯示編譯過程中的詳細信息
Java解釋器java.exe用來解釋執(zhí)行Java類文件,解釋器的使用格式為: java [選項]類名[參數(shù)]
其中,類名指定的類必須是main()方法的,即是一個Java應用程序。
對于使用開發(fā)環(huán)境情況來說,編輯源程序、編譯、執(zhí)行和調(diào)試直接使用環(huán)境提供的工具,使開發(fā)程序變得非常簡單。例如,使用Eclipse開發(fā)環(huán)境。在eclipse環(huán)境下開發(fā)Java程序的方法請參見附錄F。
1.4 標識符和關鍵字
如同別的程序語言一樣,Java語言也有基本符號,由基本符號按一定的構(gòu)詞規(guī)則構(gòu)成標識符等基本詞匯,再由基本詞匯和關鍵字按語言的句法構(gòu)成Java程序。 1. 字符集
Java語言使用Unicode字符集,共有65535個字符,包括: (1) 數(shù)字符 10個(0~9)。
(2) 英文字母大、小寫字符各26個(A~Z和a~z)。 (3) 下劃線字符,美元符號。
(4) 文字字符,(漢字,日文片假名、平假名和朝鮮文字等)。 (5) 其他用于構(gòu)成特殊符號的字符集。
2. 標識符
標識符用于命名程序?qū)ο?。例如,類名、變量名、方法名等。Java語言的標識符可以按以下規(guī)則任意命名: (1) 由字母(包括英文字母、下劃線字符、美元字符、文字字符)和數(shù)字字符組成。 (2) 限定標識符的第一個字符不能是數(shù)字符。
例如,下列4個字符串都可以個為標識符: Boy_$、$63Girl、顏色、小伙子 而以下4個字符不能作為標識符: 46A、%Val、c+2、Hello!
前兩是因為首字符不合理,后兩個含有不允許在標識符中出現(xiàn)的字符。 除了按上述規(guī)則命名的習慣約定:
一般變量名、方法名用小寫英文字母開頭;文字和常數(shù)用大寫字母命名;類名首字母用大寫字母;包名全部用小寫字母。命名習慣是一種公共約定,Java語言的語法并沒有這種限制,但是培養(yǎng)良好的編程習慣有利于程序維護和協(xié)作開發(fā)。
3. 關鍵字
為了表示程序結(jié)構(gòu)、定義和修飾等,Java語言引入一組關鍵字,參見附錄A。關鍵字是上些英文單詞,在語言中,關鍵字已經(jīng)被賦予特定的意義,不能用這些關鍵字作為標識符命名程序?qū)ο蟆T贘ava語言中,關鍵字的作用有以下多個方面:
描述程序結(jié)構(gòu)、聲明類、定義類的成員、簡單數(shù)據(jù)類型、值和變量、異常情況處理、實例(對象)的創(chuàng)建和檢驗、流程控制等。
Java語言中所有關鍵字均由小寫字母組成。每個關鍵字在程序中出現(xiàn)有特定位置和使用方法的要求。關鍵字不可以用做變量、方法、類或標號的標識符(名字)。
1.5 基本數(shù)據(jù)類型
為基本數(shù)據(jù)類型和非基本數(shù)據(jù)類型兩大類。
基本數(shù)據(jù)類型也稱為原始數(shù)據(jù)類型,是系統(tǒng)預先規(guī)定的一些常用類型。它們是:整數(shù)類型、浮點數(shù)(實數(shù))類型、字符(文字)類型、邏輯類型(布爾型)。
非基本數(shù)據(jù)類型也稱為復合數(shù)據(jù)類型,是由基本類型組合的新類型。非基本數(shù)據(jù)類型分為:數(shù)組、字符串、類、接口。
本小節(jié)只介紹基本數(shù)據(jù)類型,非基本數(shù)據(jù)類型將在以后章節(jié)中分別介紹。 1.5.1 邏輯類型
邏輯類型用關鍵字boolean標識,所以也稱布爾型。邏輯類型只有真和假兩個值,true 表示真,false 表示假。以下是邏輯變量定義的例子: boolean b; boolean bool;
boolean flg1,flg2, 美麗;//一次定義多個變量
boolean b1 = true,b2= false,丑=false;//定義時可以賦初值
邏輯變量用于記錄某種條件成立與否,也用語句中作條件判斷。 1.5.2 字符類型 字符類型用關鍵字char 標識。字符型數(shù)據(jù)是一個字符,內(nèi)部表示是字符的Unicode代碼,共用65535個不同的字符。在Java程序中,字符常量有普通字符和轉(zhuǎn)義字符常兩種。
用單引號括住一個字符,表示一個普通字符常量。例如,’a’、’B’、’$’、’國’。 對于被語言用作特定意義的字符,或者不能顯式顯示的字符,需用轉(zhuǎn)義字符標記它們。
例如,換行符用\n標記,水平制表符用\t標記。常用的轉(zhuǎn)義字符的標記方法見表1-2。其中,\nnn是用八進制代碼表示的字符,\unnnn是用十六進制代碼表示的字符。例如:\141表示字母a,\u0061也表示字母a.以下是字符變量定義的例子:
char ch; char ch1,ch2,漂亮;
char ch3 = ‘A’,ch4 = ‘家’,丑=’假’;//定義時可以賦給初值 表1-2轉(zhuǎn)義字符及其含義 轉(zhuǎn)義符 \b \n \r \t \v \f \\ \’ \” \nnn \unnnn
含義
退格(Backspace鍵)
換行符,光標位置移到下一行首 回車符,光標位置移到當前行首 水平制表符(Tab鍵) 豎向退格符 走紙換頁 反斜杠符\ 單引號符’ 雙引號符”
n為8進制數(shù)字,用八進制數(shù)據(jù)表示字符的代碼 n為16進制數(shù)字,用16進制數(shù)據(jù)表示字符的代碼
1.5.3 整數(shù)類型 整數(shù)是不帶小數(shù)點和指數(shù)的數(shù)值數(shù)據(jù)。由于計算機只能表示整數(shù)的一個子集,表達更大范圍內(nèi)的整數(shù)需要更多的二進制位,Java語言將整型數(shù)據(jù)按數(shù)值范圍大水不同分成四種:
3131
(1) 基本型:用int標識。4個字節(jié),32位,取值范圍是-2~2-1,即-2147483648~2147483647。
77
(2) 字節(jié)型:用byte標識。1個字節(jié),8位,取值范圍是-2~2-1,即-128~127。
1616
(3) 短整型:用short標識。2個字節(jié),16位,取值范圍是-2~2-1,即-23768~32767
6464
(4) 長整型:用long標識。8個字節(jié),64位,取值范圍是-2~2-1,即-923372036854775808L~923372036854775807L
每種整數(shù)類型處理不同范圍的整數(shù)值,并且都是帶符號的。
整型常量有十進制、八進制和十六進制三種寫法。如下 面的示例所示:
0開頭),0x3ABC(十六進制,以 0x開頭,后隨數(shù)字符和英文A到或5333l(以字母L或l結(jié)尾是長整數(shù))。
long z,sum;int w =12,len =-1230;long big = 9876L;//定義同時可以賦初值。 1.5.4 浮點數(shù)類型 浮點數(shù)類型也稱實型,浮點數(shù)是帶小數(shù)點或指數(shù)的數(shù)值數(shù)據(jù)。 Java語言的浮點數(shù)有單精度和雙精度兩種。
1. 單精度型
3838
單精度型 用float標識,占4個字節(jié),32位,取值-10~10。float之后加上字母F或f.例如:23.54f,12389.987F。 2. 雙精度型
308308
double型常是的書寫的方法有兩種:雙精度型 用double標識,占8個字節(jié),64位,取值-10~10。
一種是直接寫一個實數(shù),或在實數(shù)后面加上字母D或d.例如:123.5439、123.5439D, 是科學計數(shù)法,用10的方冪表示(用字符e或E表示冪底10)。例如:123.24e40(科學計數(shù)法表示,值為123.24乘10的40次方)。
以下是浮點數(shù)類型變量定義的例子: float x,y;
double v=12.86,u=2431098.987D; float u=12.36f;
浮點數(shù)類型與整數(shù)不同,當執(zhí)行運算時如果出現(xiàn)某種不正常的狀態(tài),浮點數(shù)類型不會拋出異常。例如,如果用0除浮點數(shù)類型的變量,則計算結(jié)果是一個特別的無限值。
習題
1. 指出Java語言的主要特點和Java程序的執(zhí)行過程。
答:主要特點:
(1)強類型,(2) 編譯和解釋,(3) 自動無用內(nèi)存回收功能,(4) 面向?qū)ο螅?(5) 與平臺無關,(6)安全性,(7)分布式計算,(8)多線程。 Java程序的執(zhí)行過程:是解釋執(zhí)行。 1.javac [選項] 源文件==編譯
2.java [選項] 類名[參數(shù)] ==執(zhí)行
2. 說出開發(fā)與運行Java程序的主要步驟。
3. 如何區(qū)分應用程序和小應用程序?
4. 說出Java源文件的命名規(guī)則。
5. 選擇一種上機環(huán)境,參照實例,編寫一個輸出“hello world!”字樣的Java程序。
6. Java語言使用什么字符集?共有多少個不同的字符?
7. Java語言標識符的命名規(guī)則是什么、
8. Java有哪些基本數(shù)據(jù)類型,它們的常量又是如何書寫的?
9. 指出下列內(nèi)容哪些是Java語言的整型常,哪些是浮點數(shù)類型常量,哪些兩者都不是。 1)E-4, 2)A423 ,
3)-1E-31,4)0xABCL,5).32E31,6)087,7)0xL,8)003,9)0x12.5,10)077,11)11E,12)056L,13)0.,14).0
第2章 運算和語句
本章主要內(nèi)容(次重點 10%) ? 數(shù)據(jù)運算 ? 語句
? Java程序?qū)嵗?/span>
本章重點:算術運算、自增和自減運算、關系運算和邏輯,Java語句以及java程序?qū)嵗?/span>
本章難點:自增和自減運算、位運算和移位運算,while語句、do…while語句、for語句和Java程序?qū)嵗?nbsp;
2.1 數(shù)據(jù)運算
運算分量可以是常量、變量和方法調(diào)用。Java 在高級語言中,運算由表達式表示。表達式由運算符和運算分量組成,
語言的基本運算可分成以下幾類:賦值運算,算術運算,自增和自減運算,關系運算,邏輯運算,條件運算和字符串連接運算等。
2.1.1 賦值運算 在Java語言中,符號“=”是賦值運算符,不是“相等”(相等運算符是“==”,見關系運算符的敘述)。賦值運算分為兩類:一是簡單賦值運算;二是復合賦值運算。
1. 簡單賦值運算
簡單賦值運算的一般形式如下: 變量 = 表達式
賦值運算的執(zhí)行過程是:
(1) 計算賦值運算符的右端的表達式。
(2) 當賦值運算符兩側(cè)不一致時,將表達式值的類型自動轉(zhuǎn)換成變量的類型。 (3) 將表達式的值賦值給變量,即存儲到與變量對應的存儲單元中。 完成一個賦值運算的表達式稱為賦值表達式,賦值表達式是先計算表達式的值,然后將表達式的值賦值給變量。 例如,表達式x=x+1,表示完成表達式x+1的計算,將計算結(jié)果賦值給變量x。 這里的類型轉(zhuǎn)換是指數(shù)值數(shù)據(jù)的類型自動轉(zhuǎn)換,這樣的自動轉(zhuǎn)換只能由簡單類型向復雜類型轉(zhuǎn)換,不能從復雜的轉(zhuǎn)換成簡單的。即如下所示的從左到右轉(zhuǎn)換: byte->short->int->long->float->double
例如,以下代碼說明int類型能自動轉(zhuǎn)換成double類型: int j=3; double y=2.0; y=j;//j的值為3,y的值為3.0
以下則是不正確的代碼,double 類型不能自動轉(zhuǎn)換成int類型。 j=y;
Java語言約定賦值運算也有值,它的值就是賦予變量的值,因此,賦值運算的結(jié)果可以繼續(xù)賦值。例如: int j; double y=2.0;
3,,y的值為,當連續(xù)有多上賦值運算時,是從右至左逐個賦值。 2. 復合賦值運算
在程序中,經(jīng)常遇到在變量現(xiàn)在值的基礎上作某種修正的運算。例如 x=x+5
這類運算的特點是:變量既要參與運算,又要接受賦值。為避免對同一個變量的地址重復計算,引入復合賦值運算符。常用的復合賦值運算符有: +=、-=、*=、/=、%= 例如: x+=5;//等價于x=x+5 x *=u+v;//等價于x=x*(u+v),這里括號不能省略
xθ=e
的等效表達式為 x= xθ(e)
當e是一個復雜表達式時,等效表達式的括號是必需的。
2.1.2算術運算 算術運算要求運算分量的類型是數(shù)值類型的(整數(shù)類型和浮點數(shù)類型)。運算時,只需一個運算分量的是單目運算,需兩個運算分量的是雙目運算。算術運算的運算符是: 單目算術運算符:+(取正)、-(取負) 雙目算術運算符:+(加)、-(減)、*(乘)、/(除)、%(求余數(shù)) 說明:
(1) 加、減、乘、除和求余數(shù)運算都是雙目運算符,結(jié)合性都是從左至右。取正和取負是單目運算符,結(jié)合性是從
右至左,其優(yōu)先級高于+、-、*,%等雙目運算符。
(2) “/”為除法運算符,當除數(shù)和被除數(shù)均為整數(shù)類型數(shù)據(jù)時,則結(jié)果也是整數(shù)類型數(shù)據(jù)。例如7/4的結(jié)果為1。 (3) “%”為求余數(shù)運算符,求余數(shù)運算所得結(jié)果的符號與被除的符號相同。例如:5%3的結(jié)果為2,-5%3
的結(jié)果為-2,5%-3的結(jié)果為2。
用算術運算符、運算分量和括號連接起來,符合Java語言語法規(guī)則的計算式,稱為算術表達式。例如,如果變量x和y已經(jīng)被正確聲明,并且已經(jīng)賦予初值,則以下的式子就是一個正確的算術表達式:
X*2+y*(x-5)
2.1.3 自增和自減運算
自增運算符“++”和自減運算符“--”是單目運算符,要求運算分量是數(shù)值類型的變量。其作用是變量的值增1或減1。這兩個運算符與變量結(jié)合有以下四種可能形式:
++i前綴形式,表示在引用變量i之前,先使i加1,以加1后的i值為運算結(jié)果。 --i前綴形式, 表示在引用變量i之前, 先使i減1,以減1后的i值為運算結(jié)果。 i++后綴形式,表示在收用變量i之后,才使i加1,即以增1前的i值為運算結(jié)果。 i--后綴形式,表示在引用變量i之后,才使i減1,即以減1前的i值為運算結(jié)果。 例如:
i=4;j=++i;//i結(jié)果為5,j的結(jié)果為5 i=4;j=i++;//i結(jié)果為5,j的結(jié)果為4 i=4;j=--i;//i結(jié)果為3,j的結(jié)果為3 i=4;j=i--;//i結(jié)果為3,j的結(jié)果為4
上述例子說明,對變量采用自增或自減,用前綴形式或用后綴形式,對變量本身來說,效果是相同的,但表達式的值不相同。前綴形式是變量運算之后的新值,后綴形式是變量運算之前的值。
自增自減運算能使程序更為簡潔和高效,但在使用時需注意“++”和“