Java高级程序设计课件_第1页
Java高级程序设计课件_第2页
Java高级程序设计课件_第3页
Java高级程序设计课件_第4页
Java高级程序设计课件_第5页
已阅读5页,还剩397页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java高級程式設計第一部分第一章 Java入門基礎第二章 異常第三章 JavaApplet類型第四章 圖形用戶介面GUI(一)——AWT第五章 Java中的事件處理機制第六章 圖形用戶介面GUI(二)——Swing第七章 多線程第八章I/O輸入輸出流第九章 Java資料庫連接(JDBC)第十章 Java網路編程第二部分第一章JavaAPI第二章Java與多媒體第三章JavaBean基礎第一章Java入門基礎1.1Java語言入門1.1.1Java語言特點1.1.2Java語言的運行環境1.1.2

JavaApplication程式與JavaApplet程式2.2識別字、關鍵字和數據類型1.2.1識別字

1.2.2關鍵字1.2.3分隔符號1.2.4數據類型

1.2.5常量與變數第一章Java入門基礎1.3運算符、運算式和語句1.3.1運算符

1.3.2運算式1.3.3流程控制語句1.4類、對象和介面1.4.1類與對象1.4.2繼承

1.4.3包

1.4.4介面1.1Java語言入門

Java語言的特點:簡單面向對象分佈性安全性體系結構中立可移植性解釋執行多線程動態性1.1Java語言入門Java語言的應用前景:所有面向對象的應用開發。計算過程的可視化、可操作化的軟體的開發。動態畫面的設計,包括圖形圖像的調用。交互操作的設計。英特網的系統管理功能模組的設計,包括Web頁面的動態設計、管理和交互操作設計等。企業內部網上的軟體開發。與各類資料庫連接查詢的SQL語句實現。其他應用類型的程式。1.1Java語言入門

Java語言的運行環境:初學Java語言最好選用Sun公司推出的軟體開發工具箱JDKJDK的下載:登陸Java的官方網站()直接雙擊,程式即可自動解壓縮並進行安裝,一路都有畫面指示,只需要遵循即可。可自行選擇安裝路徑。安裝完成後,在安裝路徑下的bin檔夾內,有我們所需的各種開發工具。設置Java運行環境:進入“控制面板”,雙擊“系統”,彈出“系統屬性”對話框,選擇“高級”

單擊“環境變數”按鈕。1.1Java語言入門

JDK實用命令程式:JavacJava編譯器,將Java根源程式編譯成位元組碼JavaJava解釋器,直接從類檔執行Java應用程式,即applicationAppletviewer小程式流覽器,執行html檔上的Java小程式,即Applet1.1Java語言入門JavaApplication程式與JavaApplet程式:根據結構組成和運行環境的不同,Java程式可以分為兩類:JavaApplication和JavaApplet。JavaApplication是完整的程式,需要獨立的解釋器來解釋運行。而JavaApplet則是嵌在HTML編寫的Web頁面中的非獨立程式,由Web流覽器內部包含的Java解釋器來解釋運行。1.1Java語言入門JavaApplication程式:例:HelloWorld.javapublicclassHelloWorld

{

publicstaticvoidmain

(

Stringargs[]

)

{

System.out.println(“Hello!World!”);

}

}開始使用JDK:javacHelloWorld.java

編譯器編譯出HelloWorld.classjavaHelloWorld

解釋器

運行主類1.1Java語言入門

位元組碼的解釋與運行:源代碼目標碼可執行代碼源代碼位元組碼編譯連接運行操作系統編譯解釋執行Java解釋器1.1Java語言入門JavaApplet程式:例:My.javaimportjava.awt.Graphics;importjava.applet.Applet;publicclassMyextendsApplet{ publicvoidpaint(Graphicsg){g.drawString("Hello,javaappletworld",10,20);}}1.1Java語言入門JavaApplet程式:JavaApplet中不需要有main方法,它的要求是程式中有且必須有一個類是系統類Applet的子類,也就是必須有一個類的類頭部分以extendsApplet結尾。所有的JavaApplet程式中都必須有一個系統類Applet的子類,因為系統類Applet中已經定義了很多的成員域和成員方法,它們規定了Applet如何與執行它的解釋器—www流覽器配合工作。1.1Java語言入門

Java程式的分類:JavaApplication由JAVA解釋器獨立運行位元組碼由專門的命令行啟動程式執行程式中有定義了main()方法的主類JavaApplet不能獨立運行,位元組碼必須嵌入HTML文檔當流覽器調用含APPLET的Web頁面時執行程式中含有java.applet.Applet類的子類1.1Java語言入門編寫Java程式需要注意的幾點:Java區分大小寫一個程式中可以有一個或多個類,但其中只能有一個主類(publicclass修飾)根源程式編寫完畢,應該用主類名作為檔案名,再加尾碼.java存儲成磁片檔1.2識別字、關鍵字

和數據類型

識別字:識別字是用來標識類名、變數名、方法名、類型名、數組名、檔案名的有效字元序列。Java語言規定識別字由字母、下劃線、美元符號和數字組成,並且需遵循以下規則:(1)區分大小寫。(2)不能以數字開頭。(3)以字母或下劃線_或$符號開頭。(4)不能使用Java的關鍵字。1.2識別字、關鍵字

和數據類型

關鍵字:關鍵字是Java語言中已經被賦予特定意義的單詞,一般用來表示一種數據類型,或者程式的結構等。保留字是為Java預留的關鍵字。目前Java語言定義的關鍵字如下:const(保留字)goto(保留字)abstractfinally

intpublicthisbooleancontinuefloatinterfacereturnthrowbreakdefaultforlongshortthrowsbytedo

nativestatictransientcasedoubleifnewstrictfptrycatchelseimplementspackagesupervoidcharextendsimportprivateswitchvolatileclassfinalinstanceofprotectedsynchronizewhile1.2識別字、關鍵字

和數據類型

