




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA語言程式設計第一章
電腦語言概述
第一節程式設計語言第二節語言翻譯程式第三節Java虛擬機與運行環境第四節Java程式的運行第五節Java程式的開發、執行流程小結習題Basic、Fortran語言擅長描述問題解決的過程,也就是說,描述怎樣解決問題。人們把這些語言稱為面向過程的語言。1.1程式設計語言
低級程式設計語言程式設計語言:高級程式設計語言機器語言組合語言程式設計語言Basic語言Fortran語言Prolog語言C++Java語言Prolog語言:面向邏輯的語言。Java、C++語言:面向對象的語言,第一種可以編寫普通的應用程式也可以編寫專用於internet或intrant應用程式的語言。有人說:Java是網路上的世界語。1.1程式設計語言
一次編譯,到處運行1完全面向對象2移植性3穩定性4簡單性5高性能性6動態特性7分佈式1.1程式設計語言Java語言的特點1.2語言翻譯程式X86機器碼Powerpc機器碼MIPS機器碼ALPHA機器碼MIPS機器ALPHA機器Powerpc機器X86機器“一次編譯,到處運行”原理Java虛擬機(JVM-JavaVirtualMachine)是什麼:虛擬機是運行在主操作系統頂層的軟體層,是一種虛擬電腦。作用:使得一臺實際的機器能夠運行Java位元組碼程式。Java虛擬機與操作系統和電腦硬體無關。Java經過編譯後的位元組碼程式可以在網路上流動到任意支持Java虛擬機的網點機上運行。1.3java虛擬機與運行環境Java是解釋型的高級編程語言編譯型根源程式位元組碼程式Java根源程式可執行程式EXE裸機操作系統解釋器編譯連接編譯運行解釋運行.java.classJava虛擬機
Java編譯系統和運行系統的功能如圖所示。1.4java程式的運行
Java編譯和運行系統功能圖
編譯根源程式(如hello-java)位元組碼檔Hello.class網路或本地類裝載器解釋器位元組碼檢驗器代碼生成器即時運行部件運行系統創建,編譯運行1.
編寫Java根源程式:檔以Java作為尾碼。
2.根源程式編譯成位元組碼
3.由運行系統解釋和執行。開發流程如圖所示。
1.5java程式的開發執行流程原始檔案(java檔)編譯器編譯位元組碼(class檔)運行系統解釋運行結果2.1JDKJDK的安裝與配置下載地址:/j2se/1.4.2/download.html安裝後生成的目錄:lib目錄保存的是庫檔classes目錄保存的是Java類庫bin目錄一些執行檔和動態連接庫檔demo目錄一些Applet的實例
2.1JDKJDK的安裝與配置配置環境變數:從桌面上選擇“我的電腦”(右鍵)→屬性→高級→環境變數在其中選擇“系統變數”的“新建”在變數名中輸入CLASSPATH,變數值中輸入類庫名c:\jdk13\LIB\dt.JAR;c:\jdk13\LIB\TOOLS.JAR;然後選擇確定。再次選擇“系統變數”的“新建”,在變數名中輸入PATH,變數值中輸入c:\jdk13\BIN,然後選擇確定。
注意:在配置完成後,要重新啟動電腦,環境變數才能生效。
2.1JDKJDK中的常用命令:javac編譯命令把Java語言源碼編譯成位元組碼
java解釋執行命令執行由javac命令生成的位元組代碼
2.1JDKJDK下開發Java應用的步驟
編寫原始檔案打開文本編輯器:【開始】→【程式】→【附件】→【記事本】
將原始檔案編譯成位元組碼檔運行程式
開始編寫我們第一個Java程式!Applet和ApplicationJavaApplet(小應用程式):不是一個完整的應用程式,而是框架程式中的一個模組,所以只能在WWW流覽器環境下運行。JavaApplication(Java應用程式):是一個完整的應用程式,可以獨立地運行。JavaApplet舉例importjava.applet.*;importjava.awt.*;publicclassMyFirstJavaAppletextendsApplet{publicvoidpaint(Graphicsg){g.drawString(“HelloWorld.”);}}JavaApplet小應用程式基本結構importjava.applet.*;importjava.awt.*;class
extendsApplet{
}類名稱類成員聲明<HTML><HEAD><TITLE>MyFirstJavaApplet</TITLE></HEAD><BODY><HR><APPLETCODE=MyFirstMyAppletWIDTH=500HEIGHT=500></APPLET></BODY></HTML>Test.html測試網頁JavaApplet工作原理HTML檔嵌入Appletwww伺服器www伺服器www流覽器請求HTML檔下載HTML檔請求Applet位元組碼下載Applet位元組碼解釋執行Applet位元組碼編寫Java程式需要注意的幾點Java區分大小寫類定義不能嵌套一個程式中可以有一個或多個類,但其中只能有一個主類根源程式編寫完畢,應該用主類名作為檔案名,再加尾碼.java存储成磁盘文件3.2識別字、注釋和分隔符號
識別字用來標記語言中元素名稱Java識別字的規則:以字母、下劃線或美元符$開頭字母、下劃線、數字組成的序列,而且,識別字的長度任意識別字分為兩類:保留字用戶定義識別字保留字:一律小寫abstractdoubleintstrictfpbooleanelseinterfacesuperbreakextendslongswitchbytefinalnativesynchronizedcasefinallynewthiscatchfloatpackagethrowcharforprivatethrowsclassgotoprotectedtransientconstifpublictrycontinueimplementsreturnvoiddefaultimportshortvolatiledoinstanceofstaticwhiletruefalse程式設計者根據自己的需要定義的類、變數、方法、介面的名字。用戶定義識別字注意:
1.禁止用保留字作為用戶識別字;
2.遵守先定義後使用的原則。即只有定義了的識別字,才可在語句部分使用。合法識別字:
A,a1,$Systembol,square,ex_sa不合法識別字:
1a(以數字1開頭)
break(禁止使用保留字)
TWOWORDS(含有空格)
.NO(有圓點)
Java有三種注釋形式:“//”單行注釋:表示從此向後,直到行尾都是注釋。“/*……*/”塊注釋:在“/*”和“*/”之間都是注釋,塊注釋不能嵌套。“/**……*/”文檔注釋:所有在“/**”和“*/”之間的內容可以用來自動形成文檔。3.2識別字、注釋和分隔符號空格、逗號、分號及行結束符稱為分隔符號3.2識別字、注釋和分隔符號注意:分隔符號(逗號、分號等)不能是中文下的。變數:Java的變數有兩種:局部變數、類成員變數。變數必須先說明後使用。變數的說明形式如下:
類型
變數名表當變數名列表中說明多個變數為同一類型時,變數名之間用逗號分隔
注意:
局部變數在使用前必須給定初值,否則,Java將不編譯,而類成員變數無此要求。3.3變數與常量習慣上,變數名以小寫字母開頭,若一個變數名由超過一個單詞所組成,則第一個單詞之後的所有單詞都以大寫字母開頭,以便於理解該變數名。例如,anIntVar、myName變數名變數類型用於表述數據的格式和結構。Java中的數據類型可分為兩大類:基本數據類型:整數浮點數字元布爾型構造數據類型:
Java語言中構造類型用類來描述。
變數的類型數據類型名佔用記憶體空間數值範圍缺省值說明byte1位元組(-128)--1270整
型short2位元組(-32768)--327670int4位元組(-2147483648)--21474836470long8位元組(-9223372036854775808)--92233720368547758070float4位元組(±3.4028347E+38)--(±1.40239846E-45)0.0F
浮點型double8位元組(±1.79769313486231570E+308)--(±4.94065645841246544E-324)0.0Dchar2位元組\u0000--\uFFFF\u0000字元型boolean1位true或false
False布爾型
基本數據類型表注:缺省值就是默認的初值,只對成員變數有用.局部變數在使用前必須人為地給定初值
變數的作用域是指什麼範圍的程式可以訪問該變數。變數說明時就確定了其作用域。
變數按作用域分為:
類成員變數方法參數局部變數變數的作用域常量
常量是指在程式運行過程中其值不變的量。常量的表示形式:
final變數類型變數名3.3變數與常量3.4基本類型和一維數組整型浮點型布爾型字元型一維數組
採用不同的整數類型表達同一數值,在存儲單元中的存儲情況是不同的。下圖表示的是數值20的不同存儲形式:00010100byte型
0000000000010100short型
00000000000000000000000000010100int型0000000000000000000000000000000000000000000000000000000000010100
long型
3.4.1整型
整數變數有三種表示形式:(1)十進位整數(2)八進制整數(3)十六進制整數
420520x2A0X2a
Java缺省整數常量類型為int類型,如果要表示long類型整數需要在整數後加上尾碼L或l
整數變數整型變數類型有int、short、long、byte,由於byte和short類型表示的數範圍較小,不常使用。整型變數說明如下:例3.2intanIntVar;
//說明變數anIntVar是int整型longaLongVar=12345;//說明變數aLongVar是long整
//型,並賦以初值12345shortaShortVar;
//說明變數aShortVar是short整型byteaByteVar;
//說明變數aByteVar是byte整型
整數變數
浮點型包括兩種不同的實型:float和double。1Java缺省的浮點型常數是double型2如果要表示float型,要在數字後加尾碼F或f。如果要表示double型,也可以在數字後加尾碼D或d。
3.4.2浮點型浮點型有兩種表示法:(1)浮點型十進位表示法
-3.5f0.0f123.45f+678.9f要注意,採用十進位表示法時,小數點的兩側都必須有數字,缺一不可,如+123.和.56都是不合法的。
浮點型變數(2)浮點型科學表示法:
-1.234567E+12
(-1.2345678901×1012)
尾數
階碼注意:尾數必須有,但小數部分可無;階碼必須有,必須是整數。下列表示都是不正確的。
E-6(缺尾數)
3E(無階碼)
2.E3(尾數出錯)
2E1.2(階碼非整數)
浮點型常量布爾數據類型用於表達邏輯狀態:布爾型數據只有兩個值:true和false。注意:
Java中不可將布爾類型看做整型值。3.4.3布爾型
字元類型數據只有一個字元,採用16位二進位Unicode編碼表示。
字元型表示字元用兩個單引號括起來一個字元來表述。例如:
‘A’;’a’;’2’;’大’;3.4.4字元型
字元型變數表述
轉義字元
Java允許在字串中出現轉義字元,轉義字元見下表換碼序列名稱Unicode值\b退格\u0008\tTab(製錶)\u0009\n換行\u000a\r硬回車\u000d\”雙引號\u0022\ˊ單引號\u0027\\反斜杠\u005c字串常量一個字串常量是括在兩個雙引號之間的字元序列。若兩個雙引號之間沒有任何字元,則為空串。以下是字串的一些例子:"Thisisastringconstant"JAVA""Yousee"Java語言把字串常量當作String類型的一個對象來處理,以後有詳細介紹。3.5運算符及運算式運算符運算式運算符表明對運算元的運算方式。運算符按其要求的運算元個數分為:1.一元運算符如++、--2.二元運算符如+、-、*、/、%3.三元運算符如?:運算符按其功能分為七類:1.算術運算符+、-、*、/、%、++、--a++(a=a+1)2.關係運算符>、<、>=、<=、==、!=3.邏輯運算符!、&&、||、&、|4.位運算符>>、<<、>>>、&、|、^、~5.條件運算符?:6.賦值運算符=、+=、-=7.其他:分量運算符.、下標運算符[]、實例運算instanceof3.5.2運算符單元運算符如
+(一元加,取正值)、
-(一元減,取負值)、
++
(自加)、--
(自減)雙元運算符如+(加)、-(減)、*(乘)
/(除)、%(取餘數)。3.5.3算術運算符1單目運算(一元運算)
intx=10,y1,y2;y1=++x;//x先加1,再賦於y1y2=x++;//x先賦於y2,再自增13.5.3算術運算符2雙目運算符:%
(1)運算元可以是整型,實型,字元型
(2)運算的結果為int,long,float,double例:‘a’%7.5;8%3;
4%3.0;1關係運算符有七種:
==
,!=,<,<=,>,>=
instanceof(對象運算符)
運算元:
==和!=可作用於所有簡單型別身上;
instanceof用來確定一對像是否是某一指定類的對象。
3.5.4關係運算符1邏輯運算符:
!(非),&&(與),||(或),^(異或)。這些運算符要求的運算元和結果值都是布爾型。
2邏輯運算的直通計算:
運算式後面對計算布爾值沒有作用的部分忽略掉
3.5.5邏輯運算符1位運算符用來操作基本整數型別中的個別的位。
~
按位取反
&
按位與
|
按位或
^
按位異或
>>
有符號二進位右移一定位
<<
有符號二進位左移一定位
>>>
無符號二進位右移一定位3.5.6位運算符2boolean值被視為單一的位,可以執行&,|,^三種位運算賦值運算的表述
注意:賦值運算符“=”與數學的等號含義不同。
變數名=運算式;例:x=4;
算術運算符,位操作符和賦值運算符結合起來,形式如下:
+=、-=、*=、/=、%=
例:x+=y等價於x=x+y3.5.7賦值運算符Java中唯一的三元運算符,其格式如下:
變數=<布爾運算式>?<運算式1>:<運算式2>含義是:當<布爾運算式>為真時,變數的值為<運算式1>的值,否則為<運算式2>的值。舉例(見下頁):3.5.8條件運算符publicclasssss{ publicstaticvoidmain(Stringargs[]){ intx=20; absX=x>0?x:-x; //如x>0,absX等於x,否則等於x的相反數
System.out.println(“x的絕對值:”+absX); }}3.5.8條件運算符
運算式是由運算元和運算符按一定語法形式組成的符號序列,以下是合法的運算式例如:
a+b(a+b)*(a-b)“name=”+“李明”
每個運算式經過運算後都會產生一個確定的值。一個常量或一個變數是最簡單的運算式。運算式作為一個整體(如同一個運算元)還可以看成一個運算元參與到其他運算中,形成複雜的運算式。
3.5.1運算式3.6運算符的優先順序優先順序運算符類型1()2+、-、++、--、!、~單目運算符3*、/、%算術運算符4+、-算術運算符5<<、>>、>>>移位運算符6<、<=、>、>=關係運算符7==、!=關係運算符8&&邏輯運算符9¦¦邏輯運算符10?:條件運算符11=、+=、-=、*=、/=、%=、^=賦值運算符12&=、|=、<<=、>>=、>>>=運算式寫法的習慣:(1)除非是簡單的直觀運算,應該儘量使用括弧(2)儘量不要寫太長的運算式,過長的運算式容易引起對求值次序的誤解。(3)有時為了表達清楚,可以引進多餘的括弧3.6運算符的優先順序3.7數據類型轉換自動類型轉換強制類型轉換
Java中整型、實型、字元型數據可以混合運算。運算過程中,不同類型的數據會自動轉換為同一類型。自動類型轉換原則:
從低數據類型向高數據類型轉換即:
(byte
,char)→short→int
→long→float→double注意:布爾型與其它基本類型之間不能轉換舉例:3+4.5=3.0+4.5=7.53.7.1自動類型轉換形式為:
(類型名)運算式例如:
longl=156;byteb;
b=(byte)l;
3.7.2強制類型轉換注意:1.
一般使用強制類型轉換可能會導致數值溢出或精度的下降,應儘量避免。
2.布爾型與其它基本類型之間不能轉換3.8簡單語句和複合語句變數說明語句複製語句方法調用語句空語句標準輸入輸出複合語句語句是程式的基本組成單位。一個基本的簡單語句總是以分號結尾的。變數說明語句用來聲明一個變數,變數說明語句的格式為:類型變數名1,變數名2…;
例:charc=‘a’;inti=1;3.8.1變數聲明語句3.8.2賦值語句賦值語句是將運算式的值賦給變數其格式為:
變數=運算式;例:charc;c=‘a’;方法調用語句的一般形式為:
對象.方法名(實參數列表);例如:
System.out.println(“Example!”);3.8.3方法調用語句3.8.4空語句空語句是什麼都不做的語句,其形式為:
;//這是一條空語句
輸入和輸出是Java程式的重要組成部分,它提供了人機交互的手段,它們屬於方法調用語句。3.8.5標準輸入輸出(I/O)1輸入輸出
輸入是指把需要加工的數據放到程式中
輸出則把程式處理的結果呈現給用戶2標準輸入輸出
一般用鍵盤作為標準的輸入設備
顯示器則是標準的輸出設備通過System.in和System.out對象分別與鍵盤和顯示器發生聯繫進行輸入和輸出System.out對象中包含的最常用的方法是:
println(參數)方法向標準輸出設備(顯示器)列印一行文本並換行
print(參數)方法向標準輸出設備(顯示器)列印一行文本,但不換行標準輸出System.out對象System.in中最常用的方法:intread()返回所輸入的字串的第一個字元的ASCII碼intread(byteb[])返回讀取的字元的數量intread(byteb[],intoff,intlen)
返回讀取的位元組的數量,將輸入的字串的前
len位,存放在字元數組b的下標為off以後的元素中標準輸入System.in對象例子:publicclasstestinput{publicstaticvoidmain(String[]args){try{byte[]by=newbyte[256];System.out.println("Pleaseinput:");inti=System.in.read(by);System.out.println(i);Strings;s=newString(by,0,i);System.out.println(s);}catch(Exceptione){e.printStackTrace();}}}
將相關語句組合在一起就構成複合語句,複合語句由{}括起來,{}內的每條語句的語法與上面介紹的一樣。
{}也叫一個語句塊。3.8.6複合語句3.9控制語句運算式語句:運算式後加一個分號a+=a*6;a++;a+3;複合語句:包含在一對大括弧中的語句序列流程控制語句:順序結構、選擇結構和迴圈結構選擇結構if(布爾型運算式)語句1;[else
語句2;]
switch(運算式){
case
常量1:語句塊1;
......
case
常量n:語句塊n;
default:語句塊n+1;}使用switch語句需要注意:運算式必須是符合byte、char、short和int類型的運算式,而不能使用浮點類型或long類型,也不能為一個字串;要有用於跳轉的break語句;switch語句中的每個case子句都必須對應一個單值。迴圈結構—while
格式:
while(迴圈條件){循環體}含義:當迴圈條件為true時,重複執行循環體。intx=2;while(x<7){ System.out.println(“x=”+x); x++;}注意:while運算式的括弧後面一定不要寫“;”迴圈結構—do格式:do{
循環體}while(迴圈條件);含義:重複執行循環體,直到迴圈條件為false。迴圈結構—for格式:for(運算式1;運算式2;運算式3)循環體;運算式1:迴圈初值運算式2:布爾型運算式,迴圈條件運算式3:迴圈增量運算式控制轉移語句break語句:使程式的流程從一個語句塊內部轉移出去。通常在switch和迴圈語句中使用。continue語句:只能在迴圈語句中使用。其作用是終止當前這一輪的迴圈,直接進入下一輪的迴圈。3.4.5數組為什麼會有數組?棧記憶體和堆記憶體int[]x;x=newint[100];x=null;的記憶體狀態變化情況3.4.5數組數組類型屬於複合數據類型,它是由類型相同的元素組成的有順序的數據集合。特點:元素類型相同;元素有順序;所有元素共用一個名稱。第一步數組的聲明:格式:數組元素類型數組名[];數組元素類型[]數組名;舉例:
intmyarray[];doublearray_double[];String[]str;Point[]P;注意:聲明數組時不能指定其長度inta[3];第二步創建數組空間:與其他的語言不同,在Java語言中,聲明數組時不能指定它的長度,而是利用new來為數組型變數分配記憶體空間,我們將其稱之為創建數組。
myarray=newint[10];array_double=newdouble[1000];intString[]str=newString[10];注意:數組創建後,系統自動為數組元素賦初值。第三步數組的初始化:數組元素的默認初值:整型:0實型:0.0f或0.0d字元:‘\0’類對象:nullIntarray_int[]={1,2,3,4,5,6,7};String[]str={“Fortran”,“QBasic”,“Pascal”};數組元素的使用:int[]x;x=newint[10];x[0]=3;x[4]=8;x[i]使用數組時要注意的問題:空指針異常如何得到數組長度數組越界異常main函數的輸入參數(String[]args)的使用多維數組:如何理解多維數組?Java中沒有真正的多維數組,只有數組的數組。Java中只有數組的數組。定義一個多維數組:int[][]x;x=int[3][];x[0]=newint[3];x[1]=newint[2];4.1面向對象的理論基礎面向過程在一個結構體中定義窗口的大小、位置、顏色背景等屬性,對窗口操作的函數與窗口本身的定義沒有任何關係,如HideWindow,MoveWindow和MinimizeWindow,這些函數都需要接受一個代表要被操作的窗口參數,是一種謂語與賓語的關係。面向對象定義窗口時,除了要指定在面向過程中規定的那些屬性,如大小、位置、顏色、背景等外,還要制定該窗口可能具有的動作,如隱藏、移動、最小化等,這些函數被調用時,都是以某個窗口要怎樣來使用的,是一種主語與謂語的關係。
4.2對象和類classperson{intname;booleansextype;
intage;
voideat(){…}voidsleep(){…};voidwork(){…}}
電腦中的數據原型,即我們定義的類
現實生活中的對象
現實生活中的對象
抽象得到類的定義
類實例化得到對象現實世界
電腦中的數據4.2對象和類對象和類的關係對象是類的實例化類是對象的抽象電視機設計圖電視機1電視機2電視機3類對象
什麼是類:類是描述對象的“基本原型”,它定義一種對象所能擁有的數據和能完成的操作(成員變數,方法)。什麼是對象:是類的一個實例,是一個實實在在的個體。4.2對象和類data數據元素
方法一個例子:age是屬性,也叫成員變數;showAge叫類的成員函數;showAge方法可以直接訪問同一個類中的age變數,如果該方法中有與成員變數同名的局部變數,該方法對這個變數名的訪問是局部變數,不再是成員變數。classPerson{}intage;publicvoidshowAge(){ System.out.println(age);}對象的產生:Personp1=newPerson();執行後的記憶體狀態:比較:int[]xx=newint[30];執行後的記憶體狀態:對象的使用:創建新的對象之後,我們就可以使用“對象名.對象成員”的格式,來訪問對象的成員(包括屬性和方法)ClassTestPerson{ publicstaticvoidmain(String[]args) { Personp1=newPerson(); Personp2=newPerson(); p1.age=-30; p1.showAge(); p2.showAge(); }}對象的使用:上面程式運行的記憶體佈局圖如下:對象的生命週期:包的概念:為解決同一任務或子任務的類組成一個包 由包、子包和類構成的一般Java程式的樹型結構,Java程式保存在檔系統時,包名對應於一目錄名,子包名對應於目錄的子目錄,類對應於它目錄樹型結構的結點。
---包名1----包名1_1---類1_1_1---類1_1_2---類1_1_3----包名1_2---類1_2_1---類1_2_24.3java的包與類4.3.1類描述對象特徵publicclassPoint{ publicintx;//成員變數說明,定義點的x座標
publicinty;//成員變數說明,定義點的y座標
publicPoint(intX,intY)//帶參數的構造方法;
{x=X;y=Y;} publicdoubledistance()//計算點到原點的距離
{ returnMath.sqrt(x*x+y*y); }}類首說明的形式如下:[package說明][import說明][修飾符]class類名[extends父類名][implements介面列表]1.類修飾符分類:friendly(默認) 類只能被本包中的其他類使用public(公共) 類能被所有的類訪問,注意。。。abstract(抽象) 類不能被實例化,含未實現的方法final(最終) 類不能被繼承,即不能有子類2.extends:實現單繼承4.3.2類首說明類體形式說明如下:
{
[成員變數說明][構造方法說明][靜態方法說明][方法說明]}注意:類體中說明都是可選的,也沒有先後順序之分4.3.2類體說明形式:
[修飾符]類型成員變數名1,…,成員變數名n;修飾符兩類:
1訪問修飾符:
默認的成員變數可以被定義同一包中的任何類訪問;
public成員變數可以被專案檔中的任何方法所訪問;
protected變數可以被有繼承關係的類和同一包中的類的訪問;
private成員變數只能在同一個類中定義的方法中使用,此法安全
2其他:final(常量)、static(靜態)成員變數說明修飾符類內子類包內其他類其他包內的類缺省(friendly)√×√×public√√√√private√×××protected√√√×變數的訪問許可權在表格中:√表示允許訪問,×表示禁止訪問大小public>protected>缺省>private
1用static修飾的成員變數叫類變數(或靜態變數),而沒有用static修飾的成員變數叫對象變數。2static修飾的數據和方法不局限於所屬的對象所以它不需要創建對象就可以直接訪問。static(靜態)類的內部:只用變數名即可訪問類的外部:1對象變數:只有在構造對象後才能訪問到
格式為:對象名.對象變數
2類變數:
(1)通過類名訪問
格式:類名.類變數名
(2)通過對象名來訪問成員變數使用例:classA{static
intax;
intay;}
publicclassB{static
intbx;
intby;
publicstaticvoid
main(Stringargs[]){A.ax=5;bx=A.ax+2;//訪問類變數(不需建對象)
AA1=newA();//創建類A的一個對象A1
BB1=newB();//創建類B的一個對象B1
A1.ay=6;//訪問對象A1的成員變數ayB1.by=A1.ax;//訪問對象B1的成員變數by
System.out.println(A.ax+“”+B.bx);//輸出二變數的值
System.out.println(B1.bx+B1.by);
//輸出二變數的和
}
}//程式結束成員變數訪問的例子訪問本類的類變數可省略類名訪問類變數也可通過類對象名訪問本類的類變數時,也可加上類名或類對象名實現類的封裝性如果外面的程式可以隨意修改一個類的成員變數,會造成不可預料的程式錯誤,就像一個人的身高,不能被外部隨意修改,只能通過各種攝取營養的方法去修改這個屬性。在定義一個類的成員(包括變數和方法)時,使用private關鍵字說明這個成員的訪問許可權,這個成員就成了類的私有成員,該類能被這個類的其他成員方法使用,而不能不其他的類中的方法所調用。實現類的封裝性為了實現更好的封裝性,我們通常將類的成員變數聲名為private,在通過public的方法來對這個變數進行訪問。對一個變數的操作,一般都有讀取和賦值操作,我們分別定義兩個方法來實現這兩種操作,一個是getXxx()(Xxx表示要訪問的成員變數的名字),用來讀取這個成員變數操作,另外一個是setXxx()用來對這個成員變數賦值。一個類通常就是一個小的模組,我們應該讓模組僅僅公開必須要讓外界知道的內容,而隱藏其他一切內容。我們在進行程式的詳細設計時,應儘量避免一個模組直接修改或操作另一個模組的數據,模組設計追求強內聚(許多功能儘量在類的內部獨立完成,不讓外面干預),弱耦合(提供給外部儘量少的方法調用)。構造方法構造方法的作用: 當一個類的實例對象剛產生時,這個類的構造方法就會被自動調用,我們可以在這個方法中加入要完成的初始化工作的代碼。這就好像我們規定每個“人”一出生就必須先洗澡,我們就可以在“人”的構造方法中加入完成“洗澡”的程式代碼,於是,每個“人”一出生就會自動完成“洗澡”,程式不必再在每個人剛出生是一個一個告訴他們要“洗澡”了。作用:專門用於創建類對象的方法。形式:
[修飾符]
方法名([形式參數列表])[throws異常列表]
方法體
調用:創建對象時被Java編譯器自動調用的。當構造一個類的實例時,便以其主要完成以下工作:為對象分配記憶體空間初始化對象中的成員變數的值調用對象的構造方法一個類的構造方法可以有多個,他們具有相同的方法名,編譯器會根據參數的類型及個數來判斷使用哪個構造方法。構造方法說明注意:沒有返回值類型(void也不行)1)缺省的構造方法:無參數2)自定義構造方法:可帶、也可不帶參數 用戶定義的構造方法可以帶有或不帶有參數
構造函數分類:自定義構造方法p1=newperson(“tom”,78),該代碼會做這樣幾件事:創建指定的類的新實例對象在堆記憶體中為實例對象分配記憶體空間,並調用指定的類的構造方法最後將實例對象的首地址賦值給引用變數p1p1=newperson(“tom”,78)的記憶體變化過程分析this是什麼?如果func2方法被調用,一定是事先已經有了一個存在的對象,func2作為那個對象的方法被使用。在func2內部能引用別的對象,同樣也能引用func2所屬的那個對象。在func2中,自己所屬的那個對象的引用名稱是什麼呢?this關鍵字在java程式裏的作用和它的詞義很接近,它在函數內部就是這個函數所屬的對象的引用變數。this引用句柄所在的位置每個成員方法內部,都有一個this引用變數,指向調用這個方法的對象,類中的成員方法與this之間的關係如圖this引用句柄的應用一個類中的成員方法可以直接調用同類中的其他成員,其實我們在一個方法內部使用“this.其他成員”的引用方式和直接用“其他成員”的效果是一樣的,那this還有多大的作用呢?在下面的情況下,我們還是非得用this關鍵字不可的:讓類的成員變數名和對其賦值的成員方法的參數變數同名是必要的;在一個構造方法裏調用其他的構造方法,不是用構造方法名,而是用this(參數列表的形式),根據其中的參數列表,選擇相應的構造方法。方法首部說明
方法體方法的調用
方法說明及調用說明形式:[修飾符]返回值類型方法名([形參列表][throws異常列表]修飾符分類:訪問修飾符:缺省、public、protected、private
非訪問修飾符:static:靜態方法
abstract:抽象方法,無方法體
final:最終方法,子類不能改變其方法實現
native:本地方法,即方法實現與本機系統有關
synchronized(同步):執行前要給方法設置同步機制1.方法首部說明一定要有返回類型(1)方法體方法體是由一對大括弧括起來的一段代碼,格式如下:
{//方法體開始
實現方法的代碼段
}//方法體結束
方法體也可以是一個分號“;”,表示無具體方法(方法還沒有實現,即只是一個方法框架。注意:只有方法的修飾符中有abstract或native時,方法才可無方法體。2.方法體return語句用於從當前方法中退出,返回到調用該方法的語句處繼續程式的執行。其格式如下:
格式1:return運算式;格式2:return;
格式1返回一個值給調用該方法的語句,返回值的數據類型必須與方法聲明中的返回值類型一致。可以使用強制類型轉換來使類型一致;
格式2用於返回類型為void的方法中,使用該語句以結束方法,返回調用處。(2)return語句 return語句通常用在一個方法體的最後,以退出該方法並返回一個值。!!!在Java中,單獨的return語句用在一個方法體的中間時,會產生編譯錯誤,因為這時有一些語句執行不到。例如:intmethod(intnum){
returnnum;
∥將導致編譯錯誤,因為它將使後面的語句執行不到
……
}(2)return語句(2)return語句
可以通過把return語句嵌入到某些語句(如if-else)來使程式在未執行完方法中的所有語句時退出,例如:intmethod(intnum){
if(num>0)returnnum; ∥可能執行,也可能不執行,取決於num的值
……
}
成員變數分為對象變數和類變數。同樣地,成員方法也有對象方法和類方法之分,其意義與對象變數、類變數一樣。即類方法是屬於整個類的,而對象方法是屬於類中的某個對象的。由於類方法是屬於整個類的,並不屬於類的哪個對象,所類方法的方法體中不能有與類的對象有關的內容。即類方法體有如下限制:(1)類方法中不能引用對象變數;(2)類方法中不能調用類的對象方法;(3)在類方法中不能使用super、this關鍵字。
如果違反這些限制,就會導致程式編譯錯誤。(3)
類方法(static)
和類方法相比,對象方法幾乎沒有什麼限制:(1)對象方法中可以引用對象變數,也可以引用類變數;(2)對象方法中可以調用類方法;(3)對象方法中可以使用super、this關鍵字。在程式設計中,一些通用的、公用型的方法與類的對象無關,因此常常被作為類方法實現。Java類庫中Math類,其中多數的數學運算操作都被定義成靜態方法。因此,可以使用類方法把一些通用的、公用型的方法放在合適的類中,從而很好地將它們組織起來。應用程式中的主方法main就是類方法。(3)
類方法(static)(3)
類方法(static)main()方法是靜態的,因此JVM在執行main()方法是不創建main()方法所在的類的實例對象,因此在main()方法中,我們不能直接訪問該類中的非靜態成員,必須創建該類的一個實例對象後,才能通過這個對象去訪問類中的非靜態成員。外部調用類方法
1.類名.類方法名([實型參數列表]) 2.對象名.類方法名([實型參數列表])對象方法:
對象名.對象方法名([實型參數列表])3.方法的調用內部調用:直接調用
1)類方法中不能引用對象變數
2)在類方法中不能使用super,this關鍵字
3)類方法不能調用對象方法4.遞歸方法
如果一個方法的方法體中又調用自身,則這種方法被稱為直接遞歸方法。如果一個方法通過調用其他方法而間接地調用到自身,則被稱為間接遞歸方法。
Java中遞歸方法的編寫方法與C++中遞歸函數的編寫方法是完全一樣的。下麵用一個實例來說明它。4.遞歸方法例4.3用遞歸方法求1+2+3+…+n。程式編寫方法分析:假設編寫了一個成員方法sum(n)用於求出1+2+…+n,則調用sum(n-1)就可求出1+2+3+…+(n-1)。於是,求sum(n)可用“求出sum(n-1)後再加上n”的方法實現。即sum(n)方法的方法體就是調用sum(n-1)再加上n。程式如下:import
java.io.*;publicclass
Sum{
publicstaticintsum(int
n)
{if(n<1)
return0;elsereturnsum(n-1)+n;}publicstaticvoid
main(String
args[]){byte[]by=newbyte[20];intresult=0,num=0;Stringstr;
System.out.print(“Pleaseinputthenumber:”);try
{
System.in.read(by);//從鍵盤讀一個數字串保存於str中
str=newString(by);
num=Integer.parseInt(str);//數字串轉換成整數
}
catch
(Exceptione){}
//catch語句,Exception為異常類
result=sum(num);
//調用sum()求和
System.out.print(result);}
}
方法的final修飾符表明方法不得被覆蓋。帶有final修飾符的方法稱為最終方法。Java中除非說明為最終方法,否則方法是可以覆蓋的。Java之所以這樣規定,主要是因為Java的純面向對象特性,它把覆蓋當作面象對象的重要特性,給予了最大限度的實現。
把方法聲明為最終方法有時可增加代碼的安全性。5.方法的final修飾符5.方法的final修飾符例4.5最終方法例finalbooleanGetSwitchState()//獲取開關狀態{returnPower-On;
//返回Power-On值}6.單態設計模式設計模式是在大量的實踐中總結和理論化之後優選的代碼結構、編程風格、以及解決問題的思考方式。設計模式就像是經典的棋譜,不同的棋局,我們用不同的棋譜,免得我們自己再去思考和摸索。失敗為成功之母,但是要以大量的時間和精力為代價,如果有成功經驗可借鑒,沒有人再願意去甘冒失敗的風險,我們沒有理由不去瞭解和掌握設計模式,這也是Java開發者提高自身的素質的一個很好的選擇。使用模式也許會制約你去創新,不過真正有意義的創新只能出自少數天才,即使你就是那個天才,雖不必因循守舊,但也不可能完全不去瞭解和借鑒前人的成功經驗。6.單態設計模式所謂的類的單態設計模式,就是採取一定的方法保證在整個軟體系統中,對某個類只能存在一個對象實例,並且該類只提供一個取得其對象實例的方法。我們首先必須將類的構造方法的訪問許可權設置為private;因為在類的外部開始還無法得到類的對象,只能調用該類的某個靜態方法以返回類內部創建的對象;靜態方法只能訪問類中的靜態成員變數,所以,指向類內部產生的該類對象的變數也必須定義成靜態的。4.4繼承4.4.1繼承概述4.4.2父類和子類的單繼承定義格式4.4.3子類對父類成員重載4.4.4null、this、super4.4.5多態性4.4.6最終類4.4.1繼承概述繼承是從現有的一個類創建新類的過程,可以簡化類的定義。Java只支持單繼承,不允許多重繼承。如果在聲明類B時,指明類B繼承了類A(類A是一個已定義了的類),則類B通常就擁有了類A的成員變數和方法。此時,類A稱為類B的父類(superclass),父類也稱為超類或基類;類B稱為類A的子類(subclass),子類也稱為派生類。4.4.1繼承概述繼承是面向對象編程的一個主要優點之一,它對如何設計Java類有著直接的影響。繼承有如下幾點好處:它可以利用已有的類來創建自己的類,只需要指出自己的類和已有的其他的類有什麼不同即可,而且還可以動態訪問其他有關的類中的資訊。通過繼承,可以利用Java類庫所提供的豐富而有用的類,這些類都已經被很好地實現。當設計很大的程式時,繼承可以使程式組織得更加層次清晰,有利於程式設計和減少錯誤的發生。4.4.2父類和子類的單繼承定義格式
類繼承語法形式如下:
classSubClassNameextendsSupperClassNameextends是繼承關鍵字。SubClassName是新的子類名,SupperClassName是繼承的父類名。父類名是必需的,而且只能有一個。父類名所指定的類必須是在當前編譯單元中可以訪問的類,否則會產生編譯錯誤。4.4.2父類和子類的單繼承定義格式注意:子類不能繼承父類的私有成員(變數、方法)。supersuper: 代表父類,用於對類的父類的引用。使用情況:
1子類隱藏了超類中的變數或方法,而在程式中又要使用超類中被隱藏的變數或方法時
格式:super.變數;
super.方法([參數表])2在子類的構造方法中引用超類的構造方法時,
格式:super([參數表])補充:子類對象的實例化過程分配成員變數的存儲空間並進行默認的初始化;綁定構造方法參數,就是newPerson(實際參數列表)中所傳遞進的參數賦值給構造方法中的形式參數變數;如果有this()調用,則調用相應的構造方法,執行結束後,回到當前構造方法,當前構造方法直接跳轉到步驟6執行;顯式或隱式追溯調用父類的構造方法(一直到object類為止,object類是Java類的最頂層父類),執行結束後,回到當前構造方法,當前構造方法繼續往下執行;進行實例變數的顯式初始化操作,也就是執行在定義成員變數時就對其進行賦值的語句;執行當前構造方法的方法體中的程式代碼。補充:子類對象的實例化過程補充:子類對象的實例化過程思考:為什麼super()和this()語句不能同時在一個構造函數中出現?為什麼super()和this()語句只能作為構造函數中的第一句出現?子類的特性:①子類擁有其父類的所有屬性和方法。但父類中說明為private的屬性和方法,子類不可直接訪問。
②子類可以對父類的方法覆蓋或重載。
方法覆蓋:
子類的方法首部與父類的方法首部相同(如何理解首部相同?),但是子類重新實現了該方法。
方法重載:
子類的方法名與父類的方法名相同,但是子類該方法的形式參數列表與父類的方法的形式參數列表不同,並且重新實現了該方法。
如果子類聲明了一個與父類的成員變數同名的成員變數,則稱父類的該成員變數被隱藏(Hiding)。4.4.3子類對父類成員重載4.4.3子類對父類成員重載注意:子類覆蓋父類的方法,子類方法的訪問許可權一定不能比父類方法的訪問許可權弱。被覆蓋的父類的方法,不能被子類的對象訪問。4.4.5多態性(Polymorphism)含義:同一操作對不同類可以呈現不同的行為。在繼承的情形下,當調用繼承結構中不同類的同一操作時,實際現行對象的操作被調用。特點:
final修飾符定義一個不能被繼承的類。目的:
增強代碼的安全性。4.4.6最終類總結:final關鍵字在Java中聲明類、屬性和方法時,可使用final關鍵字來修飾。final標記的類不能被繼承。final標記的方法不能被子類重寫。final標記的變數(成員變數或局部變數)即成為常量,只能賦值一次。null:為“空”變數,表示這個對象不存在相應的實例
例:Rectanglerect=null;this:表示引用對象本身.使用情況:1方法體中訪問類的同名成員變數格式:this.成員變數
2在某一個構造函數中使用本類的其他構造函數格式:this(實參列表);總結:null,this和super例4.9this引用自身class
Rectangle
{
int
width,length;
Rectangle(int
width,int
length)
//構造方法
{
this.width=width;
//this代表對象自身
this.length=length;}
publicvoid
drawRect(){System.out.println("thisisRectangle!");}}
上面這個例子中,用this表示引用對象本身。總結:null,this和supersuper用於對類的父類的引用。在構造方法中,super代表對父類的構造方法的引用。例4.10用super引用類的父類class
fillRectangleextendsRectangle{public
fillRectangle(int
w,int
h)
//構造方法
{
super(w,h);
}
//調用父類的構造方法
private
StringmakeString(char
ch,int
num)
{StringBufferstr=new
StringBuffer();for(int
i=num;i>0;i--)str.append(ch);
return
str.toString();}總結:null,this和superpublicvoid
drawRect(){
for(int
i=length;i>0;i--)//用字符“#”繪製(填滿)一個矩形
System.out.pringln(makeString('#',width));}}
在這個類的構造方法中並沒有寫新的程式,而是調用了父類的構造函數,用於初始化實例變數。總結:null,this和super4.5介面介面的概念4.5.1介面的說明4.5.2介面的使用
4.5.3介面與類的比較介面的概念概念:就是一些常量和抽象方法的定義的集合,它是一個設計框架作用: 使設計與實現分離注意:介面可以繼承:一個介面可以繼承多個其他的介面;介面中的方法要用類來實現;一個類可以實現多個介面。介面與類的比較介面類只能單繼承,而介面可以多繼承。類中的方法可以是具體的,也可以抽象的。介面中的方法都是抽象的。介面中的方法要用類來實現,一個類可以實現多個介面。4.5.1介面的說明介面首說明
[pubic]interface接口名[extends
介面序列]{介面體}像類一樣,編譯好的介面保存在Class檔中。介面名前有pubic修飾符,則任何一個類都可以調用該介面介面名前沒有pubic修飾符,則只有那些與本介面在同一個包中的類才能訪問該介面。
介面體說明介面的成員——常量和抽象方法。
{[常量說明][抽象方法說明]}
變數:默認為publicstaticfinal
抽象方法:默認為publicabstract4.5.1介面的說明4.5.1介面的說明介面體說明注意:(1)介面中的成員變數(常量)說明聲明形式:
[修飾符]類型名變數名;介面中的成員變數的修飾符都只能用public、static、final,而且也都隱含著修飾符,所以修飾符是不必寫的。就是說,介面中的成員變數都是公用的靜態最終變數,即公用的靜態常量。
例如:在介面中,下麵這行代碼:
int
STEP=5;
等
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东卷-2025届高考物理4月模拟预测卷(含解析)
- 2025年广东省深圳市南山区蛇口中学中考物理一模试卷(含解析)
- 宜宾市2024-2025学年初三语文试题周练试卷含解析
- 上海行健职业学院《计量文化传播与设计》2023-2024学年第一学期期末试卷
- 湖南省二校联考2025届高三5月考前模拟化学试题含解析
- 辽阳市重点中学2025届高三下第六次模拟考试生物试题含解析
- 西安思源学院《基地社工服务与田野基地建设》2023-2024学年第二学期期末试卷
- 汕头市龙湖区2025年三下数学期末学业质量监测试题含解析
- 内蒙古北重公司第三中学2025年高三下-第二次月考英语试题试卷含解析
- 四川南充市高2025年高三第三次联考(江苏版)语文试题试卷含解析
- 大部分分校:地域文化形考任务一-国开(CQ)-国开期末复习资料
- MOOC 财务报表分析-华中科技大学 中国大学慕课答案
- 卢卡奇教学讲解课件
- 综合楼十项新技术应用汇报总结
- 地基处理之换填地基
- 高一物理 必修二《机车的两种启动方式》教学设计
- 微机保护原理课件
- 赢时胜财务估值系统日常操作指引
- 国内外饮料灌装生产线发展现状
- 湖南省第十八届普通高校大学生英语演讲比赛暨第三届“外研
- 幼儿园主题活动评价表建议正式版
评论
0/150
提交评论