版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目標(biāo)FlowLayout(流佈局管理器)
GridLayout(網(wǎng)格佈局管理器)
BorderLayout(邊界佈局管理器)
CardLayout(卡片佈局管理器)
BoxLayout(盒佈局管理器)
GridBagLayout(GridBag佈局管理器)
使用佈局管理器佈局介面2.1
佈局管理器種類
Java中設(shè)置佈局的類也叫佈局管理器(LayoutManager)。佈局管理器是執(zhí)行佈局管理的特殊的對(duì)象,它確定容器的組件是如何組織和管理的。當(dāng)創(chuàng)建一個(gè)容器時(shí),Java自動(dòng)地為它創(chuàng)建並分配一個(gè)默認(rèn)的佈局管理器,它確定容器中控件的佈局。可在應(yīng)用中為不同的容器創(chuàng)建不同的佈局管理器。
除BoxLayout外,所有的佈局類都在java.awt包中,是最頂層類java.lang.Object類的子類,並實(shí)現(xiàn)LayoutManager介面。Java中常用的佈局管理器分類如下:
FlowLayout(流佈局管理器)
GridLayout(網(wǎng)格佈局管理器)
BorderLayout(邊界佈局管理器)
CardLayout(卡片佈局管理器)
BoxLayout(盒佈局管理器)
GridBagLayout(GridBag佈局管理器)
為創(chuàng)建容器的佈局管理器,可調(diào)用setLayout(LayoutManager,layout)方法。而該方法以佈局類的實(shí)例為參數(shù),所以應(yīng)先創(chuàng)建相應(yīng)的佈局類的實(shí)例。然後,為容器指出放置細(xì)件要用的佈局。FlowLayoutflowLayoutObj=newFlowLayout();JPanelpanelObj=newJPanel(flowLayoutObj);//以流佈局類對(duì)象為參數(shù)
2.2
FlowLayout(流佈局管理器)
JPanel的默認(rèn)佈局管理器為FlowLayout。流佈局管理器以控件加入到容器的次序、按行一個(gè)接一個(gè)地放置控件。當(dāng)該佈局管理器的控件到達(dá)此JFrame框架的右邊界時(shí),它自動(dòng)開始在下一行放置控件。
在默認(rèn)狀態(tài)下,F(xiàn)lowLayout管理器使控件對(duì)準(zhǔn)每一行的中心,其構(gòu)造符函數(shù)如下:
FlowLayout(),創(chuàng)建一個(gè)流佈局管理器,位置以中心對(duì)齊並在組件之間留以5像素的水準(zhǔn)和垂直間隔。
FlowLayout(intalign),創(chuàng)建一個(gè)流佈局管理器,位置按所指定的對(duì)齊方式並在組件之間留以5像素的水準(zhǔn)和垂直間隔。
FlowLayout(intalign,inthgap,intvgap),創(chuàng)建一個(gè)流佈局管理器,位置按所指定的對(duì)齊方式並在組件之間按所指定的水準(zhǔn)和垂直間隔。
2.3
GridLayout(網(wǎng)格佈局管理器)
流佈局管理器(FlowLayout)是JPanel默認(rèn)佈局管理器,也是最簡(jiǎn)單的佈局管理器。正如所看到的,它不能給你必要的控制以創(chuàng)建複雜的框架。
網(wǎng)格佈局管理器是流佈局管理器的擴(kuò)展,網(wǎng)格佈局管理器把顯示編組為矩形格子,然後網(wǎng)格佈局管理器把創(chuàng)建的組件放入每一個(gè)格子,從左到右,自上向下地放置。網(wǎng)格佈局管理器和流佈局管理器不同的是它按指定的列數(shù)自動(dòng)換行。
網(wǎng)格佈局管理器類似於流佈局管理器,以控件加入到容器的次序、按行一個(gè)接一個(gè)地放置控件。當(dāng)控件的個(gè)數(shù)到網(wǎng)格的列時(shí),它自動(dòng)開始在下一行放置控件。
在默認(rèn)狀態(tài)下,GridLayout管理器使控件對(duì)準(zhǔn)每一矩形格的中心。GridLayout的構(gòu)造符函數(shù)如下:
GridLayout(),創(chuàng)建一個(gè)默認(rèn)為1行的網(wǎng)格佈局管理器,行佈局中所有組件大小相同。
GridLayout(introws,intcols),創(chuàng)建一個(gè)帶指定行數(shù)和列數(shù)的網(wǎng)格佈局管理器,佈局中所有組件大小相同。
GridLayout(introws,intcols,inthgap,intvgap),創(chuàng)建一個(gè)帶指定行數(shù)、列數(shù)、水準(zhǔn)與垂直間距的網(wǎng)格佈局管理器,佈局中所有組件大小相同。
2.4
BorderLayout(邊界佈局管理器)JFrame容器默認(rèn)為邊界佈局管理器(BorderLayout)。佈局方式按上北(north)、下南(south)、左西(west)、右東(east)和中(center)佈局。
BorderLayout的構(gòu)造函數(shù)如下:
BorderLayout(),創(chuàng)建一個(gè)邊界佈局管理器。BorderLayout(inthgap,intvgap),以指定組件之間的水準(zhǔn)與垂直間隔,創(chuàng)建一個(gè)邊界佈局管理器。
2.5
CardLayout(卡片佈局管理器)
最複雜的佈局管理器之一為卡片佈局管理器。用這個(gè)佈局管理器,可以創(chuàng)建如卡片盒之類的佈局盒,然後從一種佈局翻動(dòng)到另一種佈局,要想實(shí)現(xiàn)這種翻動(dòng),涉及到下一章要講到的交互與事件處理機(jī)制。
CardLayout(),創(chuàng)建一個(gè)卡片佈局管理器。
panelObj.add(“card1”,buttonObj1);cardObj.show(panelObj,”card1”);cardObj.first(panelObj);
默認(rèn)顯示第一張,為了在卡片堆中顯示想要的卡片,CardLayout類提供了如下所示的方法。
first(Containerparent)顯示第一張卡片
last(Containerparent)顯示最後一張卡片
next(Containerparent)顯示下一張卡片
previous(Containerparent)顯示上一張卡片
show(Containerparent)顯示所指定的卡片2.6
BoxLayout(盒佈局管理器)
盒佈局管理器(BoxLayout)在javax.swing包中。利用盒佈局管理器可在容器中水準(zhǔn)和垂直地排列多個(gè)組件,類似網(wǎng)格佈局的一行和一列,不同的是組件大小不會(huì)因容器大小而改變,又類似於流佈局。
BoxLayout的構(gòu)造函數(shù)與其他不同:
BoxLayout(Containertarget,intaxis)layoutObj=newBoxLayout(panelObj,BoxLayout.X_AXIS);
提示:一個(gè)容器只能使用一種類型的佈局管理器,任何一個(gè)較為複雜的介面佈局都不是一個(gè)容器和一種類型的佈局管理器所能完成的。一個(gè)容器可以作為一個(gè)單獨(dú)的控件加入另一個(gè)容器的佈局。例1:多個(gè)佈局管理器的例子。
例2:p135程式j(luò)06。
第六次課:BoxLayout(盒佈局管理器)綜合案例2.7
GridBagLayout(GridBag佈局管理器)GridBagLayout佈局管理器是java.awt包中提供的最靈活、同時(shí)又是最複雜的一種佈局管理器,它類似於網(wǎng)格佈局(GridLayout)。GridBagLayout佈局管理器把組件組織成長(zhǎng)方形網(wǎng)格,使用這種佈局,可靈活地把組件放在長(zhǎng)方形網(wǎng)格的任何行和列中,它也允許特定的組件跨多行和多列。
GridBagLayout類只有一個(gè)不帶任何參數(shù)的構(gòu)造符。GridBagLayout類僅僅創(chuàng)建了一個(gè)佈局。為了指出諸如組件的位置和尺寸的約束,需要?jiǎng)?chuàng)建GridBagConstraints類的對(duì)象,調(diào)用GridBagConstraints類的屬性變數(shù)限制組件的位置和尺寸。GridBagConstraints類的屬性變數(shù)如下:gridx、gridy:指出組件所在的行數(shù)和列數(shù),0開始。gridwidth、gridheight:指出組件跨的行數(shù)和列數(shù)anchor:指出組件在網(wǎng)格的方位(8個(gè)方位)
GridBagConstraints.NORTH
GridBagConstraints.NORTHEASTfill:是否充滿網(wǎng)格weightx、weighty:是否拉長(zhǎng)組件
L6.1檔管理:File類
概念Java的java.io.File類是頂層類java.lang.Object的子類,在java.io包中,它提供了類似Windows資源管理器的一些功能,對(duì)檔和目錄進(jìn)行操作,例如,創(chuàng)建和刪除目錄、檔,流覽檔等。
用File類訪問(wèn)檔和目錄對(duì)象,它使用當(dāng)前主機(jī)的操作系統(tǒng)的命名慣例,此類可用來(lái)創(chuàng)建檔和目錄對(duì)象。L6.1檔管理:File類
檔流的建立類File檔類(File)是一個(gè)經(jīng)常使用的類,它並不一定代表一個(gè)實(shí)際的檔,儘管從名稱看起來(lái)是這樣。它可以代表一個(gè)檔或一個(gè)目錄。檔的生成publicFile(Stringpath);publicFile(Stringpath,Stringname);publicFile(Filedir,Stringname);檔對(duì)象的建立
Filefp=newFile(“tempfile.txt”);L6.1檔管理:File類
檔流的建立對(duì)檔操作要定義檔流FileInputStream類用來(lái)打開一個(gè)輸入檔FileOutputStream類用來(lái)打開一個(gè)輸出檔輸出檔輸入檔readwriteL6.1檔管理:File類
檔案名的位置檔案名的位置StringgetName();得到一個(gè)檔的名稱(不包括路徑)StringgetPath();得到一個(gè)檔的路徑名StringgetAbsolutePath();得到一個(gè)檔的絕對(duì)路徑名StringgetParent();得到一個(gè)檔的上一級(jí)目錄名StringrenameTo(FilenewName);將當(dāng)前檔案名更名為給定檔的完整路徑L6.1檔管理:File類
檔屬性的測(cè)試檔屬性測(cè)試booleanexists();測(cè)試當(dāng)前File對(duì)象所指示的檔是否存在booleancanWrite();測(cè)試當(dāng)前檔是否可寫booleancanRead();測(cè)試當(dāng)前檔是否可讀booleanisFile();測(cè)試當(dāng)前檔是否是檔(不是目錄)booleanisDirectory();測(cè)試當(dāng)前檔是否是目錄L6.1檔管理:File類
檔的描述普通檔資訊和工具longlastModified();得到檔最近一次修改的時(shí)間longlength();得到檔的長(zhǎng)度,以位元組為單位booleandelete();刪除當(dāng)前檔目錄操作booleanmkdir();根據(jù)當(dāng)前對(duì)象生成一個(gè)由該對(duì)象指定的路徑Stringlist();列出當(dāng)前目錄下的檔L6.1檔管理:File類
檔的順序處理對(duì)本機(jī)檔進(jìn)行順序的讀/寫FileInputStream和FileOutputStream類用來(lái)進(jìn)行檔I/O處理由它們所提供的方法可以打開本地主機(jī)上的檔並進(jìn)行順序的讀/寫。FileInputStreamfis;try{fis=newFileInputStream("text"); System.out.print("contentoftextis:"); intb; while((b=fis.read())!=-1){ System.out.print((char)b); }}catch(FileNotFoundExceptione){ System.out.println(e);}catch(IOExceptione){ System.out.println(e);}
L6.1檔管理:File類
File類的構(gòu)造符
File(Stringpathname),通過(guò)把給出的路徑名轉(zhuǎn)換為抽象路徑名,創(chuàng)建一個(gè)新的File實(shí)例。
File(Stringparent,Stringchild),由父路徑名和子路徑名,創(chuàng)建一個(gè)新的File實(shí)例。
File(Fileparent,Stringchild),由父File對(duì)象和子路徑名,創(chuàng)建一個(gè)新的File實(shí)例。
·
File類的構(gòu)造符以路徑名、父路徑名和子路徑名,或File類對(duì)象和子路徑名為參數(shù),F(xiàn)ile類的構(gòu)造符只是構(gòu)造了一個(gè)File類對(duì)象,此對(duì)象既可以是目錄、也可以是檔,需要調(diào)用相應(yīng)的方法mkdir()和creatNewFile()創(chuàng)建目錄和文件。
L6.1檔管理:File類
File類的構(gòu)造符步驟:
1.創(chuàng)建目錄對(duì)象。用構(gòu)造函數(shù)創(chuàng)建目錄對(duì)象。
2.創(chuàng)建目錄。mkdir()方法是創(chuàng)建路徑中的當(dāng)前目錄,其父目錄必須已經(jīng)存在,否則創(chuàng)建不成功;mkdirs()方法創(chuàng)建路徑中的所有目錄。
3.創(chuàng)建檔對(duì)象。用構(gòu)造函數(shù)創(chuàng)建檔對(duì)象。
4.創(chuàng)建檔。createNewFile()方法創(chuàng)建路徑中的檔,該方法拋棄異常,調(diào)用時(shí)必須捕捉這種異常,函數(shù)原型:publicbooleancreateNewFile()throwsIOException。
5.路徑分隔符號(hào)是雙反斜杠“\\”,因?yàn)镴ava是跨平臺(tái)的,在Windows操作系統(tǒng)下雙反斜杠“\\”轉(zhuǎn)換為“\”,在linux操作系統(tǒng)下雙反斜杠“\\”轉(zhuǎn)換為“/”。
L6.2流的定義和類型
6.2.1概念Java以流的形式處理所有的輸入和輸出數(shù)據(jù)流是Java程式中發(fā)送和接收數(shù)據(jù)的一個(gè)管道當(dāng)發(fā)送數(shù)據(jù)流時(shí)——我們認(rèn)為是在——寫數(shù)據(jù)流當(dāng)接收數(shù)據(jù)流時(shí)——我們認(rèn)為是在——讀數(shù)據(jù)流檔程式終端檔程式網(wǎng)路端點(diǎn)數(shù)據(jù)流起點(diǎn)終點(diǎn)網(wǎng)路端點(diǎn)檔,字串、存儲(chǔ)區(qū)L6.2流的定義和類型
6.2.1概念在Java中有關(guān)流的操作使用java.io.*出於安全的考慮,小應(yīng)用默認(rèn)是不能實(shí)現(xiàn)檔I/O流IOException無(wú)論什麼時(shí)候讀取或?qū)懭霐?shù)據(jù)流,都會(huì)阻塞所有的其他線程。所以,應(yīng)將輸入和輸出數(shù)據(jù)流分開如果讀取或?qū)懭霐?shù)據(jù)流時(shí)發(fā)生錯(cuò)誤那麼就拋出一個(gè)IOExceptionL6.2流的定義和類型
6.2.2輸入流(Java1.0的I/O體系)L6.2流的定義和類型
6.2.2輸入流(Java1.0的I/O體系)classjava.io.InputStream(抽象類)classjava.io.ByteArrayInputStream(從記憶體中提取字元緩衝區(qū)作為數(shù)據(jù)源)classjava.io.FileInputStream(從檔讀取資訊)classjava.io.FilterInputStream(對(duì)數(shù)據(jù)流進(jìn)行輸入處理)classjava.io.BufferedInputStream(避免每次都進(jìn)行物理性的讀取)classjava.io.DataInputStream(讀取一個(gè)流中的基本的數(shù)據(jù)類型)
classjava.io.LineNumberInputStream(不建議使用)
classjava.io.PushbackInputStream(有一個(gè)位元組的後推緩衝區(qū),以便後推讀入上一個(gè)字元,
Java編譯器使用)classjava.io.ObjectInputStream(對(duì)象輸入流)classjava.io.PipedInputStream(實(shí)現(xiàn)管道化概念)classjava.io.SequenceInputStream(將兩個(gè)或更多的InputStream對(duì)象轉(zhuǎn)換成單個(gè)InputStream對(duì)象)classjava.io.StringBufferInputStream(不建議使用)L6.2流的定義和類型
6.2.2輸入流(Java1.1的I/O體系)classjava.io.Reader對(duì)應(yīng)於(InputStream)classjava.io.BufferedReader對(duì)應(yīng)於(BufferedInputStream)classjava.io.LineNumberReader對(duì)應(yīng)於(LineNumberInputStream)classjava.io.CharArrayReaderclassjava.io.FilterReaderclassjava.io.PushbackReaderclassjava.io.InputStreamReaderclassjava.io.FileReader對(duì)應(yīng)於(FileInputStream)classjava.io.PipedReaderclassjava.io.StringReader對(duì)應(yīng)於(StringBufferInputStream)L6.2流的定義和類型
6.2.3輸出流(Java1.0的I/O體系)L6.2流的定義和類型
6.2.3輸出流(Java1.0的I/O體系)classjava.io.OutputStream(抽象類)classjava.io.ByteArrayOutputStreamclassjava.io.FileOutputStream(向檔輸出資訊)classjava.io.FilterOutputStream(對(duì)數(shù)據(jù)流進(jìn)行輸出處理)classjava.io.BufferedOutputStream(避免每次物理性的寫入)classjava.io.DataOutputStream(向一個(gè)流中輸出基本的數(shù)據(jù)類型)classjava.io.PrintStream(控制顯示)classjava.io.ObjectOutputStream(對(duì)象輸出流)classjava.io.PipedOutputStream(實(shí)現(xiàn)管道化概念)L6.2流的定義和類型
6.2.3輸出流(Java1.0的I/O體系)classjava.io.Writer對(duì)應(yīng)於(OutputStream)classjava.io.BufferedWriter對(duì)應(yīng)於(BufferedOutputStream)classjava.io.CharArrayWriterclassjava.io.FilterWriterclassjava.io.OutputStreamWriterclassjava.io.FileWriter對(duì)應(yīng)於(FileOutputStream)classjava.io.PipedWriterclassjava.io.PrintWriter對(duì)應(yīng)於(PrintStream)classjava.io.StringWriter(無(wú)對(duì)應(yīng))L6.2流的定義和類型
6.2.4_標(biāo)準(zhǔn)的系統(tǒng)數(shù)據(jù)流標(biāo)準(zhǔn)的系統(tǒng)數(shù)據(jù)流(java.lang.System)標(biāo)準(zhǔn)輸出數(shù)據(jù)流——System.out把輸出送到缺省的顯示(通常是顯示器)print()、println()標(biāo)準(zhǔn)輸入數(shù)據(jù)流——System.in從標(biāo)準(zhǔn)輸入獲取輸入(通常是鍵盤)read()標(biāo)準(zhǔn)錯(cuò)誤數(shù)據(jù)流——System.err把錯(cuò)誤資訊送到缺省的顯示print()、println()每當(dāng)main方法被執(zhí)行時(shí)就自動(dòng)生成上述三個(gè)對(duì)象L6.2流的定義和類型
6.2.4_處理流的基本類(InputStream和OutputStream)Java中每一種流的基本功能依賴於基本類InputStreamOutputStream它們是抽象類,不能直接使用L6.2流的定義和類型
6.2.4_位元組流與字元流的概念位元組流與字元流位元組流從InputStream和OutputStream派生出來(lái)的一系列類。這類流以位元組(byte)為基本處理單位。如:FileInputStream和FileOutputStream字元流從Reader和Writer派生出的一系列類,這類流以16位的Unicode碼表示的字元為基本處理單位。如:FileReader和FileWriter
流位元組流字元流sourcestreamsInputStream
ReadersinkstreamsOutputStreamWriterL6.2流的定義和類型
6.2.5FileInputStream和FileOutputStream類
讀或?qū)懙教囟ㄎ恢茫ㄈ绱牌瑱n或記憶體)的輸入/輸出流稱為位元組流。Java提供java.io.InputStream類從源讀入數(shù)據(jù)字節(jié),java.io.OutputStream類把數(shù)據(jù)字節(jié)寫到目的地。PX是所有輸入/輸出流的父類,儘管輸入/輸出流很多,但都是用在不同的場(chǎng)合,和文件輸入/輸出相關(guān)的是FileInputStream類
和FileOuputStream類
。FileInputStream類的構(gòu)造函數(shù)如下:
FileInputStream(Stringname),創(chuàng)建一個(gè)新的FileInputStream對(duì)象,該對(duì)象和參數(shù)所指定的檔相連,該檔必須是在系統(tǒng)中已經(jīng)存在的。
FileInputStream(Filefile),創(chuàng)建一個(gè)新的FileInputStream對(duì)象,該對(duì)象和參數(shù)所指定的File檔相連。L6.2流的定義和類型
6.2.5FileInputStream和FileOutputStream類FileInputStream類繼承InputStream抽象類的方法
intread()由檔讀入1個(gè)位元組的數(shù)據(jù)intread(byte[]buffer)由檔讀入n個(gè)位元組的數(shù)據(jù),並存儲(chǔ)在位元組數(shù)組中。intread(byte[]buffer,intoffset,intlength)
從第2個(gè)參數(shù)開始,讀取第3個(gè)參數(shù)長(zhǎng)度的位元組的數(shù)據(jù),並存儲(chǔ)在位元組數(shù)組中。Intclose()
關(guān)閉輸入流,並釋放與他有聯(lián)繫的數(shù)據(jù)。L6.2流的定義和類型
6.2.5FileInputStream和FileOutputStream類FileOutputStream類的構(gòu)造函數(shù)如下:FileOutputStream(Stringname),創(chuàng)建一個(gè)新的FileOutputStream對(duì)象,該對(duì)象和參數(shù)所指定的檔相連,該檔必須是在系統(tǒng)中已經(jīng)存在的。FileOutputStream(Filefile),創(chuàng)建一個(gè)新的FileOutputStream對(duì)象,該對(duì)象和參數(shù)所指定的檔相連,該檔不一定是在系統(tǒng)中已經(jīng)存在的。L6.2流的定義和類型
6.2.5FileInputStream和FileOutputStream類
FileOutputStream類繼承OuputStream抽象類的方法
intwrite()intwrite(byte[]buffer)intwrite(byte[]buffer,intoffset,intlength)Intclose()L6.2流的定義和類型
6.2.5FileInputStream和FileOutputStream類注意:構(gòu)造函數(shù)FileInputStream()和ileOutputStream()拋出FileNotFoundException異常,方法read()、write()、close()拋出IOException異常,必須捕捉該異常。read(byte[])當(dāng)讀到檔末尾時(shí)返回-1System.out.println(String)需將byte[]型數(shù)據(jù)轉(zhuǎn)換為String類型,方法為Stringstr=newString(byArry); 下麵的例子是使用FileInputStream類和FileOutputStream類讀入Text1.dat檔的數(shù)據(jù)(內(nèi)容),把數(shù)據(jù)顯示到螢?zāi)?,並寫入到Text2.dat檔L6.2流的定義和類型
6.2.6連接輸入流:SequenceInputStream類·
SequenceInputStream類,用於將多個(gè)輸入流順序連接起來(lái),使它們看起來(lái)就像一個(gè)比較長(zhǎng)的流。
順序輸入流提供了把若干個(gè)不同的流統(tǒng)一為同一個(gè)流的功能。下麵是一個(gè)順序輸入流的例子,該例子的目的是構(gòu)造一個(gè)順序輸入流,將當(dāng)前路徑下的test1.dat和test2.dat檔中的內(nèi)容讀取出來(lái),並輸出到test3.dat檔,並顯示到螢?zāi)?。SequenceInputStream類的構(gòu)造方法:
publicSequenceInputStream(inputStrinms1,inputStrinms2L6.2流的定義和類型
6.2.7過(guò)濾流:FilterInputStream和FilterOutputStream類在java.io包中,F(xiàn)ilterInputStream和FilterOutputStream類是所有過(guò)濾輸入流和輸出流的父類,它們是抽象類,本身不能生成任何實(shí)例,必須被其他類繼承。
FilterInputStream和FilterOutputStream類具有自己的子類,分別實(shí)現(xiàn)了幾個(gè)特殊的過(guò)濾輸入流和輸出流,利用這些特殊輸入流和輸出流的實(shí)例可以進(jìn)行流的處理。
下麵介紹幾個(gè)過(guò)濾輸入流和輸出流的子類:
DataInputStream和DataOutputStream
這兩個(gè)類不僅能讀寫數(shù)據(jù)流,而且能以與機(jī)器無(wú)關(guān)的格式讀寫各種各樣的Java語(yǔ)言本身固有的數(shù)據(jù)類型,例如char、int、float等。
BufferedInputStream和BufferedOutputStream這兩個(gè)類實(shí)現(xiàn)了帶緩衝的過(guò)濾流,在系統(tǒng)讀取數(shù)據(jù)的同時(shí)進(jìn)行緩存,將任意的輸入流和輸出流綁定到緩衝流上,提高運(yùn)行效率。對(duì)於BufferedInputStream類,數(shù)據(jù)首先寫入緩衝區(qū),當(dāng)緩衝區(qū)滿時(shí),緩衝區(qū)中的數(shù)據(jù)寫入連接的輸出流,使用BufferedInputStream類提供的方法flush()可以強(qiáng)制將緩衝區(qū)的內(nèi)容全部寫入輸出流。
L6.2流的定義和類型
6.2.7過(guò)濾流:FilterInputStream和FilterOutputStream類例:對(duì)於某些流來(lái)說(shuō)(比如FileInputStream),它們可以從一些檔等地方讀入位元組數(shù)據(jù)。而對(duì)另一些流來(lái)說(shuō)(比如DataInputStream),它們則可以將位元組“組裝”成更有用的數(shù)據(jù)類型。Java程式員必須綜合運(yùn)用這兩種流,將其和並成所謂的“過(guò)濾流”。為了能從檔中讀取數(shù)字,首先要?jiǎng)?chuàng)建一個(gè)FileInputStream,然後將其傳遞給一個(gè)DataInputStream的構(gòu)件器。如下:
FileInputStreamfin=newFileInputStream(“employee.dat”);DataInputStreamdin=newDataInputStream(fin);doubles=din.readDouble();L6.2流的定義和類型
6.2.7過(guò)濾流:FilterInputStream和FilterOutputStream類DataInputStream、DataOutputStream一種較為高級(jí)的數(shù)據(jù)輸入輸出方式,除了位元組和位元組數(shù)組,還可以處理int,float,boolean等類型.還可以用readLine方法讀取一行資訊??墒褂玫姆椒ǎ?.write,writeBoolean……
2.read,readByte……
例:dos.writeBoolean(true);dos.writeByte((byte)35);dos.writeChar('A');dos.writeDouble(3.1415926);dos.writeFloat(3.14F);dos.writeInt(123456789);dos.writeLong(9876543210L);dos.writeShort((short)1024);DataIOTest.javaL6.3用RandomAccessFile類讀寫檔
隨機(jī)存取檔隨機(jī)訪問(wèn)意味著可以從檔的任意位置讀出或向檔的任意位置寫入RandomAccessFile類extendsObjectimplementsDataInput,DataOutputL6.3用RandomAccessFile類讀寫檔
隨機(jī)存取檔創(chuàng)建一個(gè)隨機(jī)訪問(wèn)檔Withthefilename:myRAFile=newRandomAccessFile(Stringname,Stringmode);WithaFileobject:myRAFile=newRandomAccessFile(Filefile,Stringmode);L6.3用RandomAccessFile類讀寫檔
隨機(jī)存取檔支持隨機(jī)檔操作的方法:Byte[]readBytes();把指定字串作為位元組寫到檔IntwriteBytes(String);從檔中讀入指定個(gè)數(shù)的位元組到位元組數(shù)組seek(longpos);將指針調(diào)到所需位置getFilePointer();返回指針當(dāng)前位置Longlength();返回檔長(zhǎng)度L6.4字元讀入/寫出
6.4.1Reader和WriterOutputStreamWrite類Java.io.OutputStreamWriter用作OutputStream和Writer之間的轉(zhuǎn)換器InputStreamRead類Java.io.InputStreamRead用作InputStream和Read之間的轉(zhuǎn)換器L6.4字元讀入/寫出
6.4.1Reader和Writer
輸入流(InputerStream)和輸出流(OutputerStream)的子類以位元組的形式讀入和寫出數(shù)據(jù)。讀入器(Reader)和寫出器(Writer)的子類以字元的形式讀入和寫出數(shù)據(jù)。Reader和Writer類是所有字元輸入/輸出的父類,Reader和Writer類都是抽象類,支持Unicode字元流的讀和寫,Unicode字元以16位表示每個(gè)字元數(shù)據(jù),而位元組以8位工作,因此,以字元形式輸入/輸出速度更快、功能更強(qiáng)。這些16位版本的流稱為讀入器(Reader)和寫入器(Writer),能夠快速地傳輸數(shù)據(jù)。
L7.1JDBC技術(shù)概述
什麼是JDBCJDBCJava資料庫(kù)連接
(JavaDatabaseConnectivity,JDBC)JDBC在設(shè)計(jì)上和ODBC很相似。由於ODBC驅(qū)動(dòng)程式被廣泛使用,首先建立JDBC_ODBC橋接器,使得JDBC有能力訪問(wèn)幾乎所有類型的資料庫(kù)。JDBCAPI是作為Java2標(biāo)準(zhǔn)版(J2SE)和Java2企業(yè)版(J2EE)平臺(tái)的一個(gè)關(guān)鍵部分出現(xiàn)的。它是一種主要的基於標(biāo)準(zhǔn)的機(jī)制,能讓Java語(yǔ)言通過(guò)編程來(lái)訪問(wèn)關(guān)係資料庫(kù)。L7.1JDBC技術(shù)概述
什麼是JDBCJDBC的兩種主要介面JDBC主要有兩種介面,分別是面向程式開發(fā)人員的JDBCAPI和麵向底層的JDBCDRIVERAPI.JDBCAPI使用一系列抽象的介面,它使得應(yīng)用程式員能夠進(jìn)行資料庫(kù)連接,執(zhí)行SQL聲明,並且得到返回結(jié)果.
JDBCDriverAPI是面向驅(qū)動(dòng)程式開發(fā)商的編程介面,對(duì)於大多數(shù)資料庫(kù)驅(qū)動(dòng)程式來(lái)說(shuō),僅僅實(shí)現(xiàn)JDBCAPI提供的抽象的類就可以了.L7.1JDBC技術(shù)概述
什麼是JDBCJDBCAPI使用一系列抽象的介面:1.java.sql.DriverManager:用來(lái)處理裝載驅(qū)動(dòng)程式並且為創(chuàng)建新的資料庫(kù)連接提供支持.
2.java.sql.Connection:完成對(duì)一指定資料庫(kù)連接的功能.3.java.sql.Statement:在一個(gè)給定的連接中作為SQL執(zhí)行聲明的容器,他包含了兩個(gè)重要的子類型.
4.java.sql.PreparedStatement:用於執(zhí)行,編譯的SQL聲明.
5.java.sql.CallableStatement:用於執(zhí)行數(shù)據(jù)庫(kù)中存儲(chǔ)的過(guò)程的調(diào)用.
6.java.sql.ResultSet:控制對(duì)於某一給定聲明取得結(jié)果列的途徑.L7.1JDBC技術(shù)概述
什麼是JDBCJDBC可以不依賴於網(wǎng)路環(huán)境來(lái)工作Java成為編寫世界級(jí)應(yīng)用程式的一個(gè)最合適的語(yǔ)言平臺(tái),JDBC起了關(guān)鍵作用。JDBC允許Applet,Servlet程式以及獨(dú)立的應(yīng)用程式以通用的方式訪問(wèn)在RDBMS中的數(shù)據(jù)L7.1JDBC技術(shù)概述
什麼是JDBCJDBC提供一個(gè)標(biāo)準(zhǔn)的庫(kù),用以訪問(wèn)關(guān)係資料庫(kù).利用一個(gè)單獨(dú)的標(biāo)準(zhǔn)的API(JDBCAPI)建立連接,不用考慮DBMSJDBC的API類庫(kù)位於
java.sql包中JDBC不是嵌入式結(jié)構(gòu)化查詢語(yǔ)言JDBCAPI不是標(biāo)準(zhǔn)的SQL語(yǔ)法JDBCAPI已經(jīng)成為了許多不同API(如JNDI、JTS、JavaBeans)之間提供交互操作性能的核心資料庫(kù)已經(jīng)不再是應(yīng)用程式的數(shù)據(jù)源資料庫(kù)更大意義是為Java對(duì)象提供持續(xù)的服務(wù)。L7.1JDBC技術(shù)概述
什麼是JDBC安全性問(wèn)題java作為網(wǎng)路應(yīng)用就相應(yīng)的需要考慮安全性問(wèn)題.在Javaapplication這種使用方法下,Java的代碼是本地的,因此是可信任的.同樣出於安全性考慮,可信任的applet也可歸為此類。
相反,如一個(gè)Java的applet是不可信任的,就不能允許存取本地機(jī)上的檔或是其他網(wǎng)路數(shù)據(jù).L7.1JDBC技術(shù)概述
什麼是JDBC安全性問(wèn)題
1)JDBC和不可信任的appletsJDBC必須遵守標(biāo)準(zhǔn)的applet的安全模式。
*JDBC必須保證普通的無(wú)標(biāo)誌的applet是不可信任的.
*JDBC將不允許不可信任的applet存取本地的資料庫(kù)系統(tǒng)的數(shù)據(jù).
*如果下載了一個(gè)已向JDBCDriverManager註冊(cè)的JDBC驅(qū)動(dòng)程式,那麼只有與該驅(qū)動(dòng)程式從同一伺服器上下載的代碼中提出的連接要求,JDBC才能利用驅(qū)動(dòng)程式來(lái)進(jìn)行連接。
*一個(gè)不可信任的applet通常只能對(duì)他所下載的伺服器進(jìn)行資料庫(kù)連接。
*在與遠(yuǎn)程資料庫(kù)伺服器進(jìn)行連接時(shí),JDBC應(yīng)當(dāng)避免自動(dòng)或是盲目使用本地機(jī)上的私有資訊。L7.1JDBC技術(shù)概述
什麼是JDBC安全性問(wèn)題
2)JDBC和Java的應(yīng)用程式(包括除不可信任的applet外的所有Java代碼)。JDBC將很迅速的從本地路徑上裝載驅(qū)動(dòng)程式,並且允許應(yīng)用程式自由存取檔的遠(yuǎn)程伺服器等,而對(duì)於applet來(lái)說(shuō),如果從一個(gè)遠(yuǎn)程伺服器上下載一個(gè)不可信任的sun.sql.Driver類,那麼這個(gè)Driver只能於從同一源伺服器上下載的代碼一起使用。
3)網(wǎng)路的安全性:對(duì)於JDBC的用戶來(lái)說(shuō),有關(guān)資料庫(kù)操作的安全性以及在網(wǎng)路上尤其是在Internent上數(shù)據(jù)的傳輸問(wèn)題也是一個(gè)很重要的值的考慮的問(wèn)題.L7.1JDBC技術(shù)概述
線上資源線上資源Sun’sJDBCSitehttp://java.sun.com/products/jdbc/JDBCTutorialhttp://java.sun.com/docs/books/tutorial/jdbc/ListofAvailableJDBCDrivershttp://industry.java.sun.com/products/jdbc/drivers/APIforjava.Sqlhttp://java.sun.com/j2se/1.3/docs/api/java/sql/package-summary.htmlL7.1JDBC技術(shù)概述
JDBC的基本特徵調(diào)用級(jí)SQL介面JDBC是一個(gè)Java語(yǔ)言在客戶機(jī)上使用的調(diào)用級(jí)介面JDBC完全獨(dú)立於多種DBMSJDBC是一個(gè)低級(jí)的應(yīng)用程式編程介面允許Java程式發(fā)出SQL語(yǔ)句並獲取結(jié)果同時(shí)也提供了管理和警告的方法應(yīng)用程式
JDBC
代碼DBMSmydbL7.1JDBC技術(shù)概述
JDBC的基本特徵與SQL的一致性JDBC允許使用屬於DBMS的任何查詢語(yǔ)句支持ANSISQL-92Entrylevel標(biāo)準(zhǔn)可以使用盡可能多的SQL功能一致的APIJDBC使用健壯、靜態(tài)的數(shù)據(jù)類型方便、簡(jiǎn)單L7.1JDBC技術(shù)概述
JDBC組件JDBC連接資料庫(kù)的典型結(jié)構(gòu)通常由4個(gè)必要組件定義應(yīng)用程式驅(qū)動(dòng)程式管理器驅(qū)動(dòng)程式數(shù)據(jù)源L7.1JDBC技術(shù)概述
JDBC組件——數(shù)據(jù)源數(shù)據(jù)源由用戶應(yīng)用程式想訪問(wèn)的數(shù)據(jù)源和自身參數(shù)組成Java應(yīng)用程式JDBC管理器JDBC
網(wǎng)路驅(qū)動(dòng)程式AJDBC-ODBC
橋JDBC
驅(qū)動(dòng)程式CJDBC
驅(qū)動(dòng)程式DODBC
驅(qū)動(dòng)程式B原始
驅(qū)動(dòng)程式C原始
驅(qū)動(dòng)程式C數(shù)據(jù)源A數(shù)據(jù)源B數(shù)據(jù)源C數(shù)據(jù)源DJDBC介面JDBC驅(qū)動(dòng)
程式介面L7.2JDBC的應(yīng)用
應(yīng)用JDBC的七個(gè)基本步驟七個(gè)基本步驟1.裝載驅(qū)動(dòng)程式2.定義連接的URL3.建立連接關(guān)係4.創(chuàng)建一個(gè)Statement對(duì)象5.執(zhí)行一個(gè)查詢6.處理結(jié)果集7.關(guān)閉連接L7.2JDBC的應(yīng)用
Step1——裝載驅(qū)動(dòng)程式裝載驅(qū)動(dòng)程式應(yīng)用Class類的forName()方法註冊(cè)JDBC-ODBC橋驅(qū)動(dòng)程式
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
註冊(cè)O(shè)racle資料庫(kù)廠商提供的JDBC驅(qū)動(dòng)程式Class.forName("oracle.jdbc.driver.OracleDriver");建立橋接器時(shí)可能發(fā)生異常,需要捕獲這個(gè)異常Try{class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}Catch(ClassNotFoundEXceptione){}L7.2JDBC的應(yīng)用
Step2——定義連接的URL定義連接的URL
JDBCURL是提供識(shí)別資料庫(kù)的途徑的字串JDBCURL分三部分
<協(xié)議>:<子協(xié)議>:<子名>
jdbc:subprotocolname:other_stuff在JDBCURL中,<協(xié)議>總是jdbc;<子協(xié)議>是驅(qū)動(dòng)程式的名字或一種資料庫(kù)連通機(jī)制的名字如果檢索數(shù)據(jù)的機(jī)制是ODBC-JDBC橋驅(qū)動(dòng)程式子協(xié)議必須是odbc<子名>用於確定資料庫(kù)
other_stuff(子名)參數(shù)的格式取決於使用的子協(xié)議。Sun建議:如果網(wǎng)址是other_stuff參數(shù)的一部分,最好用標(biāo)準(zhǔn)URL命名形式://hostname:port/otherJDBCL7.2JDBC的應(yīng)用
Step2——定義連接的URL定義連接的URL(SB2.6)mydbJDBCjdbc:mydbdrv://:8192/mydbport:8192URLL7.2JDBC的應(yīng)用
Step2——定義連接的URL定義連接的URL例1
Stringurl="jdbc:odbc:MyDataSource";
這個(gè)url表示用JDBC/ODBC網(wǎng)橋訪問(wèn)一個(gè)名為MyDataSource的ODBC源資料庫(kù)。例2
Stringurl=“jdbc:oracle:thin:@6:1521:ORCL”;
這個(gè)url表示用Oracle資料庫(kù)廠商提供的一個(gè)純Java庫(kù)驅(qū)動(dòng)程式,直接把JDBC請(qǐng)求轉(zhuǎn)換成指定資料庫(kù)協(xié)議接收的請(qǐng)求。L7.2JDBC的應(yīng)用
Step3——建立連接關(guān)係建立連接關(guān)係驅(qū)動(dòng)程式將在URL中尋找已登記的JDBC驅(qū)動(dòng)程式,以使與指定的數(shù)據(jù)源建立連接。(注:也有其他方法)Connection對(duì)象java.SQl.Connection表示和數(shù)據(jù)庫(kù)的連接在應(yīng)用程式中可有多個(gè)連接對(duì)象連接到一個(gè)或多個(gè)數(shù)據(jù)庫(kù)L7.2JDBC的應(yīng)用
Step3——建立連接關(guān)係建立連接關(guān)係getConnection()方法初始化Connection對(duì)象,如:
Stringurl=“jdbc:Odbc:MyDatasource”;
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
connectioncon=DriverManager.getConnection(url,數(shù)據(jù)源的loginname,數(shù)據(jù)源的password);建立連接時(shí)應(yīng)捕獲SQLException異常try{connectioncon=DriverManager.getConnection(url,數(shù)據(jù)源的loginname,數(shù)據(jù)源的password);}Catch(SQLEXceptione){}L7.2JDBC的應(yīng)用
Step3——建立連接關(guān)係3.建立連接關(guān)係應(yīng)用案例■使用協(xié)議是JDBC■
使用的驅(qū)動(dòng)程式是JDBC-ODBC橋■ODBC數(shù)據(jù)源是mysource■用戶名是javauser■
密碼是hotjavaStringURL="jdbc:odbc:mysource"Stringusername="javauser";Stringpassword="hotjava";Try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connectionconnection=DriverManager.getConnection(URL,username,password); //……
connect.close() }catch(Exceptione){System.out.println("Aproblemoccrued duringtheestablishoftheconnection"+e) }L7.2JDBC的應(yīng)用
Step4——?jiǎng)?chuàng)建一個(gè)Statement對(duì)象創(chuàng)建一個(gè)Statement對(duì)象用Satement對(duì)象發(fā)送簡(jiǎn)單查詢給資料庫(kù)創(chuàng)建語(yǔ)法Statementstatement=connection.createStatement();
用connection對(duì)象的createStatement()方法創(chuàng)建Statement對(duì)象L7.2JDBC的應(yīng)用
Step5——執(zhí)行一個(gè)查詢執(zhí)行一個(gè)查詢用Statement對(duì)象的executeQuery()方法執(zhí)行一個(gè)簡(jiǎn)單的查詢
編輯資料庫(kù)時(shí),可使用Statements對(duì)象的executeUpdate()方法,執(zhí)行帶UPDATE,INSERT或DELETE的SQL語(yǔ)句Statements對(duì)象的execute()方法執(zhí)行一個(gè)SQL語(yǔ)句,可能返回多個(gè)結(jié)果使用Statements對(duì)象的setQueryTimeout()方法,設(shè)置獲得結(jié)果的最大延遲時(shí)間。Stringquery="SELECTcol1,col2,col3FROMsometable";resultSetresult=statement.executeQuery(query);L7.2JDBC的應(yīng)用
Step6——處理結(jié)果集處理結(jié)果集結(jié)果集由數(shù)據(jù)行組成,可以在一個(gè)迴圈中使用resultSet.next()方法來(lái)訪問(wèn)並獲取每行數(shù)據(jù)一個(gè)結(jié)果集維持一個(gè)指向當(dāng)前行的指針最初這個(gè)指針指向第一行之前,所以需調(diào)用resultSet.next()方法訪問(wèn)第一行,然後再進(jìn)行處理連續(xù)調(diào)用next()方法將使指針依次指向結(jié)果集各行當(dāng)沒有下一行時(shí),返回值是false。
===================
===================
===================
===================
===================
resultSet.next();數(shù)據(jù)行結(jié)果集第一列的序號(hào)為1而不是0L7.2JDBC的應(yīng)用
Step6——處理結(jié)果集處理結(jié)果集代碼樣例——獲得行資訊while(resultSet.next()){ System.out.println( resultSet.getString(1)+""+ resultSet.getString(2)+""+ resultSet.getString(3));}處理結(jié)果集使用Metadata方法獲得關(guān)於列和數(shù)據(jù)類型資訊因?yàn)榻M成基本表的某一行,可能由許多不同類型的列組成。獲得列數(shù)
intcolNum=getMetaData().getColumnCount();獲得列名
StringcolName=getMetaData().getColumnLabel(inti);L7.2JDBC的應(yīng)用
Step6——處理結(jié)果集L7.2JDBC的應(yīng)用
Step6——處理結(jié)果集訪問(wèn)列java.sql中的介面ResultSetMetaData可以利用一個(gè)列索引或列名迴圈來(lái)獲得ResultSetMetadata對(duì)象中的列L7.2JDBC的應(yīng)用
Step6——處理結(jié)果集訪問(wèn)列通過(guò)getXXX()方法,可釋放包含在結(jié)果集列中的值,以便訪問(wèn)行的內(nèi)容L7.2JDBC的應(yīng)用
Step6——處理結(jié)果集訪問(wèn)列g(shù)etXXX()方法的兩種形式通過(guò)列索引訪問(wèn)getXXX(intcolumnIndex)通過(guò)列名訪問(wèn)getXXX(StringcolumnName)java.sql.*java.io.*java.sqlInterfaceResultSetL7.2JDBC的應(yīng)用
Step6——處理結(jié)果集訪問(wèn)列bytegetByte(int/String)DategetDate(int/String)doublegetDouble(int/String)floatgetFloat(int/String)intgetInt(int/String)longgetLong(int/String)StringgetString(int/String)L7.2JDBC的應(yīng)用
Step6——處理結(jié)果集可滾動(dòng)結(jié)果集當(dāng)需要在結(jié)果集中前後移動(dòng)、或顯示結(jié)果集指定的一條記錄時(shí),需要得到一個(gè)可滾動(dòng)的結(jié)果集。先用下述方法獲得一個(gè)Statement對(duì)象。Statementstmt=con.createStatement(inttype,intconcurrency);type:ResultSet.TYPE_FORWARD_ONLYResultSet.TYPE_SCROLL_INSENSITIVE(資料庫(kù)變化時(shí)當(dāng)前結(jié)果集不變)ResultSet.TYPE_SCROLL_SENSITIVE(資料庫(kù)變化時(shí)當(dāng)前結(jié)果集同步改變)concurrency:ResultSet.CONCUR_READ_ONLY(不能用結(jié)果集更新資料庫(kù)中的表)ResultSet.CONCUR_UPDATETABLE(能用結(jié)果集更新資料庫(kù)中的表)L7.2JDBC的應(yīng)用
Step6——處理結(jié)果集可滾動(dòng)結(jié)果集Publicbooleanprevious()將游標(biāo)上移PublicbooleanbeforeFirst()將游標(biāo)移到第一行之前PublicbooleanafterLast()將游標(biāo)移到結(jié)果集最後一行之後Publicbooleanfirst()將游標(biāo)移到結(jié)果集的第一行Publicbooleanlast()將游標(biāo)移到結(jié)果集的最後一行PublicintgetRow()得到當(dāng)前游標(biāo)所指的行號(hào),行號(hào)從第1開始,結(jié)果集沒有行返回0。Publicbooleanabsolute(introw)將游標(biāo)移到參數(shù)row指定的行號(hào)。L7.2JDBC的應(yīng)用
Step7——關(guān)閉連接關(guān)閉連接
connection.close();L7.2JDBC的應(yīng)用
編寫JDBC程式例:建立數(shù)據(jù)源
ODBC在對(duì)數(shù)據(jù)庫(kù)進(jìn)行連接時(shí),必須給出數(shù)據(jù)源的名稱。首先,使用ACCESS建立所需的資料庫(kù)檔。1.建立資料庫(kù)檔2.建立好資料庫(kù)後,需要建立數(shù)據(jù)源
1)打開控制面板,選擇ODBC項(xiàng)
2)選擇Add
3)選擇MicrosoftAccessDriver.(若沒有此項(xiàng),應(yīng)先安裝ODBC驅(qū)動(dòng)程式)
4)在DataSourceName一項(xiàng)中填入數(shù)據(jù)源名,以後對(duì)此數(shù)據(jù)源的引用要通過(guò)數(shù)據(jù)源名來(lái)實(shí)現(xiàn).最後按ok完成操作.L7.2JDBC的應(yīng)用
編寫JDBC程式例:與資料庫(kù)建立連接
所有JDBC程式的第一步都是與資料庫(kù)建立連接.用戶將得到一個(gè)java.sql.connection類的對(duì)象。
Connectioncon1=DriverManager.getConnection("jdbc:odbc:"+datasource);加載驅(qū)動(dòng)程式Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
程式:JdbcTest.javaL3.1事件處理基礎(chǔ)介面介面在Java語(yǔ)言中,一個(gè)介面不是一個(gè)類,而是對(duì)符合介面需求的類的一套規(guī)範(fàn)?!癷nterface”(介面)關(guān)鍵字使抽象的概念更深入了一層。我們可以將其想像為一個(gè)“純”抽象類。它允許創(chuàng)建者規(guī)定一個(gè)類的基本形式:方法名、引數(shù)列表以及返回類型,但不規(guī)定方法主體。介面包含的數(shù)據(jù)成員,默認(rèn)為static和final。所有的方法都默認(rèn)為public和abstract。不能在介面中說(shuō)明一個(gè)private或protected的變數(shù)或方法。並且方法不能定義成final創(chuàng)建介面,請(qǐng)使用interface關(guān)鍵字,而不要用class。我們可以在interface關(guān)鍵字的前面增加public關(guān)鍵字,或者省略默認(rèn)為“友好的”介面不是類,不能實(shí)例化。在Java中不支持多重繼承,但可以通過(guò)介面實(shí)現(xiàn)“多重繼承”機(jī)能。L3.1事件處理基礎(chǔ)介面介面的聲明
利用extends關(guān)鍵之,可以方便地位一個(gè)介面添加新的方法聲明。定義一個(gè)介面L3.1事件處理基礎(chǔ)介面介面的使用若要一個(gè)類實(shí)現(xiàn)一個(gè)介面,需採(cǎi)取下麵兩個(gè)步驟:聲明類需要實(shí)現(xiàn)的指定介面。提供介面中所有方法的定義。聲明一個(gè)類實(shí)現(xiàn)一個(gè)介面需要使用implements關(guān)鍵字。
如果實(shí)現(xiàn)介面的類中沒有提供介面中所有方法的定義,則該類為抽象類例:
publicclassStockAppletextendsApplet
implementsStockWatcher{...publicvoidvalueChanged(StringtickerSymbol,doublenewValue){if(tickerSymbol.equals(sunTicker)){...}elseif(tickerSymbol.equals(oracleTicker)){...}elseif(tickerSymbol.equals(ciscoTicker)){...}}}L3.1事件處理基礎(chǔ)內(nèi)部類內(nèi)部類(innerclass)是一個(gè)被定義於另一個(gè)類中的類。它們也稱為嵌套類。使用內(nèi)部類原因:一個(gè)內(nèi)部類的對(duì)象可訪問(wèn)創(chuàng)建它的對(duì)象的實(shí)現(xiàn)—包括私有數(shù)據(jù)。對(duì)於同一包中的其他類來(lái)說(shuō),內(nèi)部類能夠隱藏起來(lái)。匿名內(nèi)部類可以很方便的定義回調(diào)。在編寫事件驅(qū)動(dòng)程式時(shí),內(nèi)部類非常方便。注意:只有內(nèi)部類才可以時(shí)“靜態(tài)的”和“私有的”。L3.1事件處理基礎(chǔ)內(nèi)部類內(nèi)部類的語(yǔ)法:1:內(nèi)部類
<修飾符>class<類名>{
<修飾符>class<內(nèi)部類名>{}//其他屬性和方法}2:局部?jī)?nèi)部類<修飾符>class<類名>{[<訪問(wèn)說(shuō)明符>][<修飾符>]方法的返回值類型方法名稱(參數(shù)1,參數(shù)2,…){
…//方法的內(nèi)容
<修飾符>class<內(nèi)部類名>{}}//其他屬性和方法}L3.1事件處理基礎(chǔ)內(nèi)部類例:內(nèi)部類
publicclassStack{privateVectoritems;
...//codeforStack'smethodsandconstructorsnotshown...
publicEnumerationenumerator(){returnnewStackEnum();}classStackEnumimplementsEnumeration{intcurrentItem=items.size()-1;publicbooleanhasMoreElements(){return(currentItem>=0);}publicObjectnextElement(){if(!hasMoreElements())thrownewNoSuchElementException();elsereturnitems.elementAt(currentItem--);}}}L3.1事件處理基礎(chǔ)內(nèi)部類例:局部?jī)?nèi)部類
publicvoidstart(finaldoublerate){classInterestAdderimplementsActionListener{publicvoidactionPerformed(ActionEventevent){……}}ActionListeneradder=newInterestAdder();...…}L3.2事件處理
L3.2.1什麼是事件事件-描述發(fā)生了什麼的對(duì)象如果用戶在用戶介面層執(zhí)行了一個(gè)動(dòng)作(滑鼠點(diǎn)擊和按鍵),這將導(dǎo)致一個(gè)事件的發(fā)生。事件是描述發(fā)生了什麼的對(duì)象。存在各種不同類型的事件類用來(lái)描述各種類型的用戶交互。事件源-事件的產(chǎn)生器事件源是一個(gè)事件的產(chǎn)生者。例如,在Button組件上點(diǎn)擊滑鼠會(huì)產(chǎn)生以這個(gè)Button為源的一個(gè)ActionEvent.這個(gè)ActionEvent實(shí)例是一個(gè)對(duì)象,它包含關(guān)於剛才所發(fā)生的那個(gè)事件的資訊的對(duì)象。這些資訊包括:getActionCommand-返回與動(dòng)作相關(guān)聯(lián)的命令名稱。GetModifiers-返回在執(zhí)行動(dòng)作時(shí)持有的修飾符。
對(duì)EventObj類getSource()-返回對(duì)事件源的引用。事件處理器-接收事件、解釋事件並處理用戶交互的方法L3.2.2
JDK1.0、JDK1.2的事件模型比較
JDK1.0事件模型——層次模型
層次模型是基於容器的。事件先發(fā)送到組件,然後沿容器層次向上傳播。沒有被組件處理的事件會(huì)自動(dòng)地繼續(xù)傳播到組件的容器。優(yōu)點(diǎn)簡(jiǎn)單,而且非常適合面向?qū)ο蟮木幊汰h(huán)境。缺點(diǎn)事件只能由產(chǎn)生這個(gè)事件的組件或包含這個(gè)組件的容器處理。為了處理事件,你必須定義接收這個(gè)事件的組件的子類,或者在基容器創(chuàng)建handleEvent()方法。L3.2.2
JDK1.0、JDK1.2的事件模型比較
JDK1.2事件模型——委託模型
委託事件模型是在JDK1.1中引入的。在這個(gè)模型中,事件被送往產(chǎn)生這個(gè)事件的組件,然而,註冊(cè)一個(gè)或多個(gè)稱為監(jiān)聽者的類取決於每一個(gè)組件,這些類包含事件處理器,用來(lái)接收和處理這個(gè)事件。採(cǎi)用這種方法,事件處理器可以安排在與源組件分離的對(duì)象中。監(jiān)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025高考數(shù)學(xué)考點(diǎn)剖析精創(chuàng)專題卷八-平面解析幾何【含答案】
- 二零二五年度股權(quán)轉(zhuǎn)讓與關(guān)聯(lián)交易信息披露協(xié)議3篇
- 2024年清遠(yuǎn)職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(kù)(頻考版)含答案解析
- 二零二五年防水材料企業(yè)戰(zhàn)略聯(lián)盟與合作開發(fā)合同3篇
- 第一章日本茶道歷史概述培訓(xùn)課件
- 人民幣系列知識(shí)完美版教學(xué)提綱
- 三章烯烴教程文件
- 2024年陽(yáng)高縣人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 2024年阜陽(yáng)市鼓樓醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 二零二五年度鈑金噴漆行業(yè)培訓(xùn)與認(rèn)證合同
- 2022年中醫(yī)館相關(guān)制度
- 異常反應(yīng)調(diào)查診斷ppt課件
- 涂料行業(yè)-立邦-立邦產(chǎn)品介紹-銷售( 145頁(yè))ppt課件
- 浙教版八年級(jí)下冊(cè)科學(xué)3.1空氣與氧氣(3課時(shí))(68張PPT)
- 道路減速帶減速模型分析
- 身體健康狀況自測(cè)表
- 50T汽車吊吊裝施工方案
- 陜西醫(yī)院目錄
- PID控制原理與調(diào)整方法
- 花鍵強(qiáng)度校核程序
- 塔吊附墻加節(jié)頂升安全技術(shù)交底
評(píng)論
0/150
提交評(píng)論