分隔符號:圓括號()在定義和調用方法時用來容納參數表,在控制語句或強制類型轉換組成的運算式中用來表示執行或計算的優先權。花括弧{}用來包括自動初始化的數組的值,也用來定義程式塊、類、方法以及局部範圍。方括號[]用來聲明數組的類型,也用來表示撤銷對數組的引用。分號;用來終止一個語句。逗號,在變數聲明中,用於分隔變數表中的各個變數。在for控制語句中,用來將圓括號內的語句連接起來。句號.用來將軟體包中的名字與它的子包或類分隔,也用來將引用變數與變數或方法分隔。另外,還有一種較為特殊的空白分隔符號,空格、Tab跳格鍵及換行符均屬於這種分隔符號。1.2識別字、關鍵字

和數據類型

數據類型:Java共有八種基本類型:四種是整型,兩種浮點數字型,一種字元型char,以及用於表示真假的布爾變數。Java定義了4種整數類型:位元組型(byte),短整型(short),整型(int),長整型(long)。這些都是有符號的值,無小數部分的數字,正數或是負數。1.2識別字、關鍵字

和數據類型

浮點類型:Java中定義了兩種浮點類型:單精確度(float)浮點型及雙精度(double)浮點型。1.2識別字、關鍵字

和數據類型

字元類型:char類型用來表示Unicode編碼表中的字元。Unicode定義的國際化的字元集能表示迄今為止人類語言的所有字元集。它是幾十個字元集的統一,例如拉丁文,希臘語,阿拉伯語等等,因此它要求16位。Java中的char類型是16位,其範圍是0~65,536,沒有負數的char。標準字元集ASCII碼的範圍仍然是0~127。Unicode的使用對於英語、德語、西班牙語或法語的語言是有點低效,因為它們的字元能容易地被包含在8位以內。1.2識別字、關鍵字

和數據類型

布爾類型:只有兩個值,真(true)和假(false)。Java中,布爾值和整數0、1不能相互轉換。強制類型轉換:在使用賦值運算時,可能會遇到等號左邊的數據類型和等號右邊的數據類型不一致的情況,這時需要把等號右邊的數據類型轉化成等號左邊的數據類型。如果這2種類型是相容的,那麼Java將自動地進行轉換。例如,把int類型的值賦給long類型的變數。而將變數從較長的數據類型轉換成較短的數據類型時,則必須用到強制類型轉換。1.2識別字、關鍵字

和數據類型

常量與變數:1、整型常量2、浮點型常量3、布爾常量4、字元常量1.2識別字、關鍵字

和數據類型

字元轉義序列:1.2識別字、關鍵字

和數據類型

常量與變數:在Java程式中,我們採用如下的表示方法來定義常量:

final常量類型常量名=常量值;(注意:常量名一般大寫)例如:finalbyteBMAX=3;變數是Java程式的一個基本存儲單元。變數由一個識別字,類型及一個可選初始值的組合定義。所有的變數都有一個作用域,定義變數的可見性,生存期。在Java中,所有的變數必須先聲明再使用。聲明方法如下:訪問控制符變數類型變數名稱[=變數初值](可選)1.3運算符、運算式和語句

Java有4大類運算符:算術運算、位運算、關係運算和邏輯運算。Java還定義了一些附加的運算符用於處理特殊情況。

1.3運算符、運算式和語句

關係運算符:1.3運算符、運算式和語句

邏輯運算符:1.3運算符、運算式和語句

位運算符:1.3運算符、運算式和語句

運算式:運算式是由變數、常量、對象、方法調用和操作符組成的公式。符合語法規則的運算式可以被編譯系統理解、執行或計算,運算式的值就是對它運算後所得的結果。1.3運算符、運算式和語句

流程控制語句:Java語言中有三種基本的流程控制語句,即順序結構、分支結構和迴圈結構。1.3運算符、運算式和語句

流程控制語句:順序結構是三種結構中最簡單的一種,即語句按照書寫的順序依次執行。分支結構又稱為選擇結構,它將根據計算所得的運算式的值來判斷應選擇執行哪一個流程的分支。迴圈結構則是在一定條件下反復執行一段語句的流程結構。這三種結構構成了程式局部模組的基本框架。1.3運算符、運算式和語句

分支語句:Java中的分支語句有兩個,一個是負責實現雙分支的if語句,另一個是負責實現多分支的開關語句switch語句。if語句是Java中的條件分支語句,它能將程式的執行路徑分為兩條。if語句的完整格式如下:if(條件運算式)語句塊;//if分支

else

語句塊;//else分支1.3運算符、運算式和語句

分支語句:基於嵌套if語句的通用編程結構稱為if--else--if階梯。如下:

if(條件運算式)語句塊;//if分支

elseif(條件運算式)語句塊;//elseif分支

elseif(條件運算式)語句塊;//elseif分支

………………else

語句塊;1.3運算符、運算式和語句

分支語句:switch語句是Java的多路分支語句。它的一般格式如下:

switch(運算式)

