版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第1章Java語言概述本章的主要內(nèi)容:1.1Java語言的發(fā)展里程1.2java的特點(diǎn) 1.3平臺(tái)無關(guān)性1.4Java虛擬機(jī)JVM1.5Java與C/C++之關(guān)系1.6Java運(yùn)行平臺(tái)1.7Java程序開發(fā)1.8Java開發(fā)工具箱1.9JDK1.5編譯器的新規(guī)定1.1Java語言的發(fā)展里程Java語言前身是Oak語言,于1991年推出,但僅限于SunMicrosystems公司內(nèi)部使用。1995年Oak語言改名為“Java”,并正式向公眾推出,主要貢獻(xiàn)者是JamesGosling。1.2版本的Java是Java語言發(fā)展過程中一個(gè)關(guān)鍵階段,從此,Sun公司將Java更名為Java2。經(jīng)過十年的發(fā)展,Java語言已經(jīng)發(fā)展到1.6版本。1.2java的特點(diǎn)(1/4)1.語法簡單(1)Java的風(fēng)格類似于C++(2)Java摒棄了C++中容易引發(fā)程序錯(cuò)誤的地方,如指針和內(nèi)存管理;(3)Java提供了豐富的類庫。2.面向?qū)ο竺嫦驅(qū)ο缶幊淌且环N先進(jìn)的編程思想,更加容易解決復(fù)雜的問題。面向?qū)ο罂梢哉f是Java最重要的特性。Java語言的設(shè)計(jì)完全是面向?qū)ο蟮模?.2java的特點(diǎn)(2/4)3.分布式JAVA從誕生就起就與網(wǎng)絡(luò)聯(lián)系在一起,它強(qiáng)調(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)當(dāng)Java用來創(chuàng)建瀏覽器時(shí),語言功能和一些瀏覽器本身提供的功能結(jié)合起來,使它更安全。Java語言在機(jī)器上執(zhí)行前,要經(jīng)過很多次的測(cè)試。其三級(jí)安全檢驗(yàn)機(jī)制可以有效防止非法代碼侵入,阻止對(duì)內(nèi)存的越權(quán)訪問。51.2java的特點(diǎn)(3/4)5.健壯性Java致力于檢查程序在編譯和運(yùn)行時(shí)的錯(cuò)誤。異常檢查可盡早的發(fā)現(xiàn)可能存在的錯(cuò)誤。類型檢查幫助檢查出許多開發(fā)早期出現(xiàn)的錯(cuò)誤。6.解釋運(yùn)行,高效率Java解釋器(運(yùn)行系統(tǒng))能直接運(yùn)行目標(biāo)代碼指令。Java程序經(jīng)編譯器編譯,生成的字節(jié)碼經(jīng)過精心設(shè)計(jì),并進(jìn)行了優(yōu)化,因此運(yùn)行速度較快,客服了以往解釋性語言運(yùn)行效率低的缺點(diǎn)。1.2java的特點(diǎn)(4/4)7.與平臺(tái)無關(guān)JAVA編譯器將JAVA程序編譯成二進(jìn)制代碼,即字節(jié)碼。字節(jié)碼有統(tǒng)一的格式,不依賴于具體的硬件環(huán)境。8.多線程Java提供的多線程功能使得在一個(gè)程序里可同時(shí)執(zhí)行多個(gè)小任務(wù)。9.動(dòng)態(tài)性Java的動(dòng)態(tài)特性是其面向?qū)ο笤O(shè)計(jì)方法的發(fā)展。它允許程序動(dòng)態(tài)地裝入運(yùn)行過程中所需要的類。1.3平臺(tái)無關(guān)性(1/2)平臺(tái)無關(guān)類型包括源代碼級(jí)和目標(biāo)代碼級(jí)兩種類型。C和C++屬于源代碼級(jí)平臺(tái)無關(guān),意味著用其寫的應(yīng)用程序不用修改只需重新編譯就可以在不同平臺(tái)上運(yùn)行。Java屬于目標(biāo)代碼級(jí)平臺(tái)無關(guān),主要靠Java虛擬機(jī)JVM來實(shí)現(xiàn)。對(duì)高級(jí)語言的翻譯方式有解釋和編譯兩種解釋方式就是一邊翻譯一邊運(yùn)行而編譯方式則是一次性翻譯好,生成目標(biāo)程序。1.3平臺(tái)無關(guān)性(2/2)解決移植性的方法有以下兩種方式:方式1:到一臺(tái)機(jī)器上將源程序重新編譯成適合該臺(tái)機(jī)器的機(jī)器代碼。方式2:將高級(jí)語言源程序編譯成一種與機(jī)器無關(guān)的中間代碼(如Java語言的字節(jié)碼),該中間代碼程序不能被操作系統(tǒng)直接執(zhí)行,需要由解釋其來解釋和執(zhí)行。Java語言采用方式2,將由解釋程序擴(kuò)展了的指令系統(tǒng)的機(jī)器稱為Java虛擬機(jī),簡稱JVM。1.4Java虛擬機(jī)JVM虛擬機(jī)是一種對(duì)計(jì)算機(jī)物理硬件計(jì)算環(huán)境的軟件實(shí)現(xiàn)。虛擬機(jī)是一種抽象機(jī)器,內(nèi)部包含一個(gè)解釋器(Interpreter),可以將其它高級(jí)語言編譯為虛擬機(jī)的解釋器可以執(zhí)行的代碼(稱這種代碼為中間語言IntermediateLanguage),實(shí)現(xiàn)高級(jí)語言程序的可移植性平臺(tái)無關(guān)性(SystemIndependence),無論是運(yùn)行在嵌入式設(shè)備還是多個(gè)處理器的服務(wù)器上,虛擬機(jī)都執(zhí)行相同的指令,所使用的支持庫也具有標(biāo)準(zhǔn)的API和完全相同或相似的行為。1.4Java虛擬機(jī)JVMJava虛擬機(jī)(JavaVirtualMachine,簡稱JVM)是一種抽象機(jī)器,它附著在具體操作系統(tǒng)上,本身具有一套虛擬機(jī)器指令,并有自己的棧,寄存器等,運(yùn)行JAVA程序不可少的機(jī)制。編譯后的JAVA程序指令并不直接在硬件系統(tǒng)CPU上執(zhí)行,而是在JVM執(zhí)行。在JVM上有一個(gè)Java解釋器用來解釋Java編譯器編譯后的程序。任何一臺(tái)機(jī)器只要配備了解釋器,就可以運(yùn)行這個(gè)程序,而不管這種字節(jié)碼是在何種平臺(tái)上生成的。圖1-1計(jì)算機(jī)硬件、操作系統(tǒng)、JVM與各種可執(zhí)行程序之間的關(guān)系機(jī)器代碼硬件操作系統(tǒng)JVM本地可執(zhí)行文件(.exe,.com文件)Java字節(jié)碼文件(.class文件)1.4Java虛擬機(jī)JVMJVM體系結(jié)構(gòu)圖類裝載器字節(jié)碼解釋器安全管理器垃圾收集器線程管理圖形Java虛擬機(jī)操作系統(tǒng)字節(jié)碼*.class文件圖1-2Java虛擬機(jī)體系結(jié)構(gòu)示意圖1.5Java與C/C++之關(guān)系相近之處Java中許多基本語句的語法和C++一樣,像常用的循環(huán)語句、控制語句等和C++幾乎一樣Java和C++是兩種完全不同的語言1.5Java與C/C++之關(guān)系不同之處Java去掉了C++語言的許多功能,Java中沒有#include和#define等預(yù)處理功能,用import語來句包含其它類和包;Java中沒有structure,union及typedef;Java中沒有不屬于類成員的函數(shù),沒有指針和多重繼承,Java只支持單重繼承;Java中禁用goto,但goto還是保留的關(guān)鍵字;Java中沒有操作符重載;Java中沒有全局變量,可以在類中定義公用、靜態(tài)的數(shù)據(jù)成員實(shí)現(xiàn)相同功能。……1.6Java運(yùn)行平臺(tái)1.三種平臺(tái)簡介J2SE:Java標(biāo)準(zhǔn)版或Java標(biāo)準(zhǔn)平臺(tái)。J2SE提供了標(biāo)準(zhǔn)的SDK開發(fā)平臺(tái)(以前稱做JDK開發(fā)平臺(tái))。J2EE:Java企業(yè)版或Java企業(yè)平臺(tái)。J2ME:Java微型版或Java小型平臺(tái)。2.安裝J2SE平臺(tái)——簡介JDK版本發(fā)布日期版本說明及主要內(nèi)容JDK1.0a21995.05正式對(duì)外發(fā)布JDK1.0.21996.01標(biāo)準(zhǔn)的I/O庫、網(wǎng)絡(luò)庫、applet、文件I/O以及基本的窗口庫等JDK1.11997.02內(nèi)部類、新的事件處理模型、RMI、JavaBean,JDBC、串行化、國際化、日歷類以及性能改進(jìn)等JDK121998.12浮點(diǎn)運(yùn)算改進(jìn)、StringGUI庫、集合、Java2D圖形、可訪問性(可視化GUI支持)、引用對(duì)象以及性能改進(jìn)等JDK1.32000.05性能改進(jìn)、CORBA兼容性、Java音頻支持以及JNDI等JDK1.42001.12斷言語句、64位地址空間(Solaris),新的I/O庫、模式匹配、鼠標(biāo)滑輪支持、IPv6,XML,WebStart支持、性能改進(jìn)及命名為Merlin的代碼等JDK1.52003.07通用性(代碼模塊)、允許一些云算符重載以及命名為Tiger的代碼等1.6Java運(yùn)行平臺(tái)3.環(huán)境變量JAVA_HOME為那些需要使用Java命令和JVM的程序提供了通用的路徑信息,其值應(yīng)設(shè)置為JDK的安裝目錄的路徑,JAVA_HOME=C:\jdk1.5CLASSPATH用于指明字節(jié)碼文件的位置。CLASSPATH=c:\jdk1.5\jre\lib\rt.jar;.PATH是操作系統(tǒng)使用的變量,用于搜索在Shell中輸入的希望執(zhí)行的命令。Java編譯器源文件編輯器字節(jié)碼文件由Web瀏覽器執(zhí)行文件名.java產(chǎn)生對(duì)于Java小應(yīng)用程序?qū)τ贘ava應(yīng)用程序由Java解釋器執(zhí)行圖1-1Java程序開發(fā)過程示意圖1.7Java程序開發(fā)1.7Java程序開發(fā)1.Java應(yīng)用程序的開發(fā)編寫源文件 Editplus等文本編輯器生成Hello.java編譯源文件生成字節(jié)碼javacHello.java加載運(yùn)行字節(jié)碼javaHello//Hello.javapublicclassHello{publicstaticvoidmain(Stringargs[]){System.out.println("你好,很高興學(xué)習(xí)Java");}}C:>javacHello.javaC:>javaHello1.7Java程序開發(fā)2.JavaApplet程序的開發(fā)編寫源文件Editplus等文本編輯器Boy.java編譯源文件生成字節(jié)碼javacBoy.java通過瀏覽器加載運(yùn)行字節(jié)碼Html文件myBoy.html<appletcode=Boy.classheight=100width=300></applet> 或appletviewewmyboy.html//Boy.javaimportjava.applet.*;importjava.awt.*;publicclassBoyextendsApplet{publicvoidpaint(Graphicsg){g.setColor(Color.blue);g.drawString("Java是一門很優(yōu)秀的語言",12,30);g.setColor(Color.red);g.drawString("我一定認(rèn)真學(xué)習(xí)Java",22,56);}}//myBoy.html<appletcode=Boy.classheight=100width=300></applet>C:>javacBoy.javaC:>appletviewewmyboy.html1.8Java開發(fā)工具箱Java開發(fā)工具箱(JDK-JavaDevelopmentKit)是Sun公司為用戶提供的集成和執(zhí)行applets和應(yīng)用程序的工具javac編譯器:可以用任何文字編輯器創(chuàng)建Java程序java翻譯器;用于執(zhí)行編譯過的Java應(yīng)用程序。appletviewer:可運(yùn)行applets而不必運(yùn)行Web瀏覽器。javap反匯編程序:從字節(jié)碼文件恢復(fù)java原代碼。javadoc工具:可以為所編寫的源文件生成HTML文檔1.9JDK1.5編譯器的新規(guī)定JDK1.5的編譯器javac.exe和以前版本的編譯器有了一個(gè)很大的不同,不再向下兼容,也就是說,如果在編譯源文件時(shí)沒有特別約定的話,用JDK1.5的編譯器生成的字節(jié)碼只能在安裝了JDK1.5或JRE1.5的Java平臺(tái)環(huán)境中運(yùn)行。第2章Java語言基礎(chǔ)2.1Java程序概況2.2基本數(shù)據(jù)類型2.3運(yùn)算符和表達(dá)式2.4Java語句2.1Java程序概況2.1.1Java程序結(jié)構(gòu)2.1.2Java注釋2.1.3Java關(guān)鍵字2.1.4Java標(biāo)識(shí)符2.1.5變量與常量2.1.1Java程序結(jié)構(gòu)Java源程序一般由一個(gè)或多個(gè)編譯單元組成,每個(gè)編譯單元只能包含以下內(nèi)容(空格和注釋除外):?package包語句?import導(dǎo)入語句?類的聲明?接口聲明圖2-1Java程序中各元素及其關(guān)系注釋0..npackage0..1import0..n成員變量0..n方法0..n局部變量0..n執(zhí)行語句0..n類1..nJava程序2.1.1Java程序結(jié)構(gòu)2.1.1Java程序結(jié)構(gòu)一個(gè)簡單的Java程序示例。/*這是一個(gè)簡單的Java程序示例程序*/packagemypack;importjava.util.*;publicclassExample{publicstaticvoidmain(Stringargs[]){System.out.println("Java歡迎您!");}}2.1.2Java注釋方式1://注釋一行例如:num=2;//num是計(jì)算器,用于累計(jì)選課人數(shù)方式2:/*一行或多行注釋*/例如:/*本方法用于計(jì)算階乘*/方式3:/**文檔注釋**/文檔注釋一般放在一個(gè)變量或函數(shù)定義說明之前,表示該段注釋應(yīng)包含在自動(dòng)生成的任何文檔中(即由javadoc生成的HTML文件)。這種注釋都是聲明條目的描述。2.1.3Java關(guān)鍵字abstractconstfinallyinterfacereturnthrowbooleancontinuefloatlongsafetransientbreakdefaultfornativeshorttruebydogotonewstatictrybytedoubleifnullsupervaluecaseelseimplementspackageswitchvoidcatchextendsimportprivatesynchronizedvolatilecharfalseinstanceofprotectedthiswhileclassfinalintpublicthread
2.1.4Java標(biāo)識(shí)符用來標(biāo)識(shí)類名、變量名、方法名、類型名、數(shù)組名、文件名的有效字符序列稱為標(biāo)識(shí)符。由字母、下劃線、美元符號(hào)和數(shù)字組成,并且第一個(gè)字符不能是數(shù)字。標(biāo)識(shí)符中的字母是區(qū)分大小寫的例子:判斷正誤(1)3max(2)class(3)room#(4)userName(5)User_name2.1.5變量與常量Java變量是一個(gè)由標(biāo)識(shí)符命名的項(xiàng)。變量具有一定類型,例如int型或class型,也具有作用域,其值可被改變。變量聲明的語法形式如下:varTypevarName[=value][,varName[=value]…];doublearea,r;在變量聲明格式前加上final修飾符,就聲明了一個(gè)常量。常量一旦被初始化以后就不可改變。常量聲明的語法形式如下:finalvarTypevarName[=value][,varName[=value]…];2.2基本數(shù)據(jù)類型2.2.1基本數(shù)據(jù)類型概況 1132.2.2基本數(shù)據(jù)類型轉(zhuǎn)換 1162.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-2Java語言數(shù)據(jù)類型數(shù)值類型整數(shù)類int,byte,short,long浮點(diǎn)類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來定義邏輯變量,定義時(shí)也可以賦給初值。例如:booleanx;//定義邏輯型變量xbooleanx=false;//定義邏輯型變量x,并賦值為false2.2.1基本數(shù)據(jù)類型概況2.整數(shù)類型常量:123,6000(十進(jìn)制),077(八進(jìn)制),0x3ABC(十六進(jìn)制)。整型變量的定義分為4種類型舉例字節(jié)長度bytebytex,y=1;1shortshortx,y=2;2intintx,y=3;4longlongx,y=4;82.2.1基本數(shù)據(jù)類型概況3.字符類型常量:unicode字符表中的字符就是一個(gè)字符常量例如‘A’,‘‘?’,‘9’,‘好’,‘き’,等。Java還使用轉(zhuǎn)意字符常量,如:‘\n’為換行轉(zhuǎn)意字符常量。變量的定義:使用關(guān)鍵字char來定義字符變量例如:charx=‘A’,漂亮=‘假’,jiafei;★特別提示:一個(gè)unicode字符占2個(gè)字節(jié)char型變量,內(nèi)存分配給2個(gè)字節(jié),占16位,最高位不是符號(hào)位,沒有負(fù)數(shù)的char。char型變量的取值范圍是0-65536。2.2.1基本數(shù)據(jù)類型概況4.浮點(diǎn)類型浮點(diǎn)類型包括float型和double型。浮點(diǎn)型數(shù)值缺省為double型,float型在數(shù)值之后加f或F例如,float型常量:453.5439f,21379.987F,2e40f,double型常量:21389.5439d(d可以省略),6e-140。float型變量的定義:floatx,y=22.76f;double型變量的定義:doublex,y=12.762.2.2基本數(shù)據(jù)類型轉(zhuǎn)換含義:一種基本數(shù)據(jù)類型變量轉(zhuǎn)變成另一種基本類型變量。類型轉(zhuǎn)換方式:窄化和拓寬轉(zhuǎn)換。拓寬(Widening)轉(zhuǎn)換編譯時(shí)可以自動(dòng)執(zhí)行拓寬轉(zhuǎn)換(稱為Promotion,提升)。窄化(Narrowing)轉(zhuǎn)換則總是要求顯式執(zhí)行強(qiáng)制轉(zhuǎn)換(稱為Cast,轉(zhuǎn)型)。Java語言中不同類型之間不能相互賦值,同種類型低精度值可以賦給高精度變量,反之則需要使用強(qiáng)制類轉(zhuǎn)換,此時(shí)可能導(dǎo)致數(shù)據(jù)精度的損失。2.2.2基本數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)精度從“低”到“高”排序:byte→short(char)→int→long→float→double規(guī)則1:當(dāng)把精度低的變量的值賦給精度高的變量時(shí),系統(tǒng)自動(dòng)完成數(shù)據(jù)類型的轉(zhuǎn)換,如int型轉(zhuǎn)換成long型規(guī)則2:當(dāng)把精度高的變量的值賦給精度低的變量時(shí),必須使用顯示類型轉(zhuǎn)換運(yùn)算。(類型名)要轉(zhuǎn)換的值;intx=(int)34.89;規(guī)則3:char與byte或short之間的賦值必須實(shí)行強(qiáng)制轉(zhuǎn)換。2.2.2基本數(shù)據(jù)類型轉(zhuǎn)換byteb1=18,b2;shortsint1,sint2;charch1,ch2=’A’;ch1=char(b1);b2=(byte)ch2;sint2=(short)ch2;注意事項(xiàng):強(qiáng)制轉(zhuǎn)換運(yùn)算可能導(dǎo)致精度的損失。當(dāng)把一個(gè)整數(shù)賦值給一個(gè)byte、short、int或long型變量時(shí),不可以超出這些變量的取值范圍,否則必須進(jìn)行類型轉(zhuǎn)換運(yùn)算。【實(shí)例2-3】publicclasstransExample{ publicstaticvoidmain(Stringargs[]){ bytea=120;shortb=255;intc=2200;longd=8000;floatf;doubleg=0.1234567812345678;b=a;c=(int)d;f=(float)g; System.out.println("a="+a);System.out.println("b="+a);System.out.println("c="+a);System.out.println("d="+a);System.out.println("e="+a);System.out.println("f="+a);System.out.println("g="+a);}}2.2.2基本數(shù)據(jù)類型轉(zhuǎn)換【實(shí)例2-3】運(yùn)行結(jié)果為:a=120b=120c=8000d=8000f=0.12345678g=0.12345678123456782.3運(yùn)算符和表達(dá)式2.3.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式2.3.2關(guān)系運(yùn)算符與關(guān)系表達(dá)式2.3.3邏輯運(yùn)算符與邏輯表達(dá)式2.3.4賦值運(yùn)算符與賦值表達(dá)式2.3.5位運(yùn)算符2.3.6條件運(yùn)算符2.3.7instanceof運(yùn)算符2.3.8一般表達(dá)式2.3.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式Java算術(shù)運(yùn)算符主要包括一元運(yùn)算符(如+,-,++,--)和二元運(yùn)算符(如,+,-,*,/,%),與C/C++基本相同算術(shù)表達(dá)式是用算術(shù)符號(hào)和操作元連接起來的符合Java語法規(guī)則的式子。例如:(f*b)+(i/c)-(d*s)2.3.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式j(luò)ava將按運(yùn)算符兩邊操作元的最高精度保留結(jié)果。操作元的精度從低到高排列順序是:byte→short→int→long→float→double。?執(zhí)行任何算術(shù)運(yùn)算或按位運(yùn)算,“比int小”的數(shù)據(jù)(char、byte、short)在正式執(zhí)行運(yùn)算之前,那些值會(huì)自動(dòng)轉(zhuǎn)換成int?整型、實(shí)型、字符型數(shù)據(jù)可以混合運(yùn)算。運(yùn)算中,不同類型的數(shù)據(jù)先轉(zhuǎn)化為同一類型,然后進(jìn)行運(yùn)算,轉(zhuǎn)換從低級(jí)到高級(jí)。例如:若將一個(gè)float值與一個(gè)double值相乘,結(jié)果就是double;如將一個(gè)int值和一個(gè)long值相加,則結(jié)果為long。2.3.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式根據(jù)上述規(guī)則5/2的結(jié)果為2,因?yàn)檫\(yùn)算符“/”左右操作數(shù)均為int型,因此結(jié)果也為int型;而5.2/2的結(jié)果為2.5,因?yàn)檫\(yùn)算符“/”左操作數(shù)為double型,右操作數(shù)為int型,因此運(yùn)算時(shí)首先統(tǒng)一為double型,顯然結(jié)果也為double型?!緦?shí)例X-5】//程序2-5classautoPromoteExample{publicstaticvoidmain(Stringargs[]){byteb=1;charc='b';shorts=10;inti=100;floatf=1.23f;doubled=6.78,result;result=(f*b)+(i/c)-(d*s);System.out.println("result="+result);}}2.3.2關(guān)系運(yùn)算符與關(guān)系表達(dá)式運(yùn)算符表達(dá)式返回true的情況>op1>op2op1大于op2>=op1>=op2op1大于或等于op2<o(jì)p1<o(jì)p2op1小于op2<=op1<=op2op1小于或等于op2==op1==op2op1與op2相等!=op1!=op2op1與op2不等2.3.3邏輯運(yùn)算符與邏輯表達(dá)式操作數(shù)取值表達(dá)式運(yùn)算結(jié)果op1op2op1&&op2op1||op2!op1falsefalsefalsefalsetruefalsetruefalsetruetruetruefalsefalsetruefalsetruetruetruetruefalse2.3.4賦值運(yùn)算符與賦值表達(dá)式賦值運(yùn)算符“=”是雙目運(yùn)算符,左面的操作元必須是變量。級(jí)別是14級(jí),結(jié)合性從右到左。2.3.5位運(yùn)算符Java位運(yùn)算符主要面對(duì)基本數(shù)據(jù)類型,包括byte、short、int、long和char。位運(yùn)算符包括“按位與”&、“按位或”|、“按位非”~、“按位異或”^、左移<<、右移>>。此外,Java引入一個(gè)專門用于邏輯右移運(yùn)算符>>>,它采用了所謂的零擴(kuò)展技術(shù),不論原值是正或負(fù),一律在高位補(bǔ)0。例如:inta=-2,b;b=a>>>30;2.3.6條件運(yùn)算符條件運(yùn)算符是一個(gè)3目運(yùn)算符,符號(hào)是:“?:”。用法如下:op1?op2:op3要求第一個(gè)操作元op1的值必須是boolean型數(shù)據(jù)。運(yùn)算法則是:當(dāng)op1的值是true時(shí),運(yùn)算的結(jié)果是op2的值;當(dāng)op1的值是false時(shí),運(yùn)算的結(jié)果是op3的值。Java要求:op2與op3必須同類型。例如,12>8?100:200的結(jié)果是100;12<8?100:200的結(jié)果是200。2.3.7instanceof運(yùn)算符該運(yùn)算符是雙目運(yùn)算符,左面的操作元是一個(gè)對(duì)象,右面是一個(gè)類。當(dāng)左面的對(duì)象是右面的類創(chuàng)建的對(duì)象時(shí),該運(yùn)算的結(jié)果是true,否則是false。2.3.8一般表達(dá)式Java的一般表達(dá)式就是用運(yùn)算符及操作元連接起來的符合Java規(guī)則的式子,簡稱表達(dá)式。一個(gè)Java表達(dá)式必須能求值,即按著運(yùn)算符的計(jì)算法則,可以計(jì)算出表達(dá)式的值。例如,假如intx=1,y=-2,n=10;那么,表達(dá)式x+y+(--n)*(x>y&&x>0?(x+1):y)的值是int型數(shù)據(jù),結(jié)果為17。2.4Java語句2.4.1Java語句概述2.4.2分支語句2.4.3循環(huán)語句2.4.4跳轉(zhuǎn)語句2.4.5輸入輸出語句2.4.1Java語句概述Java語言中的語句可分為以下5類:(1)方法調(diào)用語句:例如reader.nextInt();(2)表達(dá)式語句: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(表達(dá)式){若干語句} else{若干語句}?多條件if-elseif-else語句if(表達(dá)式1){若干語句}elseif(表達(dá)式2){若干語句}……elseif(表達(dá)式n){若干語句}else{若干語句}if(表達(dá)式)的表達(dá)式的值必須是boolean型【實(shí)例2-6】publicclassmultelseExample{ publicstaticvoidmain(Stringargs[]){ intscore=88; Stringstr="不及格"; if(score>=90&&score<=100) {str="優(yōu)秀";} elseif(score>=80&&score<=89) {str="良好";} elseif(score>=70&&score<=79) {str="中等";} elseif(score>=60&&score<=69) {str="及格";} System.out.println("成績?yōu)?+str);}}2.4.2分支語句2.switch開關(guān)語句--格式switch(表達(dá)式){case常量值1:若干個(gè)語句break;………case常量值n:若干個(gè)語句break;default:若干語句}【實(shí)例2-7】輸入月份,顯示該月份所在季節(jié)。publicclassswitchExample{ publicstaticvoidmain(Stringargs[]){ intmonth=1; Stringstr=""; switch(month) { case1: case2: case3: str="春季"; break; case4: case5: case6: str="夏季"; break; case7: case8: case9: str="秋季"; break; default: str="冬季"; } System.out.println("月份"+month+"屬于"+str);}}2.4.3循環(huán)語句1.while循環(huán)while(表達(dá)式){若干語句}
2.dowhile循環(huán)dowhile{若干語句}(表達(dá)式)
3.for循環(huán)for(表達(dá)式1;表達(dá)式2;表達(dá)式3){若干語句}“表達(dá)式2”必須是一個(gè)求值為boolean型數(shù)據(jù)的表達(dá)式(b)dowhile循環(huán)循環(huán)體True表達(dá)式False循環(huán)體True表達(dá)式False表達(dá)式1True表達(dá)式2False循環(huán)體表達(dá)式3(a)while循環(huán)(c)for循環(huán)圖2-3while、dowhile循環(huán)和for循環(huán)示意圖2.4.4跳轉(zhuǎn)語句跳轉(zhuǎn)語句包括break語句和continue語句。?break語句功能:跳出當(dāng)前的循環(huán)體使用形式:break;//不帶標(biāo)簽breakLabel;//帶標(biāo)簽不帶標(biāo)簽的break語句使程序跳出它所在的那一層循環(huán)結(jié)構(gòu)帶標(biāo)簽的break語句使程序跳出標(biāo)簽所指示的循環(huán)結(jié)構(gòu)【實(shí)例2-9】break命令應(yīng)用舉例publicclassbreakExample{publicstaticvoidmain(Stringargs[]){ inti,j=0; outer: for(i=0;i<5;i++) for(j=0;j<5;j++){ System.out.println(i+""+j); if(j==1) breakouter; } System.out.println("最終值:"+i+""+j); }}2.4.4跳轉(zhuǎn)語句?continue語句功能:結(jié)束本次循環(huán)使用形式:continue;//不帶標(biāo)簽continueLable;//帶標(biāo)簽不帶標(biāo)簽的continue語句的作用是終止當(dāng)前循環(huán)結(jié)構(gòu)的本輪循環(huán)而直接開始下一輪循環(huán)。對(duì)for循環(huán),就是忽略循環(huán)體中后面的語句,跳到表達(dá)式3執(zhí)行對(duì)while或dowhile循環(huán)就是直接轉(zhuǎn)去求解邏輯表達(dá)式2.4.4跳轉(zhuǎn)語句?continue語句帶標(biāo)簽的continue語句的作用就是把程序直接轉(zhuǎn)到標(biāo)簽所指的循環(huán)結(jié)構(gòu)的下一次循環(huán),而不管被他嵌套的以及continue語句所在的循環(huán)結(jié)構(gòu)運(yùn)行到了哪那一輪?!緦?shí)例2-10】continue命令應(yīng)用舉例publicclasscontinueExample{publicstaticvoidmain(Stringargs[]){intsum=0,i,j;for(i=1;i<=10;i++)//該循環(huán)計(jì)算3+6+9。{if(i%3!=0){continue;}else{}sum=sum+i;}System.out.println("sum="+sum);}}2.4.4跳轉(zhuǎn)語句continue標(biāo)號(hào)語句和break標(biāo)號(hào)語句的比較相同點(diǎn):?都必須用在循環(huán)中,用于流程控制;?執(zhí)行這兩個(gè)語句時(shí),若后面還有其他語句,將不再繼續(xù)執(zhí)行。不同點(diǎn):? continue語句的標(biāo)號(hào)必須位于封閉的循環(huán)語句的前面?break語句的標(biāo)號(hào)只需位于封閉語句的前面,但不一定是循環(huán)語句2.4.5輸入輸出語句1.?dāng)?shù)據(jù)輸出:print(或println)System.out.println(“Hello”)System.out.println(“”+x)2.?dāng)?shù)據(jù)輸出:printfSystem.out.printfprintf(格式控制部分,表達(dá)式1,表達(dá)式2,…表達(dá)式n);★JDK1.5版本新增功能3.?dāng)?shù)據(jù)的輸入:ScannerScanner是JDK1.5新增的一個(gè)類,可以使用該類創(chuàng)建一個(gè)對(duì)象:第3章類與對(duì)象3.1面向?qū)ο蠡A(chǔ)3.2類3.3對(duì)象3.4變量3.5方法3.6包3.7import語句3.8訪問權(quán)限3.9基本類型數(shù)據(jù)的類包裝3.1面向?qū)ο蠡A(chǔ)3.1.1編程語言的幾個(gè)發(fā)展階段3.1.2面向過程的程序設(shè)計(jì)3.1.3面向?qū)ο蟮某绦蛟O(shè)計(jì)3.1.4兩種程序設(shè)計(jì)語言的簡單比較3.1.1編程語言的幾個(gè)發(fā)展階段1.機(jī)器語言機(jī)器語言是由機(jī)器指令組成的語言。2.匯編語言匯編語言是符號(hào)化了的機(jī)器語言,3.高級(jí)程序設(shè)計(jì)語言高級(jí)程序設(shè)計(jì)語言屏蔽了機(jī)器的細(xì)節(jié),提高了語言的抽象層次,程序中可以采用具有一定含義的數(shù)據(jù)命名和容易理解的執(zhí)行語句。4.面向?qū)ο蟮恼Z言面向?qū)ο蟮恼Z言可以直接描述客觀事物以及它們之間的聯(lián)系,將客觀事物看作具有屬性和方法(行為)的對(duì)象,類是由同一類對(duì)象的共同屬性和方法組成。Java語言屬于面向?qū)ο蟮恼Z言。3.1.2面向過程的程序設(shè)計(jì)分析問題的主要方法是以實(shí)現(xiàn)問題或問題域中的處理過程為中心,同時(shí)考慮適用于實(shí)際問題的數(shù)據(jù)結(jié)構(gòu)和程序的輸入輸出,程序是由多個(gè)具有輸入輸出的處理過程組成。程序設(shè)計(jì)的基本思路是:自頂向下,逐步求精;將程序按功能劃分成若干基本模塊;模塊之間關(guān)系盡可能簡單,各模塊的功能相對(duì)獨(dú)立;每個(gè)模塊是由順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)構(gòu)成的子程序。面向過程語言一般提供多種基本數(shù)據(jù)類型和自定義數(shù)據(jù)類型。(a)程序結(jié)構(gòu)Main()f1()f2()f3()f2-1()(b)動(dòng)態(tài)調(diào)用關(guān)系mainf1f2-1f2f3f2-2數(shù)據(jù)1數(shù)據(jù)2數(shù)據(jù)3f2-2()圖2-1面向過程的程序設(shè)計(jì)語言的程序結(jié)構(gòu)及動(dòng)態(tài)調(diào)用關(guān)系3.1.3面向?qū)ο蟮某绦蛟O(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路是:首先,將數(shù)據(jù)及對(duì)數(shù)據(jù)的操作(方法)放在一起,作為一個(gè)相互依存不可分割的整體,即對(duì)象;其次,對(duì)同類對(duì)象的共同屬性和方法進(jìn)行抽象形成類;類通過一個(gè)簡單的外部接口與外界發(fā)生關(guān)系,對(duì)象與對(duì)象之間通過消息進(jìn)行通信。因此,面向?qū)ο蟪绦蛟O(shè)計(jì)通常包含系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、對(duì)象設(shè)計(jì)和對(duì)象實(shí)現(xiàn)幾個(gè)階段。3.1.3面向?qū)ο蟮某绦蛟O(shè)計(jì)系統(tǒng)分析:理解應(yīng)用系統(tǒng)的定義及建立應(yīng)用系統(tǒng)的對(duì)象模型,分析和發(fā)展對(duì)象,定義對(duì)象的屬性和內(nèi)部狀態(tài)變換,定義外部事件和對(duì)象之間的聯(lián)系和約束,最終建立應(yīng)用系統(tǒng)的對(duì)象模型、動(dòng)態(tài)模型及功能模型。系統(tǒng)設(shè)計(jì):確立對(duì)象模型的實(shí)現(xiàn)方法。將系統(tǒng)分解為子系統(tǒng),確立應(yīng)用系統(tǒng)固有的并發(fā)性、分配處理器的任務(wù),選擇數(shù)據(jù)存儲(chǔ)的管理手段、處理全局資源的訪問,確立應(yīng)用系統(tǒng)的邊界等等。3.1.3面向?qū)ο蟮某绦蛟O(shè)計(jì)對(duì)象設(shè)計(jì):將系統(tǒng)分析階段建立的三種模型轉(zhuǎn)換為類。將應(yīng)用系統(tǒng)的對(duì)象模型轉(zhuǎn)換為類的屬性(主要考慮對(duì)象關(guān)聯(lián)的實(shí)現(xiàn)方法),動(dòng)態(tài)模型轉(zhuǎn)換為類的方法(最好選用事件驅(qū)動(dòng)的運(yùn)行環(huán)境-時(shí)間驅(qū)動(dòng)的運(yùn)行環(huán)境難于實(shí)現(xiàn)并發(fā)處理),功能模型轉(zhuǎn)換為主控模塊或子控模塊(可以采用時(shí)間驅(qū)動(dòng)或事件驅(qū)動(dòng)的方式實(shí)現(xiàn)流程控制)。對(duì)象實(shí)現(xiàn):用面向?qū)ο蟮某绦蛟O(shè)計(jì)語言實(shí)現(xiàn)對(duì)象設(shè)計(jì)階段定義的類。選擇合適的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言及開發(fā)環(huán)境,定義類的屬性及方法,編寫主控模塊及子控模塊,針對(duì)具體語言進(jìn)行性能調(diào)整。3.1.3面向?qū)ο蟮某绦蛟O(shè)計(jì)4.面向?qū)ο蟪绦蛟O(shè)計(jì)語言的程序結(jié)構(gòu)面向?qū)ο蟪绦蛟O(shè)計(jì)語言處理保留了3種基本控制結(jié)構(gòu)和函數(shù)結(jié)構(gòu)外,新增加了“類”結(jié)構(gòu)。類結(jié)構(gòu)是一種更為高級(jí)的程序結(jié)構(gòu),它綜合了數(shù)據(jù)結(jié)構(gòu)和函數(shù)結(jié)構(gòu),不僅可以包含更復(fù)雜的數(shù)據(jù)屬性和數(shù)據(jù)結(jié)構(gòu),還包含著對(duì)這些數(shù)據(jù)的操作。是數(shù)據(jù)和操作高度統(tǒng)一的整體,具有更高的內(nèi)聚性、安全性、穩(wěn)定性和可重用性。類和類之間可以建立更為深刻的繼承和包含關(guān)系,使得程序結(jié)構(gòu)更加復(fù)雜、更加合理,同時(shí)也更加穩(wěn)定。類的引入除了改進(jìn)程序結(jié)構(gòu)外,還可以和現(xiàn)實(shí)世界或問題域中的概念或?qū)嶓w對(duì)應(yīng)起來,是現(xiàn)實(shí)世界中實(shí)體屬性和行為的抽象。圖2-2面向?qū)ο蟮某绦蚪Y(jié)構(gòu)示意圖表示自包含程序結(jié)構(gòu)函數(shù)結(jié)構(gòu)類結(jié)構(gòu)包結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)圖2-3面向?qū)ο蟪绦蚰P图皩?duì)應(yīng)的java程序f1()f2()f3()mypackageMyClassAnotherClasspackagemypackage;classMyClass{inta;voidf1(){}voidf2(){}}classAnotherClass{inta;voidf3(){}}對(duì)應(yīng)的java程序3.1.4兩種程序設(shè)計(jì)語言的簡單比較方法名稱面向過程(結(jié)構(gòu)化)方法面向?qū)ο蠓椒ㄜ浖_發(fā)結(jié)構(gòu)化系統(tǒng)分析結(jié)構(gòu)化系統(tǒng)設(shè)計(jì)結(jié)構(gòu)化系統(tǒng)開發(fā)面向?qū)ο笙到y(tǒng)分析面向?qū)ο笙到y(tǒng)設(shè)計(jì)面向?qū)ο笙到y(tǒng)開發(fā)高級(jí)語言發(fā)展歷程ALGOLFortranPascalCSimulaSmalltalkC++Java編程的核心數(shù)據(jù)結(jié)構(gòu)+算法對(duì)象+消息優(yōu)點(diǎn)技術(shù)成熟,已全面標(biāo)準(zhǔn)化并推向?qū)嵱冕槍?duì)高技術(shù)的復(fù)雜難題而研制,能更好地實(shí)現(xiàn)軟件的可靠性和安全性缺點(diǎn)無法處理高技術(shù)領(lǐng)域復(fù)雜的非規(guī)則信息面向?qū)ο蟮南到y(tǒng)分析與設(shè)計(jì)尚未標(biāo)準(zhǔn)化,應(yīng)用尚不廣泛3.2類在面向?qū)ο蟪绦蛟O(shè)計(jì)中,一個(gè)對(duì)象是客觀事物的屬性和行為密封成的一個(gè)整體。類是某些對(duì)象的共同特征(屬性和方法)的表示,對(duì)象是類的實(shí)例。類是組成Java程序的基本要素。類封裝了一類對(duì)象的狀態(tài)和方法。類是用來定義對(duì)象的模板??梢杂妙悇?chuàng)建對(duì)象,當(dāng)使用一個(gè)類創(chuàng)建了一個(gè)對(duì)象時(shí),就是給出了這個(gè)類的一個(gè)實(shí)例。3.2類1.類的基本構(gòu)成在語法上,類由兩部分構(gòu)成:類聲明和類體?;靖袷綖椋?/p>
修飾符class類名[extends父類名]{ 成員變量聲明及初始化; 方法聲明及方法體;}3.2類2.類聲明的詳細(xì)格式:
[public][abstract|final]classclassName[extendssuperclassName][implementsinterfaceNameList] { 成員變量聲明及初始化; 方法聲明及方法體; }3.2類public:訪問權(quán)限修飾詞。如果一個(gè)類被聲明為public,那么與它不在同一個(gè)包中的類也可以通過引用它所在的包來使用這個(gè)類,否則這個(gè)類就只能被同一包中的類使用。abstract:對(duì)父類所加的修飾詞。抽象類,不能被實(shí)例化生成自己的對(duì)象,通常只定義了一些變量和方法供繼承使用。被聲明為abstract的抽象類往往包含有被聲明為abstract的抽象方法,這些方法由類的子類完成實(shí)現(xiàn)細(xì)節(jié)。如果一個(gè)類中有一個(gè)方法是抽象方法,則類必須聲明為抽象。3.2類final:對(duì)子類所加的修飾詞。最終類,不能再派生出新的子類。extends:后跟父類名稱implements:列出一個(gè)或多個(gè)接口3.2類3.類體格式類體中定義了該類中所有的變量和該類所支持的方法。
classclassName{ //成員變量的定義[訪問控制修飾符][其他修飾符]類型
變量名稱; //成員方法的定義[訪問控制修飾符][其他修飾符]返回類型
方法名稱(參數(shù)列表)[拋出異常]{statements} }//3.2類成員變量訪問控制修飾符說明:訪問控制修飾符對(duì)在該類以外的代碼中訪問被修飾的屬性起控制作用,不影響在該內(nèi)部對(duì)該屬性的訪問性。public:使用public修飾的屬性的可見范圍是整個(gè)程序,可以在任何一個(gè)類的方法代碼中訪問該屬性,訪問時(shí)需要通過該類的對(duì)象實(shí)例來對(duì)屬性進(jìn)行限定。屬性一般使用public修飾,除非該屬性允許其他人進(jìn)行任意訪問和修改protected:使用protected修飾的屬性的可見范圍是同一包內(nèi)的所有類和該類所有子類(可以不再同一包中),即在同一包內(nèi)的其他類或不同包中子類的方法可以訪問該屬性,主要用于屬性被子類繼承的情況。3.2類成員變量訪問控制修飾符說明:private:使用private修飾的屬性的可見范圍是該屬性所屬的類,即只有同類中的方 法可以訪問該屬性,出了這個(gè)類的范圍,即使同包內(nèi)的類或子類也不能訪問。該訪問控制符一般用來封裝屬性,類外部的代碼不能直接訪問該屬性,必須通過公有的方法接口來對(duì)該屬性進(jìn)行操作。缺省:如果屬性前面不加訪問控制符,即為包可見性,同包內(nèi)的類都可以訪問該屬性。3.2類?成員變量其他修飾符說明:final:在簡單變量屬性前面使用final,表示該屬性為常數(shù)。如果在對(duì)象變量屬性前面加上final,則表示該變量不能指向新的對(duì)象,但是所指向的對(duì)象的屬性卻可以改變,這和對(duì)象變量的值可以修改、但指向的對(duì)象不能修改的情況正好相反(后者如字符串變量)。transient:指明變量是臨時(shí)常量。volatile:指明變量是一個(gè)共享變量。3.2類?成員變量其他修飾符說明:static:默認(rèn)屬性為非靜態(tài)屬性(實(shí)例屬性)。JVM為每個(gè)對(duì)象實(shí)例屬性分配不同內(nèi)存。使用static修飾的屬性為靜態(tài)屬性(類屬性)。該屬性是所屬類創(chuàng)建的所有對(duì)象實(shí)例的公有屬性,也就是該類所有對(duì)象的公共變量或全局變量,而不是每個(gè)對(duì)象實(shí)例專有的屬性。從保存該屬性的內(nèi)存單元來看,其內(nèi)存的分配是在創(chuàng)建對(duì)象之前就進(jìn)行了,即在JVM加載類時(shí)完成的。final修飾的類屬性為常量,不可改變。3.2類方法訪問控制修飾符的說明[public|protected|private]。意義和修飾屬性的情況一樣,控制方法的可見范圍。方法一般為public,表示對(duì)外的接口,但也有私有方法或保護(hù)的方法,僅供類本身調(diào)用或子類調(diào)用。public:一個(gè)類中被聲明為public的方法(或變量)是“公開的”,意味著只要能使用這個(gè)類,就可以直接使用這個(gè)方法(或直接存取這個(gè)變量的值)。3.2類方法訪問控制修飾符的說明protected:一個(gè)類中被聲明為public的方法(或變量)是“受限的”,意味著他們僅能被與該類處于同一包的類及該類的子類所直接使用或存取。private:一個(gè)類中被聲明為public的方法(或變量)是“私有的”,除了聲明他們的類外,不能被任何其他的類直接使用或存取。缺省friendly:只能被同一包中的類直接使用或存取。3.2類?方法其他修飾符的說明static:默認(rèn)方法為非靜態(tài)方法(實(shí)例方法)。JVM為每個(gè)對(duì)象實(shí)例屬性分配不同內(nèi)存。使用static修飾的方法為靜態(tài)方法(類方法)。該方法不適于任何一個(gè)對(duì)象,而是屬于整個(gè)類,是該類所有對(duì)象實(shí)例的公共方法,此方法對(duì)整個(gè)類來說是唯一的。類方法在該類被加載到內(nèi)存時(shí),就分配了相應(yīng)的入口地址,即使該類沒有創(chuàng)建對(duì)象,也可以直接通過類名調(diào)用方法。3.2類?方法其他修飾符的說明final:聲明類的方法是最終的,在子類中不能對(duì)該方法進(jìn)行重新實(shí)現(xiàn),即覆蓋或者擴(kuò)展。該修飾符用于控制類方法的繼承。abstract:聲明方法是抽象的,不可能有具體實(shí)現(xiàn)的方法體。native:聲明方法是通過調(diào)用本地方法來實(shí)現(xiàn)功能,如調(diào)用C函數(shù)。synchronized:聲明該方法可實(shí)現(xiàn)線程的同步。3.3對(duì)象采用Java語言編程時(shí),大多數(shù)情況下是對(duì)具體的對(duì)象進(jìn)行操作的。也就是說,要求以類作為模板,也可將類理解為對(duì)象的制造廠,專門用來創(chuàng)建類的實(shí)例(對(duì)象)圖3-3類是對(duì)象的制造廠示意圖New方法屬性創(chuàng)建對(duì)象請(qǐng)求產(chǎn)生新的類實(shí)例3.3對(duì)象1.創(chuàng)建對(duì)象?創(chuàng)建對(duì)象語法格式:
類名對(duì)象名;//聲明對(duì)象對(duì)象名=new類名();//創(chuàng)建對(duì)象?對(duì)象的聲明的格式為:類名對(duì)象名例如:MyDatedate;3.3對(duì)象1.創(chuàng)建對(duì)象?對(duì)象的實(shí)例化與初始化:用new操作符創(chuàng)建對(duì)象,即實(shí)例化一個(gè)對(duì)象,并按照對(duì)象的類型分配內(nèi)存;用構(gòu)造方法對(duì)它進(jìn)行初始化。通常new要與構(gòu)造方法配合使用。例如:newString(“Howareyou!”);就是對(duì)系統(tǒng)字符串類String的構(gòu)造方法的調(diào)用,并初始化為“Howareyou!”3.3對(duì)象1.創(chuàng)建對(duì)象?對(duì)象的實(shí)例化與初始化:例如:importJava.awt.*;Fontfont;//line1font=newFont(“TimesRoman”,F(xiàn)ont.BOLD,36);//line2也可以將line1和line2兩行語句合并為如下一行語句:Fontfont=newFont(“TimesRoman”,F(xiàn)ont.BOLD,36);3.3對(duì)象2.對(duì)象的使用對(duì)象的使用是通過一個(gè)引用類型的變量來實(shí)現(xiàn),包括引用對(duì)象的成員變量和方法,通過運(yùn)算符‘?’可以實(shí)現(xiàn)對(duì)變量的訪問和方法的調(diào)用。例如:MyDatedate=newMyDate();定義了一個(gè)MyDate類型的對(duì)象date,以下是對(duì)象的使用。date.day //引用date的成員變量daydate.tomorrow()//調(diào)用date的方法tomorrow()3.3對(duì)象3.對(duì)象的消亡當(dāng)對(duì)象使用完畢后,就應(yīng)將無用的對(duì)象賦空值(null),再由Java的垃圾收集器收集并釋放空間。3.4變量1.類中變量分類局部變量是在方法體中定義的變量和方法的參數(shù)。成員變量是在類屬性定義部分所定義的變量,又可分為實(shí)例變量和類變量。類變量就是在聲明時(shí)加上“static”修飾符的成員變量,故又稱靜態(tài)變量。3.4變量1.類中變量分類//程序3-2classvarExample{intx; staticinty; intfun(intz){ inta; x=a;} } x和y是成員變量,其中x是實(shí)例變量,y是類變量。z和a是局部變量,其中z是方法fun的參數(shù),a是方法fun中定義的變量。3.4變量2.變量的內(nèi)存分配Java語言中數(shù)據(jù)類型分為基本數(shù)據(jù)類型和復(fù)合類型,相應(yīng)地Java語言中變量可分為基本變量和復(fù)合變量?;咀兞吭谡f明時(shí)由系統(tǒng)自動(dòng)分配內(nèi)存,復(fù)合變量則必須使用new來申請(qǐng)內(nèi)存。下面以類變量(即class變量)為例來說明復(fù)合變量的內(nèi)存分配。首先在說明變量時(shí),在內(nèi)存中為其建立一個(gè)引用,并置初值為null,表示不指向任何內(nèi)存空間;其次使用new申請(qǐng)內(nèi)存,內(nèi)存大小依class的定義而定,并將該段內(nèi)存的首址賦給引用。3.4變量classBox{floathigh,weight; voidoutputArea(Strings) System.out.println(“Area=”+high*weight);}}classstoreExample{publicstaticvoidmain(Stringargs[]) Boxbox;//line1:聲明對(duì)象 box=newBox();//line2/*為對(duì)象分配內(nèi)存,使用new和默認(rèn)構(gòu)造方法*/ …..}圖3-4內(nèi)存分配示意圖0height
boxBoxbox;0weight0xA75boxbox=newBox();3.4變量2.變量的內(nèi)存分配圖3-4中左半部分顯示的是執(zhí)行語句“Boxbox;”后的內(nèi)存情況,右半部分顯示的是執(zhí)行語句“box=newBox();”后的內(nèi)存情況。執(zhí)行語句“box=newBox();”時(shí),系統(tǒng)將作以下兩件事:(1)為height和weight分配內(nèi)存空間;(2)返回一個(gè)引用給box,確保box可以操作管理分配給height和weight的內(nèi)存單元。3.4變量3.實(shí)例變量和類變量的簡單比較:一個(gè)類通過使用new運(yùn)算符可以創(chuàng)建多個(gè)不同的對(duì)象,這些對(duì)象的實(shí)例變量被分配不同的內(nèi)存空間,如果這個(gè)類中的成員變量有類變量,那么所有對(duì)象的這個(gè)類變量都被分配相同的一處內(nèi)存,改變其中一個(gè)對(duì)象的這個(gè)變量會(huì)影響其他對(duì)象的這個(gè)變量值。類變量必須在類體中聲明,并且使用關(guān)鍵字“static”,因此也稱為靜態(tài)變量;實(shí)例變量在類體中聲明但不使用關(guān)鍵字“static”,也稱為非靜態(tài)變量。3.4變量3.實(shí)例變量和類變量的簡單比較:類變量在類被加載時(shí)完成相應(yīng)的初始化工作,類變量在一個(gè)運(yùn)行系統(tǒng)中只有一份供整個(gè)類和實(shí)例對(duì)象共享的值,該值有可能被類(及其子類)和它們所創(chuàng)建的實(shí)例改變,每一次的改變都將影響到該類(及其子類)和其它實(shí)例的調(diào)用。它在對(duì)象初始化時(shí)完成相應(yīng)的初始化工作,并由某一個(gè)對(duì)象獨(dú)自擁有。類變量的作用域是整個(gè)類。實(shí)例變量的作用域是某一個(gè)類具體創(chuàng)建的實(shí)例對(duì)象。3.4變量3.實(shí)例變量和類變量的簡單比較:classA{staticintx;inty;……}classvarstoreExample{… Aa1=newA(); Aa2=newA();……}圖3-5內(nèi)存映像示意圖0x325a10y0x0y0xBA2a23.4變量3.實(shí)例變量和類變量的簡單比較:說明:(1)本實(shí)例包含兩個(gè)類A和類varstoreExample;(2)在類A中x是類變量,y是實(shí)例變量;(3)在類varstoreExample中,以類A為基礎(chǔ)創(chuàng)建了兩個(gè)對(duì)象a1和a2;由于x是類變量,因此對(duì)象a1和a2中變量x指向同一內(nèi)存單元;而y是實(shí)例變量,因此對(duì)象a1和a2中變量y分別指向不同內(nèi)存單元。3.4變量4.變量初始化與賦值Java規(guī)定,任何變量使用之前,必須對(duì)變量賦值。成員變量的初始化及賦值 成員變量可自動(dòng)初始化,其中數(shù)值型為0,邏輯型為false,引用型為null。成員變量的賦值可以在聲明時(shí)進(jìn)行,也可以在方法中實(shí)現(xiàn),但不能在聲明和方法之間進(jìn)行賦值。classA{ intx; floaty; x=12;y=12.56f;//line floatsumXY(){ returnx+y; }}publicclassinitExample2{ publicstaticvoidmain(Stringargs[]) { Aa=newA(); System.out.print("x+y="+a.sumXY()); }}3.4變量說明: 錯(cuò)誤提示要求,給變量x或y加上類型申明標(biāo)示,事實(shí)上,在這之前,已對(duì)x和y的類型進(jìn)行了申明。產(chǎn)生錯(cuò)誤的原因在于,成員變量的賦值不能在聲明和方法之間進(jìn)行。3.4變量4.變量初始化與賦值?局部變量的初始化和賦值 局部變量不可自動(dòng)初始化,要求程序顯式得給其賦值。只有當(dāng)方法被調(diào)用執(zhí)行時(shí),局部變量才被分配內(nèi)存空間,調(diào)用完畢后,所占用空間被釋放。classA{ voidf(){ intx=(int)(Math.random()*100); inty,z;//line2 if(x>60){y=10;} z=y-x; System.out.print("z="+z); }}publicclasslocalVarExample{ publicstaticvoidmain(Stringargs[]){ Aa=newA(); a.f(); }}說明: 在本實(shí)例中,表面上通過執(zhí)行語句“if(x>60){y=10;}”對(duì)y進(jìn)行了賦值,實(shí)際上由于x是Math.random()產(chǎn)生的隨機(jī)數(shù),有可能大于60,也有可能小于60,若x小于60,則在使用y(即執(zhí)行語句z=y-x)之前,y沒有被顯式賦值,故會(huì)出現(xiàn)以上錯(cuò)誤提示。為避免這類錯(cuò)誤,必須確保y在使用之前被顯式賦值。一個(gè)簡單的辦法就是在申明y之時(shí),可y賦值。如: inty=0,z;//line2當(dāng)然這種解決辦法要看具體功能而定。3.4變量?引用賦值舉例classPoint{ intx,y; Point(){ x=67;y=10; } Point(intx,inty){ this.x=x;this.y=y; } voidshowXY(){ System.out.println("點(diǎn)(x,y)為"+"("+x+","+y+")"); }}publicclassclassInitExample{ publicstaticvoidmain(Stringargs[]){ Pointp1=newPoint(); Pointp2=newPoint(6,18); p1.showXY(); p2.showXY(); p1=p2; p1.showXY(); p2.showXY(); }}圖3-6內(nèi)存映像示意圖Pointp1=newPoint();10y0x125p167xPointp1=newPoint(6,18);18y0xA75p26xp1=p2;18y0xA75p16x3.5方法1.方法分類:實(shí)例方法和類方法?實(shí)例方法能對(duì)類變量和實(shí)例變量操作,而類方法只能對(duì)類變量進(jìn)行操作;?類方法不僅可以由對(duì)象調(diào)用而且還可以直接由類名調(diào)用,而實(shí)例方法不能由類名調(diào)用。?一個(gè)類中的方法可以相互調(diào)用,但靜態(tài)方法只能調(diào)用靜態(tài)方法,不能調(diào)用實(shí)例方法。?在創(chuàng)建對(duì)象之前,實(shí)例變量沒有分配內(nèi)存,實(shí)例方法也沒有入口地址。3.5方法1.方法分類:實(shí)例方法和類方法?實(shí)例方法能對(duì)類變量和實(shí)例變量操作,而類方法只能對(duì)類變量進(jìn)行操作;?類方法不僅可以由對(duì)象調(diào)用而且還可以直接由類名調(diào)用,而實(shí)例方法不能由類名調(diào)用。?一個(gè)類中的方法可以相互調(diào)用,但靜態(tài)方法只能調(diào)用靜態(tài)方法,不能調(diào)用實(shí)例方法。?在創(chuàng)建對(duì)象之前,實(shí)例變量沒有分配內(nèi)存,實(shí)例方法也沒有入口地址?!緦?shí)例3-10】//指出方法類型classA{ inta; staticfloatb; floatmax(floatx,floaty) {……} staticfloatshow() {……}}【實(shí)例3-11】指出錯(cuò)誤classA{ inti; staticintj; voidset1(intx,inty){ i=x;j=y; } staticvoidset2(intz){ i=z;j=z*z; } voidshowXY(){ System.out.println("i="+i+"...j="+j); }}publicclassmethodvarExample{ publicstaticvoidmain(Stringargs[]){ Aa=newA(); a.set1(10,20); a.showXY(); a.set2(30); a.showXY(); }}說明:在本實(shí)例中,在類A中方法set1()是實(shí)例方法,方法set2()是類方法,變量x是實(shí)例變量,變量y是類變量。類方法只能操作類變量。上述程序中,類方法set2()中對(duì)實(shí)例變量x操作,顯然是不合規(guī)則的。因此提示i=z有錯(cuò)?!緦?shí)例3-12】指出錯(cuò)誤classA{ inti; staticintj; voidset1(intx,inty){ i=x;j=y; } staticvoidset2(intz){ j=z*z; } voidshowXY(){ System.out.println("i="+i+"...j="+j); }}【實(shí)例3-11】指出錯(cuò)誤publicclassmethodvarExample2{ publicstaticvoidmain(Stringargs[]){ Aa=newA(); a.set1(10,20); a.showXY(); a.set2(30); a.showXY();A.set1(10,20); A.showXY(); A.set2(30); A.showXY(); }}說明:在本實(shí)例中,在類A中方法set1()和showXY是實(shí)例方法,方法set2()是類方法,類方法不僅可以由對(duì)象調(diào)用而且還可以直接由類名調(diào)用,而實(shí)例方法不能由類名調(diào)用。因此會(huì)出現(xiàn)上述錯(cuò)誤。3.5方法3.方法調(diào)用中數(shù)據(jù)傳遞(1)值傳遞方法;(2)引用傳遞方法;(3)返回值方法;(4)實(shí)例變量和類變量傳遞方式。3.5方法(1)值傳遞方法將調(diào)用方法的實(shí)參的值計(jì)算出來賦予被調(diào)用方法對(duì)應(yīng)形參的一種數(shù)據(jù)傳遞方法。在這種數(shù)據(jù)傳遞方法下,被調(diào)用方法對(duì)形參的計(jì)算、加工與對(duì)應(yīng)的實(shí)參已完全脫離關(guān)系。當(dāng)被調(diào)方法執(zhí)行結(jié)束,形參中的值可能發(fā)生變化,但是返回后,這些形參中的值將不會(huì)帶到對(duì)應(yīng)的實(shí)參中。“數(shù)據(jù)的單向傳遞”【實(shí)例3-14】classA{ intsquare(intx){ x=x*x; returnx; }}publicclassparaTransExample1{ publicstaticvoidmain(Stringargs[]){ inty,z; Aa=newA(); y=10; z=a.square(y); System.out.println("y="+y+"....z="+z); }}3.5方法輸出結(jié)果:x=10….y=100說明:類A中方法square有參數(shù)變量x(非引用型),在paraTransExample1中創(chuàng)建對(duì)象a后,通過a調(diào)用方法square,此時(shí)是通過值傳遞來實(shí)現(xiàn)給方法square的參數(shù)賦值的,由于是值傳遞,因此盡管方法square中參數(shù)變量x發(fā)生了改變,但這種改變并不影響調(diào)用方法的實(shí)參y,即在調(diào)用方法square前,實(shí)參y的值為10,調(diào)用方法square后,實(shí)參y的值仍然為10。3.5方法(2)引用傳遞方法使用引用傳遞方法時(shí),方法的參數(shù)類型一般是復(fù)合類型(引用類型)。復(fù)合類型變量中存儲(chǔ)的是對(duì)象的引用,所以在參數(shù)轉(zhuǎn)送中是傳送引用,方法接收參數(shù)的引用,因此任何對(duì)形參的改變都會(huì)影響到對(duì)應(yīng)的實(shí)參。“引用的單向傳送,數(shù)據(jù)的雙向傳送”。以下舉例說明:【實(shí)例3-15】classPoint{ intx,y; voidsetXY(intx1,inty1){ x=x1; y=y1; } voidsquarePoint(Pointp){ p.x=p.x*p.x; p.y=p.y*p.y; }}【實(shí)例3-15】publicclassparaTransExample2{ publicstaticvoidmain(Stringargs[]){ Pointp0=newPoint(); 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); }}3.5方法運(yùn)行結(jié)果為:x=10….y=20x=100….y=400說明:在本實(shí)例中,類A中方法squarePoint有參數(shù)變量x是引用型,在paraTransExample2中創(chuàng)建對(duì)象a后,通過a調(diào)用方法squarePoint,當(dāng)方法squarePoint中對(duì)x和y進(jìn)行改變后,這種改變的結(jié)果會(huì)反映在實(shí)參p0中,這就是為什么調(diào)用方法squarePoint前x和y分別是10和20,調(diào)用方法squarePoint后x和y分別是100和400。3.5方法(3)返回值方法返回值方法不是在形參和實(shí)參之間傳遞數(shù)據(jù),而是被調(diào)方法通過方法調(diào)用后直接將返回值送到調(diào)用方法中。使用返回值方法時(shí),方法的返回值類型不能為void,且方法體中必須有帶表達(dá)式的return語句,其中表達(dá)式的值就是方法的返回值。(4)實(shí)例變量和類變量傳遞方式 實(shí)例變量和類變量傳遞方式也不是在形參和實(shí)參之間傳遞數(shù)據(jù),而是利用在類中定義的實(shí)例變量和類變量是類中諸方法共享的變量的特點(diǎn)來傳遞數(shù)據(jù)3.5方法3.三個(gè)重要方法(1)構(gòu)造方法(2)main方法(3)finalize方法3.5方法(1)構(gòu)造方法Java通過構(gòu)造方法來保證對(duì)每個(gè)對(duì)象進(jìn)行初始化。構(gòu)造方法是一種特殊的方法。Java中的每個(gè)類都有構(gòu)造方法,用來初始化該類的一個(gè)新的對(duì)象。構(gòu)造方法具有和類名相同的名稱,而且不返回任何數(shù)據(jù)類型,即void類型(void可以省略)。在構(gòu)造方法的實(shí)現(xiàn)中,也可以進(jìn)行方法重載。在類中沒有構(gòu)造方法時(shí),使用默認(rèn)的構(gòu)造方法。3.5方法(1)構(gòu)造方法構(gòu)造方法在創(chuàng)建一個(gè)新對(duì)象時(shí),同時(shí)給這個(gè)新對(duì)象分配內(nèi)存創(chuàng)建對(duì)象進(jìn)行初始化一般格式為:新對(duì)象名=new構(gòu)造方法();3.5方法(1)構(gòu)造方法一個(gè)類中可能沒有構(gòu)造方法,此時(shí)使用默認(rèn)的構(gòu)造方法.使用默認(rèn)的構(gòu)造方法時(shí),按照默認(rèn)的方式對(duì)變量進(jìn)行初始化,即數(shù)值型初始化為0,引用型初始化為null,邏輯型初始化為false。一個(gè)類中存在一個(gè)或多個(gè)構(gòu)造方法【實(shí)例3-16】內(nèi)中無構(gòu)造方法classPoint{ intx,y; voidshowXY(){ System.out.println("點(diǎn)(x,y)為"+"("+x+","+y+")"); }}publicclassmethodsExample1{ publicstaticvoidmain(Stringargs[]){ Pointp1=newPoint(); p1.showXY(); }}3.5方法運(yùn)行結(jié)果為:點(diǎn)(x,y)為(0,0)說明:在本實(shí)例中,類A中沒有構(gòu)造方法,則使用默認(rèn)的構(gòu)造方法,x和y被初始化為0。【實(shí)例3-17】內(nèi)中多個(gè)構(gòu)造方法classPoint{ intx,y; Point(){ x=1;y=1; } Point(intx1,inty1){ x=x1;y=y1; } voidshowXY(){ System.out.println("點(diǎn)(x,y)為"+"("+x+","+y+")"); }}【實(shí)例3-17】內(nèi)中多個(gè)構(gòu)造方法publicclassmethodsExample2{ publicstaticvoidmain(Stringargs[]){ Pointp1=newPoint(); Pointp2=ne
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 文學(xué)社組社方案及招生簡章范文
- 現(xiàn)代企業(yè)財(cái)務(wù)管理的全球化視角
- 全鋼爬架施工方案
- 汽車行業(yè)的品牌競(jìng)爭戰(zhàn)略分析
- 國慶節(jié)小吃店鋪活動(dòng)方案
- 國慶節(jié)手工干貨活動(dòng)方案
- 12《富起來到強(qiáng)起來》第一課時(shí)說課稿-2023-2024學(xué)年道德與法治五年級(jí)下冊(cè)統(tǒng)編版001
- 2023六年級(jí)英語上冊(cè) Unit 3 Winter in canada Lesson 14 Snow!It's Winter說課稿 冀教版(三起)
- 2024-2025學(xué)年新教材高中物理 第三章 恒定電流 第3節(jié) 測(cè)量金屬絲的電阻率說課稿 粵教版必修3
- 2024秋七年級(jí)數(shù)學(xué)上冊(cè) 第3章 一次方程與方程組3.4 二元一次方程組的應(yīng)用 2列二元一次方程組解實(shí)際應(yīng)用(一)說課稿(新版)滬科版
- 2025-2030年中國電動(dòng)高爾夫球車市場(chǎng)運(yùn)行狀況及未來發(fā)展趨勢(shì)分析報(bào)告
- 河南省濮陽市2024-2025學(xué)年高一上學(xué)期1月期末考試語文試題(含答案)
- 2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測(cè)試題庫及答案解析
- 安全事故案例圖片(76張)課件
- 預(yù)應(yīng)力錨索施工方案
- 豇豆生產(chǎn)技術(shù)規(guī)程
- 奢侈品管理概論完整版教學(xué)課件全書電子講義(最新)
- 文藝美學(xué)課件
- 中藥炮制學(xué)教材
- 常見腫瘤AJCC分期手冊(cè)第八版(中文版)
- 電氣第一種第二種工作票講解pptx課件
評(píng)論
0/150
提交評(píng)論