![JAVA程序设计基础课件_第1页](http://file4.renrendoc.com/view/4d3d441d8d81b62c8ce47cc377efb66a/4d3d441d8d81b62c8ce47cc377efb66a1.gif)
![JAVA程序设计基础课件_第2页](http://file4.renrendoc.com/view/4d3d441d8d81b62c8ce47cc377efb66a/4d3d441d8d81b62c8ce47cc377efb66a2.gif)
![JAVA程序设计基础课件_第3页](http://file4.renrendoc.com/view/4d3d441d8d81b62c8ce47cc377efb66a/4d3d441d8d81b62c8ce47cc377efb66a3.gif)
![JAVA程序设计基础课件_第4页](http://file4.renrendoc.com/view/4d3d441d8d81b62c8ce47cc377efb66a/4d3d441d8d81b62c8ce47cc377efb66a4.gif)
![JAVA程序设计基础课件_第5页](http://file4.renrendoc.com/view/4d3d441d8d81b62c8ce47cc377efb66a/4d3d441d8d81b62c8ce47cc377efb66a5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java基本語法2.1Java語言的基本組成2.1.1識別字2.1.2關鍵字2.2變數和直接量變數是一塊取了名字的用來存儲Java程式資訊的記憶體區域,它是一些有意義的數據。在程式中,定義的每塊被命名的記憶體區域只能存儲一種特定類型的數據。在程式中直接給出的數值被稱作直接量,直接量可以是一個具體的數值或字串,每個直接量也屬於一個特定的類型。2.3數據類型2.3.1integer數據類型 (1)位元組(byte)型 (2)短整(short)型 (3)整(int)型 (4)長整(long)型2.3.2浮點數據類型 (1)單精確度浮點型(float) (2)雙精度浮點型(double)2.3.3變數類型的轉換2.4運算符與運算式2.4.1賦值運算符2.4.2算術運算符2.4.3關係運算符2.4.4條件運算符2.4.5邏輯運算符2.5Java語句及其控制結構2.5.1Java語句 Java語句是Java識別字的集合,由關鍵字、常量、變數和運算式構成,是成員方法的主要成分,必須包含在類的方法體之中。Java語句有運算式語句、複合語句、選擇語句和迴圈語句等。語句以分號“;”作為結束標誌,單獨的一個分號被看作一個空語句,空語句不做任何事情。在運算式後邊加上分號“;”就是一個運算式語句。經常使用的運算式語句有賦值語句和方法調用語句。運算式語句是最簡單的語句,它們被順序執行,完成相應的操作。 複合語句也稱為塊(block)語句,是包含在一對大括弧“{}”中的任意語句序列。與其他語句用分號作結束符不同,複合語句右括弧“}”後面不需要分號。儘管複合語句含有任意多個語句,但從語法上講,一個複合語句被看作一個簡單語句。例2-2:publicclassBlock{publicstaticvoidmain(Stringargs[]){intk,i=3,j=4;k=i+j;System.out.println("k="+k);{floatf;f=j+4.5F;i++;System.out.println("f="+f);}System.out.println("i="+i);}}運行結果見圖2-2。圖2-2程式說明:在main方法中有兩個複合語句嵌套在一起,複合語句內包含的是運算式語句。第1個複合語句中說明了3個整型變數k、i、j,它們不僅在第1個複合語句中起作用,還在被嵌套的第2個複合語句中起作用。而在第2個複合語句中說明的變數f僅在第2個複合語句中起作用。在這個例子中,人為地加入了一個複合語句,在實際編程中並不多見。複合語句更廣泛的應用是在結構式語句中,如選擇語句和迴圈語句。當結構式語句中包含的運算式語句超過一條時,就要用大括弧把它們括起來。2.5.2選擇語句 在複合語句中必須逐行執行每條命令。能否改變程式執行的順序呢?利用if...else結構就可以根據條件控制程式流程。1.if語句if語句的語法結構如下:if(條件運算式)s1語句;這是最簡單的單分支結構。條件運算式的值為true,就執行s1語句,否則就忽略s1語句。s1語句可以是複合語句。2.if...else語句 if選擇結構僅當條件為真時才執行某一動作,否則忽略這一動作。而if...else選擇結構允許程式員指定在條件為真或者條件為假時的不同動作。if語句通常都與else語句配套使用,形成二分支結構。它的語法結構如下:if(條件運算式)s1語句;elses2語句;當條件運算式的值為true,就執行s1語句,忽略else和s2語句;否則,條件運算式的值為false,程式忽略s1語句,執行else後面的s2語句。s1和s2都可以是複合語句。3.if...else複合結構對於複雜的情況,我們可以嵌套使用if...else語句。它的語法結構如下:if(條件運算式1)s1語句;elseif(條件運算式2)s2語句;elses3語句; 在這裏依次計算條件運算式,如果某個條件運算式的值為true,就執行它後面的語句,其餘部分被忽略。所有運算式的值都為false,就執行最後一個else後的s3語句。s1、s2和s3都可以是複合語句。4.switch開關語句 雖然嵌套的條件語句可實現多個分支處理,但嵌套太多時容易出錯和混亂,這時可以使用開關語句switch處理。實際上開關語句switch也是一種if...else結構,不過它使你在編程時很容易寫出判斷條件,特別是有很多條件選項的時候。開關語句switch的語法結構如下:switch(運算式){case常量1;語句1;
break;case常量2;語句2;
break;……default:
語句n;}其中switch、case、default是關鍵字,default子句可以省略。開關語句先計算運算式,然後將運算式值與各個常量比較,如果運算式值與某個常量相等,就執行該常量後面的語句。如果都不相等,就執行default下麵的語句,如果無default子句,就什麼都不執行,直接跳出開關語句。使用開關語句時,注意以下問題。(1)case後面的常量必須是整數或字元型,而且不能有相同的值。(2)通常在每一個case中都應使用break語句提供一個出口,使流程跳出開關語句。否則,在第一個滿足條件case後面的所有語句都會被執行,這種情況叫做落空。(3)有些case標號列在一起(如“case1:case2:”,中間沒有語句),這表示對所列情況將進行同樣的操作。2.5.3迴圈語句 1.for迴圈語句 for迴圈的語法結構為: for(運算式1;運算式2;運算式3) 循環體2.while迴圈語句 while迴圈的語法結構為如下形式: while(條件運算式) 循環體3.do...while迴圈 如不用大括弧,循環體中只含一條語句的do...while結構如下: do 語句 while(條件);只有一條語句的do...while結構也常常寫成如下形式:do{語句}while(條件);4.迴圈語句的嵌套5.迴圈語句小結一個迴圈一般應包括以下4部分內容。(1)初始化部分用來設置迴圈的一些初始條件,計數器清零等。(2)循環體部分這是反復被執行的一段代碼,可以是單語句,也可以是複合語句。(3)迭代部分這是在當前迴圈結束,下一次迴圈開始時執行的語句,常用來使計數器加1或減1。(4)終止部分通常是一個布爾運算式,每一次迴圈要對該運算式求值,以驗證是否滿足迴圈終止條件。2.5.4跳轉語句 1.break和continue語句 2.帶標號的break和continue語句2.6數組2.6.1數組的聲明和建立 數組按如下格式定義: typearrayname[]; type是數組類型,它指出數組中各元素的類型,arrayname為數組名。2.6.2多維數組 以二維數組為例,其格式為: typearrayname[][];第3章面向對象的程式設計3.1簡介3.2類3.3對象3.4實例研究(無)3.5類的繼承和類的多態性3.6接口與包3.1簡介Java是面向對象的程式設計語言,從面向對象這個角度看,體現了如下3個特點。1.封裝性2.繼承性3.通信相關性3.2類1.類的說明(1)指出特性(2)指出父類(extends部分)(3)指出介面(implements部分)2.類體3.2.1類的成員變數 1.變數的訪問許可權 (1)公用(public)變數 (2)專用(private)變數 (3)保護型(protected)變數 (4)專用保護型(privateprotected)變數 (5)默認型變數2.是否為靜態變數3.是否為常量3.2.2類的方法 其格式如下所示: methodDeclaration{ methodBody }3.2.3this和super this和super是Java的兩個關鍵字,它們用在方法體中作為兩個特殊的變數首碼和方法首碼。this用來指明當前對象的成員變數或方法,以區分於同名的局部變數和其他同名的方法,而super則用於指出父類的變數和方法。 1.this的使用場合 一個對象中的方法一般可以直接訪問同一對象的成員變數。但是,有時候方法體內部定義的變數和成員變數名字相同,還有時方法的入口參數和對象的成員變數名字相同,那麼就需要將三者區別清楚。因此,專門用this來指明當前對象的成員變數或當前對象的方法。2.super的使用場合在Java中,由父類派生子類,這樣,子類的成員變數可能和父類的成員變數名字相同,子類的方法也可能和父類的方法一樣。當需要調用父類的同名方法或使用父類的同名變數時,在子類中可用關鍵字super作首碼來指明父類的成員變數和方法。3.2.4構造函數3.2.5main方法3.3對象3.3.1對象的創建 一個對象往往經歷創建、運行和釋放3個階段,這稱為對象的典型生命週期。 創建對象包括定義對象、建立對象和初始化對象3步。3.3.2對象的使用 對象使用就是指通過某種手段使一個對象產生它的效能。有兩種途徑來使用對象:一種是通過對象變數的引用來使用對象,另一種是通過調用對象的方法來使用對象。下麵我們結合具體例子來說明。1.通過對象變數的引用來使用對象實際上,對象變數的引用就是用語句訪問對象的變數,通過這種引用可以檢測和修改變數。引用對象變數須按如下格式:ObjectReference.variable;其中,ObjectReference是對象名,variable是所引用的變數。比如,已經由Rectangle建立了名為myRectangle的對象,它有4個可以訪問的變數x,y,width和height,那麼:myRectangle.x=2;myRectangle.y=4;這兩個語句將矩形myRectangle的原點定位於X軸方向為2,Y軸方向為4的位置上,而語句:rnyRectangle.width=20;myRectangle.height=40;則將矩形的寬定為20,長定為40。對象變數的引用不僅能夠檢測和修改變數,也可以通過運算式來對幾個變數進行合成,得到新的複合型變數。比如,用如下運算式引用對象變數:areaMyRectangle=myRectangle.width*myRectangle.height;就獲得了矩形的面積,它用變數areaMyRectangle表示。要提到的是,對象變數的引用有時會使某個變數改得不符合要求,從而使一個對象處於不規範狀態。因為這一點,在類的設計中,有些變數被設置為禁止被操作狀態,從而使這些變數不允許其他對象訪問。這時,對象變數引用就不可行了。2.通過調用對象的方法來使用對象 每個對象在創建的時候,一方面用變數確定了它的狀態,由創建過程為它分配記憶體空間,另一方面也創建了與它有關的方法,每個方法都是和行為有關的。所以通過調用對象的某個方法來使用對象,從而產生某種行為,這是最符合邏輯思維習慣的。實際上,這也是更為安全可靠地使用對象的一種手段,因為這避免了對變數的直接操作。 調用一個對象中的某個方法要遵照如下格式:ObjectReference.methodName(paramlist); 或者:ObjectReference.methodName();比如,從Rectangle類中創建的對象myRectangle含有一個方法叫move(),下麵的語句就是用方法move()將對象myRectangle移動到一個新的位置:myRectangle.move(5,10);這個語句產生的效果等同於下麵兩個語句:myRectangle.x=5;myRectangle.y=10;3.3.3對象的釋放 所謂釋放對象,實質上就是釋放掉分配給此對象的記憶體空間。Java中,對象的釋放是自動完成的,不需要程式員在編程時關注這一點。Java運行系統具有所謂的“垃圾收集”機制,這種機制會週期性地檢測對象是否還在使用,如發現有長期不用的對象,則給予釋放,回收分配給這些對象的記憶體,這就是垃圾收集。 具體運行中,垃圾收集是由一個稱為Java垃圾收集器的程式實現的。當一個對象在使用時,Java運行系統會將其對應的記憶體空間設置標記;而當一個對象結束使用時,會自動清除標記。有了這種標記設置和清除的規則,Java垃圾收集器就可以通過週期性地掃描所有Java對象有關的記憶體區域標記,將沒有標記的記憶體區列入可供分配的範疇,從而起到垃圾收集作用。3.5類的繼承和類的多態性3.5.1類的繼承 類的繼承是面向對象的程式設計語言所具有的重要技術。有了繼承技術,程式設計時,就可以先定義一個包含公用變數和公用方法的類作為父類,再在此基礎上創建具有專用變數和專用方法的子類。子類一方面可以增加父類中沒有的變數和方法,另一方面還可以在繼承基礎上再定義父類中已有的變數和方法。 Java系統要求應用程式中每個類都有父類,如果一個類的定義中沒有用關鍵字extends明確指出父類名,則Java系統默認這個類的父類為系統軟體包java.1ang中的Object類。父類中凡是公用型的、保護型的或者專用保護型的變數和方法均可由子類直接調用,只有父類的專用型變數和專用型方法不能被子類調用。例3-3://Point.javapublicclassPoint{protectedintx,y;publicPoint(){setPoint(0,0);}publicPoint(inta,intb){setPoint(a,b);}publicvoidsetPoint(inta,intb){x=a;y=b;}publicintgetX(){returnx;}publicintgetY(){returny;}publicStringtoString(){return"["+x+","+y+"]";}}//Circle.javapublicclassCircleextendsPoint{protecteddoubleradius;publicCircle(){setRadius(0);}publicCircle(doubler,inta,intb){super(a,b);setRadius(r);}publicvoidsetRadius(doubler){radius=(r>=0.0?r:0.0);}publicdoublegetRadius(){returnradius;}publicdoublearea(){returnMath.PI*radius*radius;}publicStringtoString(){return"Center="+super.toString()+";Radius="+radius;}}//Cylinder.javapublicclassCylinderextendsCircle{protecteddoubleheight;publicCylinder(){setHeight(0);}publicCylinder(doubleh,doubler,inta,intb){super(r,a,b);setHeight(h);}publicvoidsetHeight(doubleh){height=(h>=0?h:0);}publicdoublegetHeight(){returnheight;}publicdoublearea(){return2*super.area()+2*Math.PI*radius*height;}publicdoublevolume(){returnsuper.area()*height;}publicStringtoString(){returnsuper.toString()+";Height="+height;}}//Test.javaimportjavax.swing.JOptionPane;importjava.text.DecimalFormat;publicclassTest{publicstaticvoidmain(Stringargs[]){Cylinderc=newCylinder(5.7,2.5,12,23);DecimalFormatprecision2=newDecimalFormat("0.00");Stringoutput;output="Xcoordinateis"+c.getX()+"\nYcoordinateis"+c.getY()+"\nRadiusis"+c.getRadius()+"\nHeightis"+c.getHeight();c.setHeight(10);c.setRadius(4.25);c.setPoint(2,2);output+="\n\nThenewlocation,radius"+"andheightofcare\n"+c+"\nAreais"+precision2.format(c.area())+"\nVolumeis"+precision2.format(c.volume());JOptionPane.showMessageDialog(null,output,"DemonstratingClassCylinder",
JOptionPane.INFORMATION_MESSAGE);System.exit(0);}}運行結果見圖3-3。圖3-3 程式分析:Circle類繼承了Point類。這意味著Circle的public介面除了包括Circle類的setRadius、getRadius、area、toString方法和Circle的構造函數外,還包括Point的方法。應用程式Test用來測試Cylinder類。 注意Cylinder類繼承了Circle類,即Cylinder的public介面除了包括Cylinder構造函數,Cylinder的方法setHeight、getHeight、area(覆蓋Circle的area方法)、volume和toSting外,還包括Circle的方法。Test應用程式的main方法首先實例化了Cylinder類的一個對象,然後用“獲取”方法獲取關於Cylinder對象的資訊。同樣,這裏的main方法也不能直接引用Cylinder類的protected數據。3.5.2類的多態性 如果你想要使用多態性,則所需的條件概括如下。 (1)對派生類對象方法的調用必須通過基類的變數。 (2)被調用的方法必須也是基類的一個成員。(3)在基類與派生類中這個方法的方法名必須相同。(4)在基類與派生類中這個方法的返回類型必須相同。(5)在派生類中這個方法的訪問修飾符限制不能超過基類中的限制。3.6接口與包3.6.1介面 介面是和類很相似而又有區別的一種結構,介面的設計和調用也是Java程式設計的重要技術。從結構上,介面有如下特點。 (1)介面用關鍵字interface來定義,而不是用class。(2)介面中定義的變數全是最終的靜態變數。(3)介面中沒有自身的構造方法,而且定義的其他方法全是抽象方法,即只提供方法的定義,而沒有提供方法的實現語句。(4)介面採用多重繼承機制,而不是採用類的單一繼承機制。3.6.2包 1.聲明自己的程式包 2.程式包的引用 3.Java的系統程式包第4章異常處理和常用系統類4.1異常處理機制4.2String類和StringBuffer類4.3AWT4.4Javaapplet4.1異常處理機制4.1.1什麼是異常 用任何一種電腦語言設計的程式在運行時都可能出現各種錯誤,常見的錯誤如除數為0、檔不存在、檔不能打開、數組下標超過界限、記憶體不夠用等。對於這種在運行中出現的錯誤,電腦系統中通常有兩種處理辦法。 (1)由電腦系統本身直接檢測程式錯誤,遇到錯誤時使程式終止運行。這種處理方法的優點是使程式設計比較簡單。但是,對程式錯誤一概地採用終止運行辦法,顯然過於簡單化。因為有些情況下,完全可以通過其他途徑保持程式繼續運行。比如,由於檔案名不符合要求而無法打開檔,那麼,可以提示用戶輸入一個新的檔案名,從而使程式繼續往下運行。 (2)由程式員在程式設計中兼顧錯誤檢測、錯誤資訊顯示和出錯處理。這種處理方法的優點是減少了中途終止程式運行的可能性。但是,要求程式員在程式設計中不僅將精力用於正常處理過程,還要精心考慮錯誤檢測和處理,這會使程式變得複雜。並且,這類錯誤檢測往往是多數程式中重複甚至在一個程式中多次重複。而另一方面,如果程式中某處忽略了應有的檢測,又將引起程式總體結果的錯誤。 Java採用異常處理機制來處理程式運行中的錯誤。按照這種機制,將程式運行中的所有錯誤都看成一種異常,通過對語句塊的檢測,一個程式中所有的異常被收集起來放在程式的某一段中去處理。在Java系統中,專門設置了一個調用棧,此棧中裝有指向異常處理方法的指針。 在程式運行時,系統會把收集到的異常和異常處理指針所指的處理類型逐個比較,如果找到相符的類型,那麼就轉向相應的方法處理,如沒有在調用棧中找到相應的類型指針,則終止程式運行,並顯示解釋資訊。在Java程式中,異常一般由以下兩種原因引起。(1)程式中存在非法操作,最簡單的例子就是除數為0的除法操作。這種原因常常是程式員出於無意或大意造成的,所以稱為隱式異常。常見的隱式異常可以通過java.lang包中的Throwable類的子類Error處理。 (2)程式員在程式中使用了throw語句引起的異常。這種異常是程式員出於某種考慮有意安排的,所以稱為顯式異常。在throw語句中,都會指出處理顯式異常的對象,這些對象都是由java.lang包的類Throwable的子類Exception再派生的子類生成的,每個對象完成對某種異常的處理功能,這些對象綜合起來實現各種異常處理。比如Array-IndexOutOfBoundsException子類處理數組越界異常,IOException子類處理輸入輸出異常,而ArithmeticException子類處理除數為0導致的算術異常等。4.1.2異常的層次結構4.1.3異常的處理4.1.4創建自己的異常4.2String類和StringBuffer類4.2.1String類1.String類的主要構造方法 String類有多個構造方法,主要的有下列5個:String();String(charchars[]);String(charchars[],intstartIndex,intnumChars);String(byteascii[],inthiByte);String(byteascii[],inthiByte,intstartIndex,intnumChars);第1個構造方法生成一個空串。第2個構造方法生成一個字元數組。第3個構造方法生成一個字串,這個字串是從字元數組chars[]中提取的,具體講,即從chars[]數組的startIndex位置開始提取字元,共提取numChars個字元組成一個字串。第4個構造方法是以位元組數組的形式生成一個字串,數組中存放字串各字元對應的ASCII碼。第5個構造方法也是從位元組數組生成一個字串。具體講,就是以位元組數組ascii[]的startIndex處開始,共提取numChars個字元構成字串,如為ASCII字元,則hiByte的值為0。例4-5:importjavax.swing.*;publicclassStringConstructors{publicstaticvoidmain(Stringargs[]){charcharArray[]={'b','i','r','t','h','','d','a','y'};bytebyteArray[]={(byte)'n',(byte)'e',(byte)'w',(byte)'',(byte)'y',(byte)'e',(byte)'a',(byte)'r'};StringBufferbuffer;Strings,s1,s2,s3,s4,s5,s6,s7,output;s=newString("hello");buffer=newStringBuffer("WelcometoJavaProgramming!");s1=newString();s2=newString(s);s3=newString(charArray);s4=newString(charArray,6,3);s5=newString(byteArray,4,4);s6=newString(byteArray);s7=newString(buffer);output="s1="+s1+"\ns2="+s2+"\ns3="+s3+"\ns4="+s4+"\ns5="+s5+"\ns6="+s6+"\ns7="+s7;JOptionPane.showMessageDialog(null,output,"DemonstratingStringClassConstructors",
JOptionPane.INFORMATION_MESSAGE);System.exit(0);}}運行結果見圖4-5。圖4-5程式分析:String類提供了9個構造函數,以便使用各種方法初始化String對象。例題共演示了7種。程式“s1=newString()”實例化一個新的String對象,並使用String類的缺省構造函數將它賦給引用s1。新的String對象沒有字元(即空串),長度為0。“s2=newString(s);”例化一個新的String對象,並使用String類的拷貝構造函數,將它賦給引用s2。s被當作參數傳送給構造函數,新的String對象包含了String對象s中的字元的拷貝。在大多數情況下,沒有必要拷貝已有的String對象。String對象是不變的,一旦創建後就不能改變它們的內容(字串)。而且,如果有一個或多個引用指向某個String對象,垃圾收集器就不能回收該對象。也就是說,String引用既不能用於修改String對象,也不能刪除String對象。這一點與C語言或C++語言是不同的。“s3=newString(charArray);”實例化一個新的String對象,並使用以字元數組為參數的String類構造函數,將它賦給引用s3。新的String對象包含了數組中字元的拷貝。“s4=newString(charArray,6,3);”實例化一個String對象,使用以一個字元數組和兩個整數為參數的String類構造函數,將它賦給引用s4。第2個參數指定了在數組中拷貝字元的起始位置(offset)。第3個參數指定了數組中拷貝字元的數目(count),新的String對象包含了數組中指定字元的拷貝。如果offset或count參數指定的所取元素超過了字元數組的界限,就會產生StringIndexOutOfBoundsException的例外處理。“s5=newString(byteArray,4,4);”實例化一個新的String對象,使用以一個byte數組和兩個整數為參數的String類構造函數,將它賦給引用s5。第2和第3個參數分別指定了offset和count。新的String對象包含了數組中指定byte的拷貝。如果offset或count參數指定的所取元素超過了byte數組的界限,就會產生一個StringIndexOutOfBoundsException的例外處理。“s6=newString(byteArray);”實例化一個新的String對象,使用以一個byte數組為參數的String類構造函數,將它賦給引用s6。新的String對象包含了數組中byte的拷貝。“s7=newString(buffer);”實例化一個新的String對象,使用以StringBuffer為參數的String類構造函數,將它賦給引用s7。StringBuffer是一個可動態改變大小和內容的字串。新的String對象包含了StringBuffer中字元的拷貝。2.String類的length、charAt和getChars方法 下麵的例子演示了String類的length、charAt和getChars方法,它們分別用於確定String類的長度、取String某一指定位置的字元以及取String某一子串。3.String類的字串比較例4-7:importjavax.swing.JOptionPane;publicclassStringCompare{publicstaticvoidmain(Stringargs[]){ Strings1,s2,s3,s4,output;s1=newString("hello");s2=newString("goodbye");s3=newString("HappyBirthday");s4=newString("happybirthday");output="s1="+s1+"\ns2="+s2+"\ns3="+s3+"\ns4="+s4+"\n\n";if(s1.equals("hello"))output+="s1equals\"hello\"\n";elseoutput+="s1doesnotequal\"hello\"\n";if(s1=="hello")output+="s1equals\"hello\"\n";elseoutput+="s1doesnotequal\"hello\"\n";if(s3.equalsIgnoreCase(s4))output+="s3equalss4\n";elseoutput+="s3doesnotequals4\n";output+="\pareTo(s2)is"+pareTo(s2)+"\pareTo(s1)is"+pareTo(s1)+"\pareTo(s1)is"+pareTo(s1)+"\pareTo(s4)is"+pareTo(s4)+"\pareTo(s3)is"+pareTo(s3)+"\n\n";if(s3.regionMatches(0,s4,0,5))output+="First5charactersofs3ands4match\n";elseoutput+="First5charactersofs3ands4donotmatch\n";if(s3.regionMatches(true,0,s4,0,5))output+="First5charactersofs3ands4match";elseoutput+="First5charactersofs3ands4donotmatch";JOptionPane.showMessageDialog(null,output,"DemonstratingStringClassConstructors",
JOptionPane.INFORMATION_MESSAGE);System.exit(0);}}4.在字串中定位字元和子串5.從字串中抽取子串6.字串連接publicStringconcat(Stringst)可返回一個字串,它將把參數str添加在原字串的後面形成一個新的字串。但在Java中,更多的是使用“+”來連接字串。這裏讀者可能會產生一個小小的迷惑,因為前面我們講過String對象是不能改變的。實際上,字串的連接是由編譯器利用StringBuffer的方法append來實現的。這在下面的章節中講解。例4-10:importjavax.swing.*;publicclassStringConcat{publicstaticvoidmain(Stringargs[]){Strings1=newString("Happy"),s2=newString("Birthday"),output;output="s1="+s1+"\ns2="+s2;output+="\n\nResultofs1.concat(s2)="+s1.concat(s2);output+="\ns1afterconcatenation="+s1;JOptionPane.showMessageDialog(null,output,"DemonstratingStringMethodconcat",JOptionPane.INFORMATION_MESSAGE);System.exit(0);}}運行結果見圖4-10。7.轉化為字串圖4-104.2.2StringBuffer類 String類提供了很多處理字串的功能。但是,一旦創建了字串對象,它的內容就永遠不會變。下麵將討論StringBuffer類的特點。這個類可以創建和操縱動態字串,即可修改的字串。每個StringBuffer都能夠存儲由它的容量所指定的一些字元。如果超過了StringBuffer的容量,容量就會自動地擴大以容納多出來的字元。我們將看到,StringBuffer類還可用來實現用於字串連接的運算符"+"。 String對象是常量字串,StringBuffer對象是可修改的字串。Java區分字串和可修改的字串是為了優化的目的。特別地,Java可以實現有關String對象的某些優化,例如多個引用共用一個String對象,因為它知道這些對象不會改變。 注意:在選擇是用String對象還是用StringBuffer對象來表示一個字串時,如果該對象確實不會改變,則總是使用String對象,這樣做可以改善性能。對String對象調用非String類的StringBuffer方法是一種語法錯誤。StringBuffer提供的方法有一些與String相同,有一些不同。最主要的方法有兩組,一組是append,另一組是insert。4.3AWT4.3.1AWT概述4.3.2AWT的特點4.3.3AWT應用4.4Javaapplet4.4.1Javaapplet的特點 Javaapplet與Java應用程式不同。它們的不同之處有以下幾個方面。 (1)Java應用程式中,必須有一個main()方法。Main()方法是程式的入口,當程式開始運行時,解釋器首先查找main()方法並執行。而Javaapplet中則不需要main()方法,它必須嵌入HTML檔中,由支持Javaapplet的流覽器運行。(2)Java應用程式可以獨立運行。而Javaapplet不能獨立運行,需要依賴於網路流覽器。(3)Java應用程式所實現的功能是完全的,不需依賴於其他程式。而Javaapplet實現的功能是不完全的,它必須借助於流覽器中預先設計好的功能和已有的圖形介面。Javaapplet只需接收流覽器發送給它的消息,並及時做出回應。 (4)Java應用程式中的所有方法的使用是通過調用實現的。可以人為控制。而Javaapplet中有一部分方法是固定的,只能由流覽器在特定時刻和場合調用,不能人為控制,但可以重載。4.4.2Javaapplet的程式結構 Javaapplet的一般程式結構如下: importjava.applet.*; importjava.awt.*; publicclass子類名extendsApplet //定義Applet類的子類{publicvoidinit(){方法體}//初始化方法
publicvoidstart(){方法體}//開始執行方法
publicvoidstop(){方法體}//停止執行方法
publicvoiddestroy(){方法體}//退出方法
publicvoidpaint(Graphicsg){方法體}//繪畫方法}……從Javaapplet程式結構看出,Javaapplet由若干類組成,無需main()方法,但必須有且僅有一個主類,該類是Applet類的子類,且被聲明為public。程式被保存時,程式名必須命名為主類名,即程式名與主類名完全相同,尾碼為.java。主類中定義了init()、start()、stop()、destroy()和paint()方法,這些方法是從Applet中繼承的,有固定的含義,由流覽器在時機成熟時自動執行。4.4.3Applet的主要方法 在流覽器中運行Applet程式,從運行開始到運行結束,Applet程式需經歷4個狀態,分別是初始狀態、運行狀態、停止態和消亡狀態。這4種狀態分別對應Applet的4個主要方法:init()、start()、stop()和destroy()。 對於支持Java的流覽器,如果在運行一個HTML檔時發現該檔包含Applet程式,流覽器就會生成該Applet的一個實例,並調用init()方法,進入初始化狀態,在該狀態下完成Applet的一些初始化操作。初始化完成後,流覽器接著調用start()方法,進入運行狀態,真正開始執行Applet,在該狀態下Applet通常會啟動一些線程執行各種任務。 當退出當前主頁時,流覽器調用stop()方法終止在運行狀態下啟動的線程,進入停止狀態。當用戶退出流覽器時,流覽器首先調用Applet的stop()方法,停止Applet的執行,然後調用destroy()方法釋放Applet佔用的系統資源,進入消亡狀態。下麵具體介紹init()、start()、stop()和destroy()4種方法。1.Init()方法在Applet執行過程中,init()方法只執行一次。當流覽器第一次流覽含有Applet的Web頁載入Applet時,就會執行init()方法。由於在Applet執行過程中,該方法只被執行一次,所以可以在init()方法中進行一些只需執行一次的初始化操作,如變數的初始化、設置Applet初始狀態、載入圖形或字體、獲取HTML中Applet標記單元中<PARAM>設定的參數等。2.start()方法調用完init()方法,流覽器將調用start()方法啟動Applet。和init()方法不同,在Applet的執行過程中,start()方法可被流覽器調用多次。在下列情況下,流覽器會調用start()方法。(1)流覽器從圖示狀態恢復為窗口狀態或縮放流覽器窗口時。(2)Applet第一次載入時。(3)離開該Web頁後又再返回時。(4)reload該頁面時。在start()方法中可啟動相關線程來控制Applet,給引入類對象發送消息,或以某種方式通知Applet開始運行。該方法是Applet的主體。3.stop()方法該方法與start()方法是相對應的,在Applet執行過程中,也會被流覽器調用多次。在下列情況下,流覽器會調用stop()方法。(1)流覽器從圖示狀態恢復為窗口狀態或縮放流覽器窗口時。(2)離開Applet所在Web頁時。(3)reload該頁面時。(4)關閉該Web頁時。(5)從該Web頁退出流覽器運行時。stop()方法可在適當時機掛起Applet,停止一些佔用系統資源的工作,釋放系統處理資源,以提高系統的運行速度。4.destroy()方法在徹底結束對該Web頁的訪問或退出流覽器時調用destroy()方法,卸載Applet,釋放載入Applet時分配的系統資源。在Applet的執行過程中,destroy()方法只執行一次。destroy()方法是Applet類的類方法,只能用於Applet。可在該方法中執行釋放系統資源的代碼。但一般不需重寫destroy()方法,因為Java運行系統本身會自動進行“垃圾”處理和記憶體管理,除非用了特殊的資源如創建的線程。注意:destroy()方法與stop()方法不同。除了上述4個方法外,Applet還提供一個非常重要的方法:paint(Graphicsg)方法。該方法用於進行繪圖的具體操作,但沒有實現任何操作,用戶可重寫該方法,實現個性化的繪圖操作。在Applet執行過程中,paint()方法可以被流覽器自動調用執行繪圖操作,可調用多次。當調整流覽窗口大小、縮放流覽窗口、移動窗口或reload等需要重繪窗口時都會調用paint()方法。與其他4個方法不同的是,paint()中需傳遞一個參數,該參數是Graphics類的對象,由這個對象來完成具體的繪圖操作。Graphics對象由流覽器自動創建並將其傳送給paint()方法。注意:應在Applet中引入Graphics類的包或該類:importjava.awt.Graphics;例4-16:importjava.applet.*;importjava.awt.*;publicclassexample4_16extendsApplet{privateintInitCount;privateintStartCount;privateintStopCount;privateintDestroyCount;privateintPaintCount;publicexample4_16(){InitCount=0;StartCount=0;StopCount=0;DestroyCount=0;PaintCount=0;}publicvoidinit(){InitCount++;}publicvoiddestroy(){DestroyCount++;}publicvoidstart(){StartCount++;}publicvoidstop(){StopCount++;}publicvoidpaint(Graphicsg){PaintCount++;g.drawString("Paint()方法執行了:"+PaintCount+"次。",20,20);
g.drawString("Init()方法執行了:"+InitCount+"次。",20,70);
g.drawString("Start()方法執行了:"+StartCount+"次。",20,120);
g.drawString("Stop()方法執行了:"+StopCount+"次。",20,170);
g.drawString("Destroy()方法執行了:"+DestroyCount+"次。",20,220);}}4.4.4Javaapplet的運行 Javaapplet程式不能獨立運行,必須由流覽器來運行,因此我們需編寫一個HTML檔,通過<applet>標記將applet程式編譯生成的位元組碼檔嵌入HTML檔,通知流覽器來運行Javaapplet。 如要運行例4-16,可編寫如下的HTML檔:<html><head><title>example4_16</title></head><body><appletcode=example4_16.classwidth=300height=250></applet></body></html>第5章圖形用戶介面5.1文本框和文本區5.2標簽5.3按鈕5.4選擇框5.5畫布5.6面板與佈局設計5.7窗口5.8菜單5.9對話框5.1文本框和文本區5.1.1文本框及處理事件1.文本框的創建2.文本框處理事件 例5-2:兩個空白文本框,當在第一個文本框內輸入字元時,在文本框內顯示“*”號,輸入完畢按回車鍵後,在第二個文本框內顯示:Theend。importjava.awt.*;importjava.applet.Applet;importjava.awt.event.*;publicclassEx6_2extendsApplet{TextFieldtf1=newTextField(20);TextFieldtf2=newTextField(20);
publicvoidinit(){add(tf1);tf1.setEchoChar('*');add(tf2);tf1Listeneral=newtf1Listener();tf1.addActionListener(a1);}classtf1ListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){tf2.setText("Theend");}}}運行結果見圖5-2。圖5-15.1.2文本區及處理事件 例5-4:在Applet中添加一個文本框和一個文本區,每當在文本框中輸入一個字元時,在文本區內就附加一行文本:Thetextischanged。 importjava.awt.*; importjava.applet.Applet; importjava.awt.event.*;publicclassEx6_4extendsApplet{TextFieldtf1=newTextField(20);TextAreata1=newTextArea(null,6,40);publicvoidinit(){add(tf1);add(ta1);tf1.addTextListener(newTextL());}classTextLimplementsTextListener{
publicvoidtextValueChanged(TextEvente){ta1.append("\nThetextischanged");}}}運行結果見圖5-4。圖5-45.2標簽 標籤(Label)是AWT構件中最簡單的一種構件,所謂標籤實質上就是一段文字,但它與文字不同的是它是一個對象,所以在每次repaint時,不用重新添加。標籤在GUI介面中通常作為提示資訊使用。標籤構件的構造方法如下。(1)Label()構造一個空的標籤。(2)Label(Stringstr)構造一個以Stringstr為內容的標籤。(3)Label(Stringstr,intalign)定義一個以Stringstr為內容的標籤。5.3按鈕5.3.1按鈕 按鈕(Button)是GUI用戶介面中常用的元素,它是用戶輸入命令的一個重要工具。當用滑鼠單擊某個按鈕該按鈕獲得焦點時,在鍵盤上按回車鍵都會導致一個命令的執行。Button類有兩種構造方法。 (1)Button()構造一個沒有標籤的按鈕。 (2)Button(Stringstr)構造一個以Stringstr為標籤的按鈕。5.3.2按鈕處理事件 與按鈕有關的事件有兩類。1.ActionEvent 當用滑鼠單擊按鈕,或當按鈕獲得焦點時在鍵盤上按回車鍵都導致該事件的發生,此時任何實現了被註冊為監聽者的ActionListener介面的類,它的actionPerformed()方法將被調用。下麵的程式範例在Applet上添加兩個命令按鈕,其標籤分別為“顯示”和“清除”,當單擊“顯示”按鈕時,在文本區中顯示:“你按下了顯示按鈕”,當按“清除”按鈕時則清除文本區中顯示的字元。例5-6:文本區事件處理。importjava.awt.*;importjava.applet.Applet;importjava.awt.event.*;publicclassEx6_6extendsApplet{Buttonb1=newButton("顯示");
Buttonb2=newButton("清除");
TextAreata1=newTextArea(null,6,40);publicvoidinit(){add(b1);add(b2);add(ta1);b1.addActionListener(newButtenL());b2.addActionListener(newButtenL());}
classButtenLimplementsActionListener{publicvoidactionPerformed(ActionEvente){if(e.getSource()==b1)ta1.append("\n你按下了"顯示"按鈕");
elseta1.append("\n你按下了"清除"按鈕");}}}運行結果見圖5-6。圖5-62.FocusEvent FocusEvent稱作焦點事件,它的發生是指鍵盤游標移動到構件上並且可以接受鍵盤的輸入。如果游標移動到一個按鈕上,稱作該按鈕獲得焦點,反之稱作失去焦點。當一個按鈕獲得焦點時單擊回車鍵即相當於用滑鼠單擊該按鈕。如果一個文本框獲得焦點就可以在該文本框中輸入字元。例5-7:按鈕和文本框檢測焦點事件的例子。程式如下:importjava.awt.*;importjava.applet.Applet;importjava.awt.event.*;publicclassEx6_7extendsApplet{TextFieldtxt1=newTextField("txt1",50);TextFieldtxt2=newTextField("txt2",50);Buttonbutton1=newButton("button1");Buttonbutton2=newButton("button2");classKeytryimplementsFocusListener{
publicvoidfocusGained(FocusEvente){txt1.setText("txt1:paramString()="+e.paramString());if(e.getSource()==txt1)txt2.setText("txt2:focusisontxt1");elsetxt2.setText("txt2:focusisonbutton1");}
publicvoidfocusLost(FocusEvente){txt1.setText("txt1:paramString()="+e.paramString());txt2.setText("txt2:focuslostoutsidebutton1ortxt1");}}Keytryal=newKeytry();
publicvoidinit(){setLayout(newFlowLayout());txt1.addFocusListener(al);button1.addFocusListener(al);add(button1);add(button2);add(txt1);add(txt2);}}運行結果見圖5-7。圖5-7在上面的例子中,只有button1和txt1註冊了焦點事件的事件監聽者,它們共用同一個事件處理程式。如果焦點在button1或txt1上面,文本框txt2顯示焦點在哪個構件上(focusGaned),反之則指出無焦點(focusLost)。文本框txt1內顯示事件的參數字串,它也能指出是否有焦點。另外,程式中的setLayout(newFlowLayout())語句是控制構件的佈局用的,關於這個問題將在後面的章節中進行討論。5.4選擇框5.4.1選擇框1.下拉列表框(Choice)2.列表框(List)3.複選框(Checkbox)4.單選框(Checkboxgroup-RadioButton)5.4.2選擇框處理事件 例5-12:選擇框檢測ItemEvent事件的例子。
importjava.awt.*; importjava.applet.Applet; importjava.awt.event.*;publicclassEx6_12extendsAppletimplementsItemListener{TextAreata1=newTextArea(null,6,40);Stringsubject[]={"語文","數學","政治","外語","物理","化學"};
Checkboxcb[]=newCheckbox[6];publicvoidinit(){add(newLabel("請選擇:"));
for(intI=0;I<6;I++){cb[I]=newCheckbox(subject[I]);add(cb[I]);cb[I].addItemListener(this);}add(ta1);}
publicvoiditemStateChanged(ItemEvente){ta1.append("\n你在複選框中的選擇是:"+e.getItem());}}運行結果見圖5-12。圖5-125.5畫布例5-13:創建一個畫布。importjava.awt.*;importjava.applet.Applet;importjava.util.*;publicclassmycanvasextendsApplet{
publicvoidinit(){MyCanvas1mc=newMyCanvas1();mc.setBackground(Color.green);mc.setSize(150,150);add(mc);}}classMyCanvas1extendsCanvas{publicvoidpaint(Graphicsg){g.fillOval(40,20,80,80);}}運行結果見圖5-13。圖5-135.6面板與佈局
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 办学担保合同范本
- 农村房屋购销合同范本
- 人工测试合同范例
- 保温涂料施工合同范本
- 出租空地合租大棚合同范本
- 兵役登记合同范例
- 产品摄影合同范例
- pc总包合同范本
- 2025年工业厂房合同转让与土地储备及开发协议
- 临夏求购路灯合同范本
- 新能源整车装配工艺培训的资料课件
- 房车露营地的研究课件
- 园艺疗法共课件
- DB33T 628.1-2021 交通建设工程工程量清单计价规范 第1部分:公路工程
- 医院-9S管理共88张课件
- 设立登记通知书
- 2022医学课件前列腺炎指南模板
- MySQL数据库项目式教程完整版课件全书电子教案教材课件(完整)
- 药品生产质量管理工程完整版课件
- 《网络服务器搭建、配置与管理-Linux(RHEL8、CentOS8)(微课版)(第4版)》全册电子教案
- 职业卫生教学课件生物性有害因素所致职业性损害
评论
0/150
提交评论