{case判斷值1:語句塊1//分支1case判斷值2:語句塊2//分支2………………case判斷值n:語句塊n//分支ndefault:語句塊n+1//分支n+1}1.3運算符、運算式和語句

switch語句:運算式必須為byte,short,int或char類型,每個case語句後的判斷值必須是與運算式類型相容的特定的一個常量,重複的case值是不允許的。switch語句的執行過程如下:運算式的值與每個case語句中的常量作比較,如果發現了一個與之相匹配的,則執行該case語句後的代碼;如果沒有一個case常量與運算式的值相匹配,則執行default語句。在case語句序列中的break語句將引起程式流從整個switch語句退出。當遇到一個break語句時,程式將從整個switch語句後的第一行代碼開始繼續執行。1.3運算符、運算式和語句

迴圈語句:Java的迴圈語句有for,while和do-while,這些語句創造了我們通常所稱的迴圈。while語句是Java最基本的迴圈語句,當它的控制運算式是真時,while語句重複執行一個語句或語句塊。通用格式如下:while(條件運算式)循環體條件運算式可以是任何布爾運算式。只要條件運算式為真,循環體就被執行;當條件為假時,程式控制就傳遞到迴圈後面緊跟的語句行。1.3運算符、運算式和語句

迴圈語句:do-while迴圈的一般語法結構如下:

do

循環體

while(條件運算式);do-while迴圈總是先執行循環體,然後再計算條件運算式,如果運算式為真,則迴圈繼續,否則,迴圈結束。對所有的Java迴圈都一樣,條件運算式必須是一個布爾運算式。1.3運算符、運算式和語句

迴圈語句:for迴圈的一般語法結構如下:

for(運算式1;運算式2;運算式3)循環體for迴圈的執行過程如下:第一步,當迴圈啟動時,先執行其初始化部分。通常,這是設置迴圈控制變數值的一個運算式,作為控制迴圈的計數器,並且初始化運算式僅被執行一次。下一步,計算運算式2的值,它必須是布爾運算式,它通常將迴圈控制變數與目標值相比較。如果這個運算式為真,則執行循環體;如果為假,則迴圈終止。再下一步執行循環體的反復部分,這部分通常是增加或減少迴圈控制變數的一個運算式。接下來重複迴圈。1.3運算符、運算式和語句

跳轉語句:Java支持3種跳轉語句:break,continue和return。這些語句把控制轉移到程式的其他部分。在Java中,break語句有3種作用。第一,在switch語句中,它被用來終止一個語句序列。第二,它能被用來退出一個迴圈。第三,它能作為一種“先進”的goto語句來使用。在迴圈中遇到break語句時,迴圈被終止,程式控制在迴圈後面的語句重新開始。對象類實體抽象數據類電腦世界現實世界實例化抽象映射電腦邏輯的實現概念世界面向對象技術:電腦世界向現實世界靠近面向過程技術:現實世界向電腦世界靠近對象的狀態在電腦內部是用變數來表示,而對象的行為在電腦內部是用方法來表示的1.4類、對象和介面下圖展現了類與對象的基本關係:

1.4類、對象和介面1.4類、對象和介面

類的含義:在類中,數據或變數被稱為實例變數,代碼包含在方法內。定義在類中的方法和實例變數被稱為類的成員。在大多數類中,實例變數被定義在該類中的方法操作和存取。方法決定該類中的數據如何使用。每個對象都包含它自己對類中實例變數的拷貝。一個對象的數據是獨立的且是惟一的。1.4類、對象和介面

類定義的通用格式如下:

class類名{

typeinstance-variable1;

//...

typeinstance-variableN;

typemethodname1(parameter-list){

//方法體

}

//...

typemethodnamen(parameter-list){

//方法體

}

}1.4類、對象和介面

類的含義:要獲得一個類的對象需要兩步。第一步,你必須聲明該類類型的一個變數,這個變數沒有定義一個對象。第二步,該聲明要創建一個對象的實際的物理拷貝,並把對於該對象的引用(即記憶體地址)賦給該變數。這是通過使用new運算符實現的。在Java中,所有的類的對象都必須動態分配。1.4類、對象和介面

變數的定義和方法的定義:方法定義包括兩部分:方法的聲明和方法體。一般格式為:返回值方法名(參數列表)

{

//方法體

}使用方法時,需注意兩件事情:第一,方法返回的數據類型必須與該方法指定的返回類型相相容;第二,接收方法返回值的變數也必須與指定方法返回值的類型相相容。1.4類、對象和介面

成員變數:類的成員變數又分為實例成員變數和類成員變數。例如:

className{

staticStringfirstname;

Stringsecondname;

}其中secondname是實例變數,firstname是類變數。如果成員變數的類型前面加上關鍵字static,這樣的成員變數稱做是類變數或靜態成員變數。它們是類的域,不屬於任何一個類的具體對象。保存在類的記憶體區域的公共存儲單元。1.4類、對象和介面

構造方法:構造方法是一種特殊的方法,它的名字必須與它所在的類的名字完全相同,並且不返回任何數據類型。用於在new運算符開闢了新建對象的記憶體空間之後,調用它初始化這個新建對象。1.4類、對象和介面

多態性:多態性是允許一個介面被多個同類動作使用的特性。在Java中,同一個類中的2個或2個以上的方法可以有同一個名字,只要它們的參數聲明不同即可。在這種情況下,該方法就被稱為重載,這個過程稱為方法重載。方法重載是Java實現多態性的一種方式。1.4類、對象和介面

繼承:繼承是面向對象編程技術的一塊基石,因為它允許建立分等級層次的類,使得程式結構清晰,降低編碼和維護的工作量。在Java術語學中,被繼承的類叫超類,繼承超類的類叫子類,它是超類的一個專門用途的版本,它繼承了超類定義的所有實例變數和方法,並且為它自己增添了獨特的元素。Java中的繼承是通過extends關鍵字來實現的。1.4類、對象和介面

隱藏:當我們在子類中定義的成員變數和父類中的成員變數同名時,則子類的成員變數隱藏了父類的成員變數。當子類中定義了一個方法,並且這個方法的名字、返回類型、及參數個數和類型同父類的某個方法完全相同時,父類的這個方法將被隱藏。子類通過成員變數的隱藏和方法的重寫可以把父類的狀態和行為改變為自身的狀態和行為。1.4類、對象和介面

final:不接受方法被重載,可以在方法前定義final修飾符。希望防止一個類被繼承,做到這點也只需在類聲明前加final,聲明一個final類含蓄的宣告了它的所有方法也都是final。1.4類、對象和介面

super:有時我們創建一個超類,該超類隱藏它自己實現的細節,這種情況下,子類沒有辦法直接訪問或初始化它自己的這些變數,它可以用關鍵字super來實現引用它直接的超類。super有兩種通用形式:第一種調用超類的構造方法,第二種用來訪問被子類的成員隱藏的超類成員。1.4類、對象和介面

abstract:定義一個超類,該超類定義了一種給定結構的抽象,不提供任何完整的方法實現,用於決定子類所必須實現的方法的本性,其他由每個子類自己去填寫細節。聲明一個抽象類,在關鍵字class前使用關鍵字abstract。抽象類不能通過new操作符直接實例化。所有抽象類的子類都必須執行超類中的所有抽象方法或者是它自己也聲明成abstract。任何含有一個或多個抽象方法的類都必須聲明成抽象類。聲明一個抽象方法,用下麵的通用形式:abstracttypename(parameter-list);1.4類、對象和介面

包:包是Java語言中有效管理類的一個機制。package語句定義一個存儲類的名字空間。下麵是package聲明的通用形式:

packagepkg;Java用檔系統目錄來存儲包。任何你聲明的myPackage中的一部分的類的.class檔被存儲在一個myPackage目錄中,目錄名必須和包名嚴格匹配。1.4類、對象和介面

包:在編寫原始檔案時,除了自己編寫類外,還經常需要使用Java提供的許多類,這些類可能在不同的包中,我們可以使用import語句引入系統包中的類。如:

importjava.awt.*;包不僅是命名機制也是可見度控制機制。類和包都是封裝和容納名稱空間和變數及方法範圍的方法。包就像盛裝類和下級包的容器,類就像是數據和代碼的容器。1.4類、對象和介面

三個訪問控制符,private、public和protected:1.4類、對象和介面

介面:Java中的介面在語法上有些類似於類,它定義了若干個抽象方法和常量,形成一個屬性集合,該屬性集合通常對應了某一組功能,其主要作用是可以幫助實現類似於類的多重繼承的功能。1.4類、對象和介面

介面的通用形式:accessinterfacename{

return-typemethod-name1(parameter-list);

return-typemethod-nameN(parameter-list);

typefinal-varname1=value;

typefinal-varnameN=value;

//...

}access要麼是public,要麼就沒有用修飾符。後者是默認訪問範圍。當它聲明為public時,則介面可以被任何代碼使用。

小結掌握:典型的Java程式開發環境Java基本數據類型、使用輸入輸出語句及算術運算符編寫判定語句、面向對象的開發方法及句法結構理解:Java語言的語言特性面向對象的編程思想瞭解:applet與application的區別Java在開發Internet和Web的分佈式客戶/伺服器應用中的作用Java高級程式設計第一部分第一章 Java入門基礎第二章 異常第三章 JavaApplet類型第四章 圖形用戶介面GUI(一)——AWT第五章 Java中的事件處理機制第六章 圖形用戶介面GUI(二)——Swing第七章 多線程第八章I/O輸入輸出流第九章 Java資料庫連接(JDBC)第十章 Java網路編程第二部分第一章JavaAPI第二章Java與多媒體第三章JavaBean基礎第二章異常2.1什麼是異常2.1.1異常處理基礎2.1.2Java異常處理機制2.2異常的類型2.2.1Java異常類類型2.2.2Java異常類組成2.3未被捕獲的異常2.3.1未被捕獲的異常2.4try…catch語句2.4.1系統自定義異常的處理2.4.2使用多重catch語句、嵌套try語句第二章異常2.5自定義異常與throw關鍵字2.5.1創建自己的異常2.5.2使用throw拋出異常2.6throws與finally關鍵字2.6.1使用throws聲明異常2.6.2使用finally關鍵字2.7Java的內置異常2.7.1Java的內置異常2.1什麼是異常語法錯誤和運行錯誤:對類似於C++這樣的高級編程語言來說,捕獲程式出錯資訊最理想的階段是在編譯期間,即試圖運行程式以前。然而,並非所有錯誤都能在編譯期間檢測到。有些問題可能會在程式運行時才暴露出來。例如,想打開的檔不存在、網路連接中斷、受控運算元超出預定範圍、除數為0等等。我們一般稱編譯時被檢測出來的錯誤為語法錯誤,這種錯誤一旦產生並不會生成運行代碼。而另一種是運行錯誤,它是在程式運行時代碼序列中產生的一種出錯情況。這種運行錯誤倘若沒有及時進行處理,可能會造成程式中斷、數據遺失乃至系統崩潰等問題。這種運行錯誤也就是我們常說的“異常”。2.1什麼是異常早期語言打開檔的程式段

readFile{openthefile;//打開檔readthefileintomemory;//將檔讀入記憶體;closethefile;//關閉該檔;}處理異常後的程式段readFile{ interrorCode=0; openthefile; if(theFileOpen){determineitssize;//測定檔長度

if(gotEnoughMemory){

readthefileintomemory;

if(readFailed)

{errorCode=-1;}

}else{

errorCode=-2;}

}else{

errorCode=-3;}

closethefile;

returnerrorCode;

}2.1什麼是異常

