版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第1章 Java語言概述本章的主要內(nèi)容:1.1 Java語言的發(fā)展里程1.2 java 的特點及有關(guān)概念1.3 Java程序開發(fā)1.1 Java語言的發(fā)展里程Java語言前身是Oak語言,于1991年推出,但僅限于Sun Microsystems公司內(nèi)部使用。1995年Oak語言改名為“Java”,并正式向公眾推出,主要貢獻者是James Gosling。1.2版本的Java是Java語言發(fā)展過程中一個關(guān)鍵階段,從此,Sun公司將Java更名為Java2。經(jīng)過十年的發(fā)展,Java語言已經(jīng)發(fā)展到1.6版本。版本號名稱中文名發(fā)布日期JDK1.01996-1-23JDK1.1.4Sparkler寶石
2、1997-09-12JDK1.1.5Pumpkin南瓜1997-12-13JDK1.1.6Abigail阿比蓋爾-女子名1998-04-24JDK1.1.7Brutus布魯圖-古羅馬政治家和將軍1998-09-28JDK1.1.8Chelsea切爾西-城市名1999-04-08J2SE1.2Playground運動場1998-12-04J2SE1.2.1none無1999-03-30J2SE1.2.2Cricket蟋蟀1999-07-08J2SE1.3Kestrel美洲紅隼2000-05-08J2SE1.3.1Ladybird瓢蟲2001-05-17J2SE1.4.0Merlin灰背隼2002
3、-02-13J2SE1.4.1grasshopper蚱蜢2002-09-16J2SE1.4.2Mantis螳螂2003-06-26J2SE5.0(1.5.0)Tiger老虎2004-9-30J2SE6.0(Beta)Mustang野馬2006-41.2 java 的特點及有關(guān)概念1.2.1 Java語言的特點1.2.2 平臺無關(guān)性1.2.3 Java虛擬機1.2.4 Java與C/C+關(guān)系1.2.1 java 的特點1語法簡單(1)Java的風(fēng)格類似于C+(2)Java摒棄了C+中容易引發(fā)程序錯誤的地方,如指針和內(nèi)存管理;(3)Java提供了豐富的類庫。2面向?qū)ο竺嫦驅(qū)ο缶幊淌且环N先進的編程思
4、想,更加容易解決復(fù)雜的問題。面向?qū)ο罂梢哉f是Java最重要的特性。Java語言的設(shè)計完全是面向?qū)ο蟮模?.2 java 的特點(2/4)3分布式JAVA從誕生就起就與網(wǎng)絡(luò)聯(lián)系在一起,它強調(diào)網(wǎng)絡(luò)特性,內(nèi)置TCP/IP,HTTP,F(xiàn)TP協(xié)議類庫,便于開發(fā)網(wǎng)上應(yīng)用系統(tǒng)。4安全性(1)在Java語言里,象指針和釋放內(nèi)存等C+功能被刪除,避免了非法內(nèi)存操作。(2)當Java用來創(chuàng)建瀏覽器時,語言功能和一些瀏覽器本身提供的功能結(jié)合起來,使它更安全。Java語言在機器上執(zhí)行前,要經(jīng)過很多次的測試。其三級安全檢驗機制可以有效防止非法代碼侵入,阻止對內(nèi)存的越權(quán)訪問。51.2 java 的特點(3/4)5健壯性J
5、ava致力于檢查程序在編譯和運行時的錯誤。異常檢查可盡早的發(fā)現(xiàn)可能存在的錯誤。類型檢查幫助檢查出許多開發(fā)早期出現(xiàn)的錯誤。6解釋運行,高效率Java解釋器(運行系統(tǒng))能直接運行目標代碼指令。Java程序經(jīng)編譯器編譯,生成的字節(jié)碼經(jīng)過精心設(shè)計,并進行了優(yōu)化,因此運行速度較快,客服了以往解釋性語言運行效率低的缺點。1.2 java 的特點(4/4)7與平臺無關(guān)JAVA編譯器將JAVA程序編譯成二進制代碼,即字節(jié)碼。字節(jié)碼有統(tǒng)一的格式,不依賴于具體的硬件環(huán)境。8多線程Java提供的多線程功能使得在一個程序里可同時執(zhí)行多個小任務(wù)。9動態(tài)性Java的動態(tài)特性是其面向?qū)ο笤O(shè)計方法的發(fā)展。它允許程序動態(tài)地裝入
6、運行過程中所需要的類。1.2.2 平臺無關(guān)性(1/2)平臺無關(guān)類型包括源代碼級和目標代碼級兩種類型。C和C+屬于源代碼級平臺無關(guān),意味著用其寫的應(yīng)用程序不用修改只需重新編譯就可以在不同平臺上運行。Java屬于目標代碼級平臺無關(guān),主要靠Java虛擬機JVM來實現(xiàn)。對高級語言的翻譯方式有解釋和編譯兩種解釋方式就是一邊翻譯一邊運行而編譯方式則是一次性翻譯好,生成目標程序。1.3 平臺無關(guān)性(2/2)解決移植性的方法有以下兩種方式:方式1:到一臺機器上將源程序重新編譯成適合該臺機器的機器代碼。方式2:將高級語言源程序編譯成一種與機器無關(guān)的中間代碼(如Java語言的字節(jié)碼),該中間代碼程序不能被操作系統(tǒng)
7、直接執(zhí)行,需要由解釋其來解釋和執(zhí)行。Java語言采用方式2,將由解釋程序擴展了的指令系統(tǒng)的機器稱為Java虛擬機,簡稱JVM。1.2.3 Java虛擬機JVM虛擬機是一種對計算機物理硬件計算環(huán)境的軟件實現(xiàn)。虛擬機是一種抽象機器,內(nèi)部包含一個解釋器(Interpreter),可以將其它高級語言編譯為虛擬機的解釋器可以執(zhí)行的代碼(稱這種代碼為中間語言 Intermediate Language),實現(xiàn)高級語言程序的可移植性平臺無關(guān)性 (System Independence),無論是運行在嵌入式設(shè)備還是多個處理器的服務(wù)器上,虛擬機都執(zhí)行相同的指令,所使用的支持庫也具有標準的API和完全相同或相似的
8、行為。1.4 Java虛擬機JVMJava虛擬機(Java Virtual Machine,簡稱JVM)是一種抽象機器,它附著在具體操作系統(tǒng)上,本身具有一套虛擬機器指令,并有自己的棧,寄存器等,運行JAVA程序不可少的機制。編譯后的JAVA程序指令并不直接在硬件系統(tǒng)CPU上執(zhí)行,而是在JVM執(zhí)行。在JVM上有一個Java解釋器用來解釋Java編譯器編譯后的程序。任何一臺機器只要配備了解釋器,就可以運行這個程序,而不管這種字節(jié)碼是在何種平臺上生成的。圖1-1 計算機硬件、操作系統(tǒng)、JVM與各種可執(zhí)行程序之間的關(guān)系機器代碼硬件操作系統(tǒng)JVM本地可執(zhí)行文件(.exe,.com文件)Java字節(jié)碼文件
9、(.class文件)1.4 Java虛擬機JVMJVM體系結(jié)構(gòu)圖類裝載器字節(jié)碼解釋器安全管理器垃圾收集器線程管理圖形Java虛擬機操作系統(tǒng)字節(jié)碼 *.class 文件圖1-2 Java虛擬機體系結(jié)構(gòu)示意圖1.2.4 Java 與C/C+之關(guān)系相近之處Java中許多基本語句的語法和C+一樣,像常用的循環(huán)語句、控制語句等和C+幾乎一樣Java和C+是兩種完全不同的語言不同之處(見下頁)不同之處Java去掉了C+語言的許多功能,Java中沒有#include 和#define 等預(yù)處理功能,用import語來句包含其它類和包;Java中沒有structure,union及typedef;Java中沒
10、有不屬于類成員的函數(shù),沒有指針和多重繼承,Java只支持單重繼承;Java中禁用goto,但goto還是保留的關(guān)鍵字;Java中沒有操作符重載;Java中沒有全局變量,可以在類中定義公用、靜態(tài)的數(shù)據(jù)成員實現(xiàn)相同功能。1.3 Java運行平臺1.3.1 Java運行平臺1.3.2 Java開發(fā)過程1.3.3 Java開發(fā)工具箱(JDK)簡介1.3.1 Java運行平臺1三種平臺簡介 J2SE:Java標準版或Java 標準平臺。J2SE 提供了標準的SDK開發(fā)平臺(以前稱做JDK開發(fā)平臺)。 J2EE:Java企業(yè)版或Java企業(yè)平臺。 J2ME:Java微型版或Java小型平臺。1.6 Jav
11、a運行平臺2環(huán)境變量JAVA_HOME為那些需要使用Java命令和JVM的程序提供了通用的路徑信息,其值應(yīng)設(shè)置為JDK的安裝目錄的路徑, JAVA_HOME= C:jdk1.5CLASSPATH用于指明字節(jié)碼文件的位置。 CLASSPATH=c:jdk1.5jrelibrt.jar;.PATH是操作系統(tǒng)使用的變量,用于搜索在Shell中輸入的希望執(zhí)行的命令。1.6 Java運行平臺3JDK1.6版本安裝從網(wǎng)站下載jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe,然后安裝該程序。Java編譯器源文件編輯器字節(jié)碼文件由Web瀏覽器執(zhí)行文件名.j
12、ava產(chǎn)生對于Java小應(yīng)用程序?qū)τ贘ava應(yīng)用程序由Java解釋器執(zhí)行圖1-1 Java程序開發(fā)過程示意圖1.3.2 Java程序開發(fā)過程1Java應(yīng)用程序的開發(fā)編寫源文件Editplus等文本編輯器生成Hello.java編譯源文件生成字節(jié)碼 javac Hello.java加載運行字節(jié)碼 java HelloJava源程序的命名特點:(1)區(qū)分大小寫;(2)如果在源程序中包含有public類,則該源文件名必須與該public類的名字完全一致;(3)如果源程序中不包含public類,則該源文件名可以與源文件中包含的任意類的名稱一致。通常將與源文件名相同的類定義為主類,換句話說Java程序文
13、件名必須和主類的名稱一致,且擴展名是java。主類按如下確定:(1)若源文件中存在public類,則該類為主類;(2)若源文件沒有public類,則可定義任何類為主類。對Application程序而言,必須有一個類含有public static void main(String args )方法,args是main方法的一個參數(shù),是一個字符串類型的數(shù)組(注意String的第一個字母是大寫的)通常以包含main方法的類作主類。也可以將其他類定義為public類,并以此作為源程序名稱,當在java命令后跟隨的類參數(shù)名應(yīng)該為包含main方法的類名/Hello.javapublic class Hel
14、lo public static void main(String args ) System.out.println(你好,很高興學(xué)習(xí)Java); C:javac Hello.javaC:java Hello2Java Applet程序的開發(fā)編寫源文件 Editplus等文本編輯器Boy.java編譯源文件生成字節(jié)碼 javac Boy.java通過瀏覽器加載運行字節(jié)碼 Html文件myBoy.html 或appletviewew myboy.html/Boy.javaimport java.applet.*; import java.awt.*;public class Boy exten
15、ds Applet public void paint(Graphics g) g.setColor(Color.blue); g.drawString(Java是一門很優(yōu)秀的語言,12,30); g.setColor(Color.red); g.drawString(我一定認真學(xué)習(xí)Java,22,56); /myBoy.html C:javac Boy.javaC: appletviewew myboy.html1.3.3 Java 開發(fā)工具箱Java 開發(fā)工具箱(JDK- Java Development Kit)是Sun公司為用戶提供的集成和執(zhí)行applets和應(yīng)用程序的工具javac
16、編譯器:可以用任何文字編輯器創(chuàng)建Java程序java 翻譯器;用于執(zhí)行編譯過的 Java應(yīng)用程序。appletviewer:可運行applets而不必運行 Web瀏覽器。javap反匯編程序:從字節(jié)碼文件恢復(fù)java原代碼。 javadoc工具 :可以為所編寫的源文件生成HTML文檔第2章 Java語言基礎(chǔ)2.1 Java程序概況2.2 基本數(shù)據(jù)類型2.3 運算符和表達式2.4 Java語句2.1 Java程序概況2.1.1 Java程序結(jié)構(gòu)2.1.2 Java注釋2.1.3 Java關(guān)鍵字2.1.4 Java標識符2.1.5 變量與常量2.1.1 Java程序結(jié)構(gòu)Java源程序一般由一個或多
17、個編譯單元組成,每個編譯單元只能包含以下內(nèi)容(空格和注釋除外):package包語句import導(dǎo)入語句類的聲明接口聲明圖2-1 Java程序中各元素及其關(guān)系注釋0.npackage0.1import0.n成員變量0.n方法0.n局部變量0.n執(zhí)行語句0.n類1.nJava程序/*這是一個簡單的Java程序示例程序*/package mypack;import java.util.*;public class Example public static void main (String args ) System.out.println(Java歡迎您!); 2.1.2 Java注釋方式1:
18、/注釋一行例如: num=2; /num是計算器,用于累計選課人數(shù)方式2:/*一行或多行注釋*/例如: /*本方法用于計算階乘*/方式3:/*文檔注釋*/文檔注釋一般放在一個變量或函數(shù)定義說明之前,表示該段注釋應(yīng)包含在自動生成的任何文檔中(即由javadoc生成的HTML文件)。這種注釋都是聲明條目的描述。2.1.3 Java關(guān)鍵字abstractconstfinallyinterfacereturnthrowbooleancontinuefloatlongsafetransientbreakdefaultfornativeshorttruebydogotonewstatictrybytedo
19、ubleifnullsupervaluecaseelseimplementspackageswitchvoidcatchextendsimportprivatesynchronizedvolatilecharfalseinstanceofprotectedthiswhileclassfinalintpublicthread2.1.4 Java標識符所謂標識符就是用來標識包名、類名、接口名、變量名、方法名、文件名等的有效字符序列。由字母、下劃線、美元符號和數(shù)字組成,并且第一個字符不能是數(shù)字。標識符中的字母是區(qū)分大小寫的例子:判斷正誤 (1)3max (2)class (3)room# (4)us
20、erName (5)User_name一般標識符按照以下規(guī)則命名:(1)標識符盡量采用有意義的字符序列,便于從標識符識別出所代表的基本含義。(2)包名:包名是全小寫的名詞,中間可以由點分隔開,例如:java.awt.event。(3)類名:首字母大寫,通常由多個單詞合成一個類名,要求每個單詞的首字母也要大寫,例如class HelloWorldApp。(4)接口名:命名規(guī)則與類名相同,例如interface Collection。(5)方法名:往往由多個單詞合成,第一個單詞通常為動詞,首字母小寫,中間的每個單詞的首字母都要大寫,例如:balanceAccount,isButtonPressed
21、。(6)變量名:全小寫,一般為名詞,例如使用area表示面積變量,length表示程度變量,等等。(7)常量名:基本數(shù)據(jù)類型的常量名為全大寫,如果是由多個單詞構(gòu)成,可以用下劃線隔開,例如:int YEAR, int MAX_VALUE;如果是對象類型的常量,則是大小寫混合,由大寫字母把單詞隔開。(8)對變量和方法,其名稱不宜以_和$為第一個字符,因為這兩個字符對于內(nèi)部有特殊含義。2.1.5 變量與常量Java變量是一個由標識符命名的項。變量具有一定類型,例如 int 型或class型,也具有作用域,其值可被改變。變量聲明的語法形式如下: varType varName=value , varN
22、ame=value; double area,r;在變量聲明格式前加上final修飾符,就聲明了一個常量。常量一旦被初始化以后就不可改變。常量聲明的語法形式如下:final varType varName=value , varName=value;2.2 基本數(shù)據(jù)類型2.2.1 基本數(shù)據(jù)類型概況2.2.2 基本數(shù)據(jù)類型轉(zhuǎn)換2.2.1 基本數(shù)據(jù)類型概況基本數(shù)據(jù)類型也稱作簡單數(shù)據(jù)類型,Java語言有8種簡單數(shù)據(jù)類型,分別是:boolean、byte 、short、int、long、float、double、char。復(fù)合數(shù)據(jù)類型包括數(shù)組、類和接口等。圖2-2 Java語言數(shù)據(jù)類型數(shù)值類型整數(shù)類
23、int, byte, short, long 浮點類 double, float邏輯類 boolean字符類 char數(shù)組 type類 class接口 interface數(shù)據(jù)類型基本數(shù)據(jù)類型復(fù)合數(shù)據(jù)類型2.2.1 基本數(shù)據(jù)類型概況1邏輯類型常量:true ,false。變量的定義:使用關(guān)鍵字boolean來定義邏輯變量,定義時也可以賦給初值。例如:boolean x;/定義邏輯型變量xboolean x=false; /定義邏輯型變量x,并賦值為false2.2.1 基本數(shù)據(jù)類型概況2整數(shù)類型常量:123,6000(十進制),077(八進制),0 x3ABC(十六進制)。整型變量的定義分為4種
24、類型舉例字節(jié)長度bytebyte x,y=1;1shortshort x,y=2;2intint x,y=3;4longlong x,y=4;82.2.1 基本數(shù)據(jù)類型概況3字符類型常量: unicode字符表中的字符就是一個字符常量例如A,?,9,好,等。Java還使用轉(zhuǎn)意字符常量,如:n為換行轉(zhuǎn)意字符常量。變量的定義:使用關(guān)鍵字char來定義字符變量例如:char x= A,漂亮=假,jiafei;特別提示:一個unicode字符占2個字節(jié)char型變量,內(nèi)存分配給2個字節(jié),占16位,最高位不是符號位,沒有負數(shù)的char。char型變量的取值范圍是0-65536。運行結(jié)果為:字符中在uni
25、code表的位置為20013字符#在unicode表的位置為35在unicode表中序號為 97 的字符為a在unicode表中序號為 21556 的字符為吳說明:將line 10所在行的語句“ch1=(char)i”;變?yōu)椤癱h1=97;”可以得到同樣結(jié)果,可是將該語句變?yōu)椤癱h1=i;”則將出錯。詳細原因請見隨后的類型轉(zhuǎn)換部分。2.2.1 基本數(shù)據(jù)類型概況4浮點類型浮點類型包括float 型和double型。浮點型數(shù)值缺省為double型,float型在數(shù)值之后加f或F例如,float 型常量:453.5439f,21379.987F,2e40f,double型常量:21389.5439d
26、(d可以省略),6e-140。float 型變量的定義:float x,y=22.76f;double型變量的定義:double x,y=12.762.2.2 基本數(shù)據(jù)類型轉(zhuǎn)換含義:一種基本數(shù)據(jù)類型變量轉(zhuǎn)變成另一種基本類型變量。類型轉(zhuǎn)換方式:窄化和拓寬轉(zhuǎn)換。拓寬(Widening)轉(zhuǎn)換編譯時可以自動執(zhí)行拓寬轉(zhuǎn)換(稱為Promotion,提升)。窄化(Narrowing)轉(zhuǎn)換則總是要求顯式執(zhí)行強制轉(zhuǎn)換(稱為Cast,轉(zhuǎn)型)。Java語言中不同類型之間不能相互賦值,同種類型低精度值可以賦給高精度變量,反之則需要使用強制類轉(zhuǎn)換,此時可能導(dǎo)致數(shù)據(jù)精度的損失。2.2.2 基本數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)精度從“低”
27、到“高”排序: byteshort(char) intlongfloatdouble規(guī)則1:當把精度低的變量的值賦給精度高的變量時,系統(tǒng)自動完成數(shù)據(jù)類型的轉(zhuǎn)換,如int型轉(zhuǎn)換成long型規(guī)則2:當把精度高的變量的值賦給精度低的變量時,必須使用顯示類型轉(zhuǎn)換運算。 (類型名)要轉(zhuǎn)換的值; int x=(int)34.89;規(guī)則3:char與byte或short之間的賦值必須實行強制轉(zhuǎn)換。2.2.2 基本數(shù)據(jù)類型轉(zhuǎn)換byte b1=18,b2;short sint1,sint2;char ch1,ch2=A;ch1=char(b1); b2=(byte)ch2;s int2=(short)ch2;注
28、意事項:強制轉(zhuǎn)換運算可能導(dǎo)致精度的損失。當把一個整數(shù)賦值給一個byte、short、int或long型變量時,不可以超出這些變量的取值范圍,否則必須進行類型轉(zhuǎn)換運算。 public class Exam020204 public static void main(String args ) byte a=120; short b=255; int c=2200; long d=8000; float f; double g=0.1234567812345678; b=a; c=(int)d; f=(float)g; System.out.println(a=+a); System.out.pr
29、intln(b=+b); System.out.println(c=+c); System.out.println(d=+d); System.out.println(e=+e); System.out.println(f=+f); System.out.println(g=+g); 【實例2-3】 運行結(jié)果為:a=120b=120c=8000d=8000f=0.12345678g=0.12345678123456782.3 運算符和表達式2.3.1 算術(shù)運算符和算術(shù)表達式2.3.2 關(guān)系運算符與關(guān)系表達式2.3.3 邏輯運算符與邏輯表達式2.3.4 賦值運算符與賦值表達式2.3.5 位運算符
30、2.3.6 條件運算符2.3.7 instanceof 運算符2.3.8 一般表達式2.3.1 算術(shù)運算符和算術(shù)表達式Java算術(shù)運算符主要包括一元運算符(如+,-,+,-)和二元運算符(如,+,-,*,/,%),與C/C+基本相同算術(shù)表達式是用算術(shù)符號和操作元連接起來的符合Java語法規(guī)則的式子。例如: (f * b) + (i / c) - (d * s)2.3.1 算術(shù)運算符和算術(shù)表達式j(luò)ava將按運算符兩邊操作元的最高精度保留結(jié)果。操作元的精度從低到高排列順序是:byteshortintlongfloatdouble。執(zhí)行任何算術(shù)運算或按位運算,“比int小”的數(shù)據(jù)(char、byte
31、、short)在正式執(zhí)行運算之前,那些值會自動轉(zhuǎn)換成int整型、實型、字符型數(shù)據(jù)可以混合運算。運算中,不同類型的數(shù)據(jù)先轉(zhuǎn)化為同一類型,然后進行運算,轉(zhuǎn)換從低級到高級。例如:若將一個float值與一個double值相乘,結(jié)果就是double;如將一個int值和一個long值相加,則結(jié)果為long。操作數(shù)1操作數(shù)2結(jié)果類型byte,short,charintintbyte,short,char,intlonglongbyte,short,char,int,longfloatfloatbyte,short,char,int,long,floatdoubledouble舉例說明5/2 的結(jié)果為2,因為
32、運算符“/”左右操作數(shù)均為int型,因此結(jié)果也為int型;5.2/2的結(jié)果為2.5,因為運算符“/”左操作數(shù)為double型,右操作數(shù)為int型,因此運算時首先統(tǒng)一為double型,顯然結(jié)果也為double型。class autoPromoteExample public static void main(String args) byte b = 1; char c = b; short s = 10; int i = 100; float f = 1.23f; double d = 6.78,result; result = (f * b) + (i / c) - (d * s); Sys
33、tem.out.println(result = + result); 以下說明表達式(f * b) + (i / c) - (d * s)計算過程中數(shù)據(jù)類型轉(zhuǎn)換過程:首先,在第一個子表達式f*b 中,變量b被提升為float 類型,該子表達式的結(jié)果(稱為中間值1)是float 類型。在子表達式i/c中,變量c被提升為int 類型,該子表達式的結(jié)果(稱為中間值2)是int 類型。在子表達式d*s 中,變量s被提升為double 類型,該子表達式的結(jié)果(稱為中間值3)是double 類型。其次,float 類型中間值1和int 類型中間值2的結(jié)果(稱為中間值4)是float 類型。最后,floa
34、t 類型中間值4和double 類型中間值3相減的結(jié)果是double 類型。因此,該表達式的最后結(jié)果是double 類型。2.3.2 關(guān)系運算符與關(guān)系表達式運算符表達式返回true的情況op1op2op1大于op2=op1=op2op1大于或等于op2op1op2op1小于op2=op1=op2op1小于或等于op2=op1=op2op1與op2相等!=op1!=op2op1與op2不等2.3.3 邏輯運算符與邏輯表達式操作數(shù)取值表達式運算結(jié)果op1op2op1&op2op1|op2!op1falsefalsefalsefalsetruefalsetruefalsetruetruetruefa
35、lsefalsetruefalsetruetruetruetruefalse2.3.4 賦值運算符與賦值表達式賦值運算符“=”是雙目運算符,左面的操作元必須是變量。級別是14級,結(jié)合性從右到左。2.3.5 位運算符Java位運算符主要面對基本數(shù)據(jù)類型,包括byte、short、int、long和char。位運算符包括“按位與”&、 “按位或”|、“按位非”、 “按位異或” 、左移。此外,Java引入一個專門用于邏輯右移運算符,它采用了所謂的零擴展技術(shù),不論原值是正或負,一律在高位補0。例如: int a= - 2 , b ; b=a30;2.3.6 條件運算符條件運算符是一個3目運算符,符號是
36、:“?:”。用法如下:op1?op2:op3要求第一個操作元op1的值必須是boolean型數(shù)據(jù)。運算法則是:當op1的值是true時,運算的結(jié)果是op2的值;當op1的值是false時,運算的結(jié)果是op3的值。Java要求:op2與op3必須同類型 。例如,128?100:200的結(jié)果是100;12y&x0?(x+1):y) 的值是 int型數(shù)據(jù),結(jié)果為17。2.4 Java語句2.4.1 Java語句概述2.4.2 分支語句2.4.3 循環(huán)語句2.4.4 跳轉(zhuǎn)語句2.4.5 輸入輸出語句2.4.1 Java語句概述Java語言中的語句可分為以下5類:(1)方法調(diào)用語句:例如 reader.
37、nextInt();(2)表達式語句:x=23;(3)復(fù)合語句: “” +代碼塊+“” ,例如, z=23+x; System.out.println(hello); (4)控制語句:條件分支語句、循環(huán)語句和跳轉(zhuǎn)語句。(5)package 語句和 import語句2.4.2 分支語句1條件分支語句if-else語句.if(表達式) 若干語句else 若干語句多條件if-else if-else語句if(表達式1) 若干語句 else if(表達式2) 若干語句 else if(表達式n) 若干語句 else 若干語句 if(表達式) 的表達式的值必須是boolean型 public class
38、 multelseExample public static void main(String args ) int score=88;String str=不及格;if (score=90 & score =80 & score=70 & score=60 & score=69)str=及格;System.out.println(成績?yōu)?str); 2.4.2 分支語句switch(表達式) case 常量值1: 若干個語句 break; case 常量值n: 若干個語句 break; default: 若干語句圖2-6 switch語句執(zhí)行過程示意圖case 值1語句塊1break;tru
39、efalsecase 值2語句塊1break;truefalsecase 值n語句塊1break;truefalsedefault:語句塊(n+1)public class switchExample public static void main(String args ) int month=1;String str=;switch(month)case 1:case 2:case 3:str=春季;break;case 4:case 5:case 6:str=夏季;break;case 7:case 8:case 9:str=秋季;break;default:str=冬季;System.
40、out.println(月份+month+屬于+str); 2.4.3 循環(huán)語句1while循環(huán) while(表達式) 若干語句 2do while循環(huán)do while 若干語句 (表達式)3for循環(huán)for (表達式1;表達式2;表達式3) 若干語句 “表達式2”必須是一個求值為boolean型數(shù)據(jù)的表達式(b) do while循環(huán)循環(huán)體True表達式False循環(huán)體True表達式False表達式1True表達式2False循環(huán)體表達式3(a) while循環(huán)(c) for循環(huán)圖2-3 while 、do while循環(huán)和for循環(huán)示意圖2.4.4 跳轉(zhuǎn)語句1.break語句2.conti
41、nue語句3.return語句1.Break語句break語句的作用為:(1) 在switch語中,break語句用來終止switch語句的執(zhí)行。使程序從switch語句后的第一個語句開始執(zhí)行。(2)跳出它所指定的塊,并從緊跟該塊的第一條語句處執(zhí)行。說明:一個代碼塊通常是用大括號括起來的一段代碼。加標號的格式如下: BlockLabel: 代碼塊 break語句的使用形式:break; /不帶標簽break Label; /帶標簽說明不帶標簽的break語句使程序跳出它所在的那一層循環(huán)結(jié)構(gòu)。帶標簽的break語句使程序跳出標簽所指示的循環(huán)結(jié)構(gòu)?!緦嵗?-9】break命令應(yīng)用舉例public
42、class breakExamplepublic static void main(String args )int i,j=0;outer: for(i=0;i5;i+)for(j=0;j5;j+)System.out.println(i+ +j);if(j=1)break outer; System.out.println(最終值:+i+ +j); continue語句continue語句的作用:用來結(jié)束本次循環(huán),跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行終止條件的判斷,以決定是否繼續(xù)循環(huán)。對于for語句,對for循環(huán),就是忽略循環(huán)體中后面的語句,跳到表達式3執(zhí)行。對while或do whi
43、le循環(huán)就是直接轉(zhuǎn)去求解邏輯表達式。continue語句的使用格式為:continue; /不帶標簽continue Lable; /帶標簽說明:不帶標簽的continue語句的作用是終止當前循環(huán)結(jié)構(gòu)的本輪循環(huán)而直接開始下一輪循環(huán)。帶標簽的continue語句的作用就是把程序直接轉(zhuǎn)到標簽所指的循環(huán)結(jié)構(gòu)的下一次循環(huán),而不管被它嵌套的以及continue語句所在的循環(huán)結(jié)構(gòu)運行到了哪一輪。【實例2-10】continue命令應(yīng)用舉例public class continueExample public static void main(String args) int sum=0,i,j; for(
44、 i=1;i60) y=10;z=y-x;System.out.print(z=+z);public class localVarExamplepublic static void main(String args) A a=new A();a.f(); 說明:在本實例中,表面上通過執(zhí)行語句“if (x60) y=10;”對y進行了賦值,實際上由于x是Math.random()產(chǎn)生的隨機數(shù),有可能大于60,也有可能小于60,若x小于60,則在使用y(即執(zhí)行語句z=y-x)之前,y沒有被顯式賦值,故會出現(xiàn)以上錯誤提示。為避免這類錯誤,必須確保y在使用之前被顯式賦值。一個簡單的辦法就是在申明y之時
45、,可y賦值。如: int y=0,z; /line2 當然這種解決辦法要看具體功能而定。引用賦值舉例class Point int x,y;Point() x=67;y=10;Point(int x,int y)this.x=x;this.y=y;void showXY()System.out.println(點(x,y)為+(+x+,+y+);public class classInitExamplepublic static void main(String args) Point p1=new Point();Point p2=new Point(6,18);p1.showXY();p2
46、.showXY();p1=p2;p1.showXY();p2.showXY();圖3-6 內(nèi)存映像示意圖Point p1=new Point();10y0 x125p167xPoint p1=new Point(6,18);18y0 xA75p26xp1=p2;18y0 xA75p16x3.5 方法3.5.1 方法概述3.5.2 方法分類3.5.3 方法中值傳遞3.5.4 三個重要方法3.5.5 方法的遞歸調(diào)用3.5.1 方法概述方法是類的動態(tài)屬性。對象的行為是由其方法來實現(xiàn)的。一個對象可以通過調(diào)用另一對象的方法來訪問該對象。一定條件下,同一類中,不同的方法之間可以相互調(diào)用。在方法聲明時,通過
47、修飾符可以對方法訪問實施控制。在方法中,可以對類的成員變量進行訪問,但不同類型的方法對不同類型的成員變量的訪問是有限制的。 訪問控制修飾符其他修飾符 返回值類型 方法名稱(形式參數(shù)列表)拋出異常 可以對方法的訪問實施控制,因其在前面已介紹,故在此不再贅述。可以是任何合法的Java數(shù)據(jù)類型。若方法沒有返回值,則類型應(yīng)定義為void。返回值由return語句來返回。可以是任何合法的Java標識符??梢允侨魏魏戏ǖ腏ava語句集合。由方法運行時需要接收的數(shù)據(jù)及其類型組成,即格式如下: , ,3.5.2 方法分類實例方法和類方法實例方法能對類變量和實例變量操作,而類方法只能對類變量進行操作;類方法不僅
48、可以由對象調(diào)用而且還可以直接由類名調(diào)用,而實例方法不能由類名調(diào)用。一個類中的方法可以相互調(diào)用,但靜態(tài)方法只能調(diào)用靜態(tài)方法,不能調(diào)用實例方法。在創(chuàng)建對象之前,實例變量沒有分配內(nèi)存,實例方法也沒有入口地址。【實例3-10】/指出方法類型class Aint a;static float b;float max(float x,float y)static float show()【實例3-11】指出錯誤class Aint i;static int j;void set1(int x,int y)i=x;j=y;static void set2(int z)i=z;j=z*z;void showX
49、Y()System.out.println(i=+i+.j=+j);public class methodvarExamplepublic static void main(String args) A a=new A();a.set1(10,20);a.showXY();a.set2(30);a.showXY();說明:在本實例中,在類A中方法set1()是實例方法,方法set2()是類方法,變量x是實例變量,變量y是類變量。類方法只能操作類變量。上述程序中,類方法set2()中對實例變量x操作,顯然是不合規(guī)則的。因此提示i=z有錯?!緦嵗?-12】指出錯誤class Aint i;stat
50、ic int j;void set1(int x,int y)i=x;j=y;static void set2(int z)j=z*z;void showXY()System.out.println(i=+i+.j=+j);【實例3-11】指出錯誤public class methodvarExample2public static void main(String args) A a=new A();a.set1(10,20);a.showXY();a.set2(30);a.showXY(); A.set1(10,20);A.showXY();A.set2(30);A.showXY();說明
51、:在本實例中,在類A中方法set1()和showXY是實例方法,方法set2()是類方法,類方法不僅可以由對象調(diào)用而且還可以直接由類名調(diào)用,而實例方法不能由類名調(diào)用。因此會出現(xiàn)上述錯誤。3.5.3 方法調(diào)用中數(shù)據(jù)傳遞1、值傳遞方法2、引用傳遞方法3、返回值方法4、實例變量和類變量傳遞方式1、值傳遞方法將調(diào)用方法的實參的值計算出來賦予被調(diào)用方法對應(yīng)形參的一種數(shù)據(jù)傳遞方法。在這種數(shù)據(jù)傳遞方法下,被調(diào)用方法對形參的計算、加工與對應(yīng)的實參已完全脫離關(guān)系。當被調(diào)方法執(zhí)行結(jié)束,形參中的值可能發(fā)生變化,但是返回后,這些形參中的值將不會帶到對應(yīng)的實參中?!皵?shù)據(jù)的單向傳遞”class Aint square(i
52、nt x)x=x*x;return x;public class paraTransExample1public static void main(String args)int y,z;A a=new A();y=10;z=a.square(y);System.out.println(y=+y+.z=+z);輸出結(jié)果:x=10.y=100說明:類A中方法square有參數(shù)變量x(非引用型),在paraTransExample1中創(chuàng)建對象a后,通過a調(diào)用方法square,此時是通過值傳遞來實現(xiàn)給方法square的參數(shù)賦值的,由于是值傳遞,因此盡管方法square中參數(shù)變量x發(fā)生了改變,但這種改
53、變并不影響調(diào)用方法的實參y,即在調(diào)用方法square前,實參y的值為10,調(diào)用方法square后,實參y的值仍然為10。2、引用傳遞方法使用引用傳遞方法時,方法的參數(shù)類型一般是復(fù)合類型(引用類型)。復(fù)合類型變量中存儲的是對象的引用,所以在參數(shù)轉(zhuǎn)送中是傳送引用,方法接收參數(shù)的引用,因此任何對形參的改變都會影響到對應(yīng)的實參?!耙玫膯蜗騻魉停瑪?shù)據(jù)的雙向傳送”。以下舉例說明:class Pointint x,y;void setXY(int x1,int y1)x=x1;y=y1;void squarePoint(Point p)p.x=p.x*p.x;p.y=p.y*p.y;public clas
54、s paraTransExample2public static void main(String args)Point p0=new Point();p0.setXY(10,20);System.out.println(x=+p0.x+.y=+p0.y);p0.squarePoint(p0);System.out.println(x=+p0.x+.y=+p0.y);運行結(jié)果為:x=10.y=20 x=100.y=400說明:在本實例中,類A中方法squarePoint有參數(shù)變量x是引用型,在paraTransExample2中創(chuàng)建對象a后,通過a調(diào)用方法squarePoint,當方法squa
55、rePoint中對x和y進行改變后,這種改變的結(jié)果會反映在實參p0中,這就是為什么調(diào)用方法squarePoint前x和y分別是10和20,調(diào)用方法squarePoint后x和y分別是100和400。3、返回值方法返回值方法不是在形參和實參之間傳遞數(shù)據(jù),而是被調(diào)方法通過方法調(diào)用后直接將返回值送到調(diào)用方法中。使用返回值方法時,方法的返回值類型不能為void,且方法體中必須有帶表達式的return語句,其中表達式的值就是方法的返回值。/Exam030508.javapublic class Exam030508public static void main(String args)int v1,v2
56、;v1=10;v2=12;System.out.println(max(+v1+,+v2+)=+max(v1,v2);static int max(int x,int y)if (xy) return x;else return y;4、實例變量和類變量傳遞方式實例變量和類變量傳遞方式也不是在形參和實參之間傳遞數(shù)據(jù),而是利用在類中定義的實例變量和類變量是類中諸方法共享的變量的特點來傳遞數(shù)據(jù)/Exam030509.javaclass A static int x; int y; void setxy(int x1,int y1) x=x1;y=y1; int getx()return x; in
57、t gety() return y;運行結(jié)果為:a1(x,y)=(0,0)a2(x,y)=(0,0)a1(x,y)=(1,2)a2(x,y)=(1,0)a1(x,y)=(3,2)a2(x,y)=(3,4)說明:在本實例中,類A中成員變量x為static型,因為以A為基礎(chǔ)創(chuàng)建的對象a1和a2對成員變量x公用一個相同的存儲空間,則a1和a2調(diào)用方法setxy()都能改變成員變量x的值。3.5.3 三個重要方法1、構(gòu)造方法2、main方法3、finalize方法1、構(gòu)造方法Java通過構(gòu)造方法來保證對每個對象進行初始化。構(gòu)造方法是一種特殊的方法。Java中的每個類都有構(gòu)造方法,用來初始化該類的一個新
58、的對象。構(gòu)造方法具有和類名相同的名稱,而且不返回任何數(shù)據(jù)類型,即void類型(void可以省略)。在構(gòu)造方法的實現(xiàn)中,也可以進行方法重載。在類中沒有構(gòu)造方法時,使用默認的構(gòu)造方法。構(gòu)造方法在創(chuàng)建一個新對象時,同時給這個新對象分配內(nèi)存創(chuàng)建對象進行初始化一般格式為: 新對象名 =new 構(gòu)造方法();一個類中可能沒有構(gòu)造方法,此時使用默認的構(gòu)造方法.使用默認的構(gòu)造方法時,按照默認的方式對變量進行初始化,即數(shù)值型初始化為0,引用型初始化為null,邏輯型初始化為false。一個類中存在一個或多個構(gòu)造方法【實例3-16】內(nèi)中無構(gòu)造方法class Point int x,y;void showXY()S
59、ystem.out.println(點(x,y)為+(+x+,+y+);public class methodsExample1public static void main(String args) Point p1=new Point();p1.showXY();運行結(jié)果為:點(x,y)為(0,0)說明:在本實例中,類A中沒有構(gòu)造方法,則使用默認的構(gòu)造方法,x和y被初始化為0?!緦嵗?-17】內(nèi)中多個構(gòu)造方法class Point int x,y;Point() x=1;y=1;Point(int x1,int y1)x=x1; y=y1;void showXY()System.out.p
60、rintln(點(x,y)為+(+x+,+y+);public class methodsExample2public static void main(String args) Point p1=new Point();Point p2=new Point(2,2);p1.showXY();p2.showXY();運行結(jié)果為:點(x,y)為(1,1)點(x,y)為(2,2)說明:在本實例中,類A中有兩個構(gòu)造方法,在methodsExample2中通過參數(shù)來識別所調(diào)用的構(gòu)造方法,當沒有參數(shù)時調(diào)用構(gòu)造方法Point(),當有參數(shù)時調(diào)用構(gòu)造方法Point(x,y)。注意事項:一旦定義了構(gòu)造函數(shù),J
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025高考數(shù)學(xué)考點剖析精創(chuàng)專題卷七-空間向量與立體幾何【含答案】
- 糖尿病視網(wǎng)膜病變病例討論(共30張課件)
- 江西省贛州市興國縣高興鎮(zhèn)高興小學(xué)-主題班會-網(wǎng)絡(luò)安全教育【課件】
- 二零二五年短視頻平臺場推廣服務(wù)協(xié)議2篇
- 第2課《濟南的冬天》課時提高練2024-2025學(xué)年語文七年級上冊
- 高績效團隊的成功秘密就在會議里!講解材料
- 四年級語文上冊第七單元習(xí)作寫信習(xí)題課件2新人教版
- 二零二五版交通事故醫(yī)療費用賠償協(xié)議3篇
- 2024年濟寧職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 2024年浙江東方職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 《工貿(mào)企業(yè)有限空間作業(yè)安全規(guī)定》知識培訓(xùn)
- 高層次人才座談會發(fā)言稿
- 垃圾清運公司管理制度(人員、車輛、質(zhì)量監(jiān)督、會計管理制度)
- 《建筑工程設(shè)計文件編制深度規(guī)定》(2022年版)
- 工程項目計價結(jié)算付款情況統(tǒng)計表
- GB/T 20554-2024海帶
- 廣東廣州中醫(yī)藥大學(xué)第一附屬醫(yī)院招聘筆試真題2022
- ISO 15189醫(yī)學(xué)實驗室認可內(nèi)審員培訓(xùn)試題附答案
- 高速公路交通安全設(shè)施設(shè)計及施工技術(shù)規(guī)范-JTJ-074-94
- 第八屆“雄鷹杯”小動物醫(yī)師技能大賽備考試題庫(含答案)
- (正式版)JBT 14587-2024 膠體鉛酸蓄電池 技術(shù)規(guī)范
評論
0/150
提交評論