Java異常處理機制:為了能夠及時有效地處理程式中的運行錯誤,Java中引入了異常和異常類的概念。在Java中定義了很多異常類,每個異常類都代表了一種常見的運行錯誤,類中包含了該運行錯誤的資訊和處理錯誤的方法等內容。每當Java程式運行過程中發生一個可識別的運行錯誤時,即該錯誤有一個異常類與之相對應時,系統都會產生一個相應的該異常類的對象。一旦一個異常對象產生了,就將其拋出到其調用程式中,發出已經發生問題的信號。然後,調用方法捕獲拋出的異常,在可能時,再恢復回來。2.2異常的類型

Java異常體系圖:2.2異常的類型

Java異常類類型描述:Throwable類是類庫java.lang包中的一個類,它派生了兩個子類:Exception和Error。其中Error類由系統保留,而Exception類則供應用程式使用。Error類描述了Java程式運行期間系統內部的錯誤以及資源耗盡的情況,如動態鏈接失敗、虛擬機錯誤等,通常在Java編程語言中,Error類定義被認為是不能恢復的嚴重錯誤條件。在大多數情況下,當遇到這樣的錯誤時,建議讓程式中斷。Exception類是Java程式中大量處理的異常,該類又可分為兩類:從RuntimeException衍生出來的異常和衍生於Exception的其他子類的異常。RuntimeException類一般是由編程錯誤產生的,出現這類異常時,程式員需調試程式避免這類異常的產生,該類異常一般包括錯誤的造型、數組越界存取、空指針訪問等。衍生於Exception的其他子類的異常一般是由於不可預測因素造成的,使得語法正確的程式出現了問題,該類異常一般包括試圖越過檔尾繼續存放、試圖打開一個錯誤的URL等。2.2異常的類型

Exception類的構造方法有四個:publicException()publicException(Stringmessage)publicException(Stringmessage,Throwablecause)publicException(Throwablecause)第二個構造方法可以接受字串參數傳入的資訊,該資訊通常是對該異常所對應的錯誤的描述。第三個構造方法中cause參數保存出錯原因,便於以後使用Throwable.getCause()方法重獲,該參數可為空。2.2異常的類型

Java異常類的常用方法:Exception類的常用方法:2.3未被捕獲的異常未被捕獲的異常:下麵的小程式包括一個故意導致被零除錯誤的運算式。

classExc0{

publicstaticvoidmain(Stringargs[]){

intd=0;

inta=42/d;

}

}下麵是由標準javaJDK運行解釋器執行該程式產生的輸出:

java.lang.ArithmeticException:/byzero

atExc0.main(Exc0.java:4)2.3未被捕獲的異常未被捕獲的異常:當Java運行時系統檢查到被零除的情況,它構造一個新的異常對象然後引發該異常。這導致Exc0的執行停止,因為一旦一個異常被引發,它必須被一個異常處理程式捕獲並且被立即處理。任何不是被你程式捕獲的異常最終都會被該默認處理程式處理。默認處理程式顯示一個描述異常的字串,列印異常發生處的堆疊軌跡並且終止程式。2.3未被捕獲的異常未被捕獲的異常:注意:類名Exc0,方法名main,檔案名Exc0.java和行數4是怎樣被包括在一個簡單的堆疊使用軌跡中的。注意:引發的異常類型是Exception的一個名字叫做ArithmeticException的子類,該子類更明確的描述了何種類型的錯誤方法。2.3未被捕獲的異常未被捕獲的異常:下麵是前面程式的另一個版本,它介紹了相同的錯誤,但是錯誤是在main(

)方法之外的另一個方法中產生的:

classExc1{

staticvoidsubroutine(){

intd=0;

inta=10/d;

}

publicstaticvoidmain(Stringargs[]){

Exc1.subroutine();

}

}2.3未被捕獲的異常未被捕獲的異常:下麵是由標準javaJDK運行解釋器執行該程式產生的輸出:

java.lang.ArithmeticException:/byzero

atExc1.subroutine(Exc1.java:4)

atExc1.main(Exc1.java:7)如你所見,棧底是main的第7行,該行調用了subroutine(

)方法。該方法在第4行導致了異常。調用堆疊對於調試來說是很重要的,因為它查明了導致錯誤的精確的步驟。2.4try…catch語句使用try和catch儘管由Java運行時系統提供的默認異常處理程式對於調試是很有用的,但通常你希望自己處理異常。這樣做有兩個好處。第一,它允許你修正錯誤。第二,它防止程式自動終止。為防止和處理一個運行時錯誤,需要把你所要監控的代碼放進一個try塊就可以了。緊跟著try塊的,包括一個說明你希望捕獲的錯誤類型的catch子句。2.4try…catch語句

下麵是一個異常處理塊的通常形式:

try{

//blockofcodetomonitorforerrors

}

catch(ExceptionType1exOb){

//exceptionhandlerforExceptionType1

}

catch(ExceptionType2exOb){

//exceptionhandlerforExceptionType2

}

//...

finally{

//blockofcodetobeexecutedbeforetryblockends

}

這裏,ExceptionType是發生異常的類型。2.4try…catch語句

舉例:

classExc2{

publicstaticvoidmain(Stringargs[]){

intd,a;

try{//monitorablockofcode.

d=0;

a=42/d;

System.out.println(“Thiswillnotbeprinted.”);

}catch(ArithmeticExceptione){

System.out.println(“Divisionbyzero.”);

}

System.out.println(“Aftercatchstatement.”);

}

}

該程式輸出如下:

Divisionbyzero.

Aftercatchstatement.2.4try…catch語句使用try和catch注意:一旦異常被引發,程式控制由try塊轉到catch塊。執行永遠不會從catch塊“返回”到try塊。一個try和它的catch語句形成了一個單元。catch子句的範圍限制於try語句前面所定義的語句。一個catch語句不能捕獲另一個try聲明所引發的異常(除非是嵌套的try語句情況)。被try保護的語句聲明必須在一個大括弧之內。不能單獨使用try。構造catch子句的目的是解決異常情況並且像錯誤沒有發生一樣繼續運行。2.4try…catch語句使用多重catch語句、嵌套try語句某些情況,由單個代碼段可能引起多個異常。處理這種情況,你可以定義兩個或更多的catch子句,每個子句捕獲一種類型的異常。當你用多catch語句時,異常子類必須在它們任何父類之前使用。這樣,如果子類在父類後面,子類將永遠不會到達,而且,Java中有不能到達的代碼是一種語法錯誤。各個異常都派生於同一超類。如果一個catch處理方法用於捕獲某個超類類型的異常對象,則它也可以捕獲該類的所有子類的對象。這使得用一條簡潔的catch子句運算式就能處理多個相關的錯誤,並且允許了多態性地處理這些相關的異常。2.5自定義異常

與throw關鍵字

創建自己的異常:系統定義的異常主要用來處理系統可以預見較為常見的運行錯誤,對於某個應用所特有的運行錯誤,則需要編程人員根據程式的特殊邏輯在用戶程式裏自己創建用戶自定義的異常類和異常對象。用戶定義異常可通過擴展Exception類來創建的。這種異常類可以包含一個“普通”類所擁有的構造函數、變數以及方法。2.5自定義異常

與throw關鍵字throw關鍵字的使用:用戶程式自定義的異常不可能依靠系統自動拋出,必須借助於throw語句來定義何種情況算是產生了此種異常對應的錯誤,並應該拋出這個異常類的新對象。程式執行在throw語句之後立即停止;後面的任何語句不被執行。最緊緊包圍的try塊用來檢查它是否含有一個與異常類型匹配的catch語句。如果發現了匹配的塊,控制轉向該語句;如果沒有發現,次包圍的try塊來檢查,以此類推。如果沒有發現匹配的catch塊,默認異常處理程式中斷程式的執行並且列印堆疊軌跡。2.5自定義異常

與throw關鍵字throw關鍵字的使用:Throw語句的通常形式如下:throwThrowableInstance;這裏,ThrowableInstance一定是Throwable類類型或Throwable子類類型的一個對象。注意:簡單類型,例如int或char,以及非Throwable類,例如String或Object,不能用作異常。有兩種可以獲得Throwable對象的方法:在catch子句中使用參數或者用new操作符創建。2.6throws與finally關鍵字throws關鍵字的使用:如果一個方法不能處理它自己所引發(throw)的代碼,我們必須用關鍵字throws聲明該方法可能引發的所有異常。主要是為了通知欲調用此方法的方法。由於該方法包含throw語句,所以要準備接受和處理它在運行過程中可能會拋出的異常。throws總是和方法說明出現在一起的。其形式如下:typemethod-name(parameter-list)throwsexception-list

{

//bodyofmethod

}exception-list是該方法可引發的的異常列表以逗號分割。2.6throws與finally關鍵字throws關鍵字的使用注意事項:如果一個方法可以導致一個異常但不處理它,它必須指定這種行為以使方法的調用者可以保護它們自己而不發生異常做到這點你可以在方法聲明中包含一個throws子句。一個throws子句列舉了一個方法可能引發的所有異常類型。這對於除Error或RuntimeException及它們子類以外類型的所有異常是必要的。一個方法可以引發的所有其他類型的異常必須在throws子句中聲明。如果不這樣做,將會導致編譯錯誤。2.6throws與finally關鍵字處理或聲明規則:為了寫出健壯的代碼,Java編程語言要求,當一個方法在棧上發生Exception(它與Error或RuntimeException不同)時,那麼,該方法必須決定如果出現問題該採取什麼措施。程式員可以做滿足該要求的兩件事:第一:通過將Try{}catch(){}塊納入其代碼中,在這裏捕獲給被命名為屬於某個超類的異常,並調用方法處理它。即使catch塊是空的,這也算是處理情況。第二:讓被調用的方法表示它將不處理異常,而且該異常將被拋回到它所遇到的調用方法中。它是按如下所示通過用throws子句標記的該調用方法的聲明來實現的:

publicvoidtroublesome()throwsIOException2.6throws與finally關鍵字finally關鍵字的使用:在Java語言中,當異常拋出時,程式將跳出try塊,執行try-catch語句塊後面的程式代碼,然而在某些情況下,我們希望無論異常發生還是被捕獲時,有些語句必須執行。例如無論出現任何異常情況,我們都需要進行保存數據、關閉檔等操作。finally語句解決了這一問題,我們只需在try-catch語句塊後接一個finally塊,不管是否發生異常,都將執行finally塊中的代碼。2.7Java的內置異常

Java的內置異常:在標準包java.lang中,Java定義了若干個異常類。其中多數從RuntimeException派生的異常都自動可用,而且它們不需要通知所有欲調用此方法的方法來檢查該異常,故不需要被包含在任何方法的throws列表中。這被叫做不受控的異常。因為編譯器不檢查它來看一個方法是否處理或引發了這些異常。java.lang定義的其他異常必須在方法的throws列表中包括,方法產生其中的某個異常但是不能自己處理它,這些叫做受控的異常。

2.7Java的內置異常不受控的異常:2.7Java的內置異常不受控的異常:不受控異常的出現表示一種設計或實現問題。也就是說,它表示如果程式運行正常,從不會發生的情況,比如,數組索引不超出數組界限則ArrayIndexOutOfBoundsException異常從不會拋出。通常對它不做處理,會導致一個運行時錯誤資訊。儘管編譯器對於不受控異常沒有捕獲或者聲明的強制要求,但知道可能發生這種異常時也應提供合適的異常處理代碼。2.7Java的內置異常受控的異常:小結使用異常:異常處理為控制具有很多動態運行時特性的複雜程式提供了一個強大的機制。把try,throw,和catch當成處理錯誤簡潔及程式邏輯上的反常邊界條件是很重要的。如果你像多數程式員一樣,那麼你可能習慣於在方法失敗時返回一個錯誤代碼。在你用Java編程時,你應該打破這個習慣。當方法可能失敗時,引發一個異常。這是處理失敗模式的一個更簡潔的方法。小結掌握:定義異常使用try、catch語句使用throw、throws和finally關鍵字理解:異常的分類瞭解:程式中引入異常機制的好處Java高級程式設計第一部分第一章 Java入門基礎第二章 異常第三章 JavaApplet類型第四章 圖形用戶介面GUI(一)——AWT第五章 Java中的事件處理機制第六章 圖形用戶介面GUI(二)——Swing第七章 多線程第八章I/O輸入輸出流第九章 Java資料庫連接(JDBC)第十章 Java網路編程第二部分第一章JavaAPI第二章Java與多媒體第三章JavaBean基礎第三章

JavaApplet類型3.1 HTML簡介3.2流覽器處理Applet3.3Applet類及其方法3.3.1 Applet類的層次3.3.2 Applet運行狀態控制基本方法3.3.3 Applet繪圖3.1HTML簡介HTML簡介HTML即超文本標記語言——HyperTextMarkupLanguage。它源於SGML(StandardGeneralizedMarkupLanguage)。目前HTML已經發展到HTML4.01。此外,近年來又出現了XML、XHTML這些新的標記語言。XML是“eXtensibleMarkupLanguage”的縮寫,即可擴展標記語言。3.1HTML簡介在結構上,HTML檔可分為檔頭和主體兩部分。檔頭為“head”包含的部分。格式為:<head>……</head>。主要用於描述檔的標題、語言字元集、內容分級、關鍵字等。主體為“body”包含的部分。格式為:<body>……</body>。網頁中可看到的內容就包含在這部分中。下麵是個簡單例子<html><head><title>歡迎光臨我的主頁</title></head><body><p>Hello!World!</p></body></html>3.2流覽器處理Applet流覽器處理AppletApplet是能夠嵌入到一個HTML頁面中,且可通過Web流覽器下載和執行的一種Java類。包含Applet的網頁被稱為Java--powered頁,可以稱其為Java支持的網頁。Applet是Java技術容器的一種特定類型,其執行方式不同於應用程式。一個應用程式Application是從它的main()方法被調用開始的,而一個Applet的生命週期在一定程度上則要複雜得多。3.2流覽器處理Applet由於Applet在Web流覽器環境中運行,所以它並不直接由鍵入的一個命令啟動。你必須要創建一個Java--powered頁來告訴流覽器需裝載什麼以及如何運行它。當用戶訪問這樣的網頁時,Applet被下載到用戶的電腦上執行,但前提是用戶使用的是支持Java的網路流覽器。由於Applet是在用戶的電腦上執行的,所以它的執行速度不受網路帶寬或者Modem存取速度的限制,用戶可以更好地欣賞網頁上Applet產生的多媒體效果。3.3Applet類及其方法Applet類的層次Java.applet.Applet類實際上是java.awt.Panel的子類。Applet和AWT類的層次如下:3.3Applet類及其方法Applet運行狀態控制基本方法Applet類中的四種基本方法用來控制其運行狀態:init()、start()、stop()、destroy()init()這個方法主要是為Applet的正常運行做一些初始化工作。當一個Applet被系統調用時,系統首先調用的就是該方法。start()系統在調用完init()方法之後,將自動調用start()方法。而且,每當用戶離開包含該Applet的主頁後又再返回時,系統又會再執行一遍start()方法。這就意味著start()方法可以被多次執行,而不像init()方法。3.3Applet類及其方法stop()這個方法在用戶離開Applet所在頁面時執行,因此,它也是可以被多次執行的。它使你可以在用戶並不注意Applet的時候,停止一些耗用系統資源的工作以免影響系統的運行速度,且並不需要人為地去調用該方法。如果Applet中不包含動畫、聲音等程式,通常也不必實現該方法。

destroy()與對象的finalize()方法不同,Java在流覽器關閉的時候才調用該方法。Applet是嵌在HTML檔中的,所以destroty()方法不關心何時Applet被關閉,它在流覽器關閉的時候自動執行。在destroy()方法中一般可以要求收回佔用的非記憶體獨立資源。(如果在Applet仍在運行時流覽器被關閉,系統將先執行stop()方法,再執行destroy()方法)。3.3Applet類及其方法Applet繪圖paint(Graphicsg)方法顯露處理自動地發生,且導致對paint()方法的一次調用。一種Graphics類的被稱為裁剪矩形的設備常用於對paint()方法進行優化。repaint()方法對repaint()的調用可通知系統:你想改變顯示。repaint()實際上產生了一個調用另一方法update()的AWT線程。update(Graphicsg)方法update方法通常清除當前的顯示並調用paint()。update()方法可以被修改,如:為了減少閃爍可不清除顯示而直接調用paint()。小結掌握:Applet與Application運行方式的區別理解:Applet的生命週期Applet繪圖相關的方法瞭解:HTML語言Java高級程式設計第一部分第一章 Java入門基礎第二章 異常第三章 JavaApplet類型第四章 圖形用戶介面GUI(一)——AWT第五章 Java中的事件處理機制第六章 圖形用戶介面GUI(二)——Swing第七章 多線程第八章I/O輸入輸出流第九章 Java資料庫連接(JDBC)第十章 Java網路編程第二部分第一章JavaAPI第二章Java與多媒體第三章JavaBean基礎第四章

圖形用戶介面GUI(一)——AWT4.1 AWT工具集簡介4.2 AWT事件模型4.3 GUI組件上的圖形操作4.4 常用的AWT組件4.1AWT工具集簡介GUI即圖形用戶介面(GraphicsUserInterface),它是用戶與程式之間的一個介面,程式通過GUI為用戶提供方便操作的圖形化的介面,通常包括窗口、菜單、按鈕、選擇按鈕、文本框、工具欄等元素。AWT即抽象窗口工具包(AbstractWindowToolkit),是JavaAPI為Java程式提供的建立圖形用戶介面的基本工具集,AWT可用於JavaApplication和JavaApplet的圖形用戶介面的創建。4.1AWT工具集簡介

--組件與容器組件(Component)各種各樣的類,它們封裝了圖形系統的許多最小單位,例如按鈕、菜單、文本框等。容器(Container)也是組件,它最主要的作用是裝載其他組件,以實現圖形介面上的佈局,如窗口(Frame)、面板(Panel)等。類似面板這樣的容器也常被當作組件添加到其他容器中,以便完成複雜的介面設計。4.1AWT工具集簡介

--AWT類層次結構圖AWT類層次結構圖如下:4.2AWT事件模型事件處理簡介JavaGUI程式是事件驅動的,要讓圖形介面回應用戶的操作,就必須給各組件加上相應的事件處理代碼。在事件處理過程中,主要包括3個部分:Event:事件,用戶對介面組件的操作在Java語言上的描述,以類的形式出現,如鍵盤操作事件的類是KeyEvent。EventSource:事件源,事件發生的場所,通常就是各個組件,例如按鈕Button。EventHandling:事件處理,接收事件對象並對其進行處理,由事件監聽器(EventListener)實現。4.2AWT事件模型

--授權事件模型授權事件模型簡介Java採用授權事件模型(DelegationEventMode)的事件處理機制,也稱為委託事件模型。當用戶與GUI的組件交互,觸發了相應的事件時,組件本身並不直接處理事件,而是將事件的處理工作委託給事件監聽器。java.awt.event包包含了JavaAWT的事件類和事件監聽器類,見教材表4-14.3GUI組件上的圖形操作

GUI組件上的圖形操作:GUI組件上的圖形操作主要包括:繪製二維圖形、控制顏色和字體等等。java.awt包中提供了許多圖形操作的類:

Graphics類:提供了許多處理圖形的方法,如繪製線條、各種矩形、各種橢圓、弧線和多邊形等。

Color類:包含了操作顏色的方法和常量。

Font類:包含了操作字體的方法和常量。4.3GUI組件上的圖形操作

--組件重繪組件重繪AWT線程在重新繪製組件(如最小化後恢復)時,會自動調用組件的paint()方法(在Component類中定義),paint()方法定義的如下:publicvoidpaint(Graphicsg)因此,組件重繪的代碼應該在paint()方法中編寫。由於不能直接進入到某個組件的paint()方法中修改其代碼,所以,常用的處理方式是:定義一個繼承需重繪組件的子類,在子類中重寫paint()方法,在這個新的paint()方法中編寫重繪代碼。

4.3GUI組件上的圖形操作

--繪製基本圖形Graphics類提供了許多繪製基本圖形的方法:繪製直線繪製矩形繪製橢圓繪製弧線繪製多邊形繪製文本繪製直線繪製直線方法:

voiddrawLine(intx1,inty1,intx2,inty2)

描述: 在點(x1,y1)和點(x2,y2)之間繪製一條直線返回繪製矩形繪製矩形的常用方法如下:voiddrawRect(intx,inty,intwidth,intheight)

繪製矩形,點(x,y)為左上角座標,寬度、高度分別為width和heightvoiddrawRect(intx,inty,intwidth,intheight,

intarcWidth,intarcHeight)

绘制圆角矩形,点(x,y)為外接矩形左上角座標,arcWidth和arcHeight分別為弧度和弧高voidfillRect(intx,inty,intwidth,intheight)

繪製填充矩形voidfillRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)

繪製填充圓角矩形返回繪製橢圓繪製橢圓的常用方法如下:voiddrawOval(intx,inty,

intwidth,

intheight)

繪製橢圓,點(x,y)是外切矩形左上角座標voidfillOval(intx,inty,intwidth,intheight)

繪製填充橢圓返回繪製弧線繪製弧線的常用方法如下:

voiddrawArc(intx,inty,intwidth,intheight, intstartAngle,intarcAngle)

繪製弧線,前4個參數含義同橢圓,startAngle為起始弧度值,逆時針繪製弧線(3點鐘方位為0度),arcAngle為弧角度

voidfillArc(intx,inty,intwidth,intheight, intstartAngle,intarcAngle)

繪製填充弧線返回繪製多邊形繪製多邊形的常用方法如下:voiddrawPolygon(int[]xPoints,int[]yPoints, intnPoints)

制多邊形,數組xPoints和yPoints表多邊形頂點座標,nPoints表頂點數目voidfillPolygon(int[]xPoints,int[]yPoints,

intnPoints)

繪製填充多邊形返回繪製文本繪製文本(字串)方法:

voiddrawString(Stringstr,intx,inty)描述: 從點(x,y)處開始從左至右繪製字串str返回4.3GUI組件上的圖形操作

--建立字體建立字體字體類Font的常用構造方法:

publicFont(Stringname,intstyle,intsize)name用於指定字體名style指定字體樣式(Font.BOLD、Font.ITALC、Font.PLAIN)size用於指定字體大小setFont()方法用於設定文本當前使用的字體:

voidsetFont(Fontfont)

4.4常用的AWT組件常用的AWT組件:Frame類文本框和文本區按鈕和標籤面板和畫布佈局設計選擇型組件Component類的常用方法Dialog類4.4常用的AWT組件

--Frame類Frame類是一個容器類,其對象就是一個Java應用程式窗口,其他各種組件可以添加到Frame中構造方法:publicFrame()

publicFrame(Stringtitle)

Frame類Frame類常用方法:publicvoidsetVisible(booleanb)publicvoidsetSize(intwidth,intheight)publicStringsetTitle(Stringtitle)publicvoidsetBounds(intx,inty,

intwidth,intheight)publicvoidsetResizable(booleanb)publicvoiddispose()返回4.4常用的AWT組件

--文本框和文本區1、文本框(TextField)單行文本框,可以向其中輸入一行字串或對其內容進行修改構造方法:publicTextField(Stringtext)publicTextField(intcolumns)publicTextField(Stringtext,intcolumns)

TextFieldTextField類常用方法:publicvoidsetText(Stringtext)

publicStringgetText()publicvoidsetEchoChar(charc)TextArea2、文本區(TextArea)多行文本框,或稱文本區,同樣用於顯示文本字串,用戶也可以對其中的字串進行編輯構造方法:publicTextArea(Stringtext)publicTextArea(introws,intcolumns)publicTextArea(Stringtext,intcows,

intcolumns)publicTextArea(Stringtext,intcows,

intcolumns,intscrollbars)

TextAreaTextArea類常用方法:setText(String)、getText()

與TextField對應方法功能相同publicvoidappend(Stringstr)publicvoidinsert(Stringstr,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论