




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
《JAVA程序設(shè)計》授課教案第一章概述授課題目Java語言概述學(xué)時安排4學(xué)時課程設(shè)計Java發(fā)展Java開發(fā)平臺搭建JAVA程序分類應(yīng)用程序開發(fā)過程教學(xué)目的學(xué)生認(rèn)識Java發(fā)展歷史及崛起的原因、掌握J(rèn)ava開發(fā)平臺搭建、掌握J(rèn)ava應(yīng)用程序開發(fā)過程。教學(xué)要求1、了解Java發(fā)展及程序分類2、掌握J(rèn)ava開發(fā)平臺搭建3、掌握J(rèn)ava應(yīng)用程序開發(fā)過程教學(xué)重點(diǎn)掌握J(rèn)ava開發(fā)平臺搭建教學(xué)難點(diǎn)掌握J(rèn)ava開發(fā)平臺搭建授課類型理論課、實訓(xùn)課授課場地教室教學(xué)方式講授、演示、提問、討論教輔設(shè)備投影儀教學(xué)內(nèi)容引入我們交朋友時,除了要了解他的現(xiàn)在,還要了解他的過去,了解他的歷史。才能較全面、較深刻認(rèn)識他。在學(xué)習(xí)java的時候,我們也從它的歷史入手。本章我們將介紹Java的歷史、開發(fā)平臺搭建及開發(fā)過程。2、Java的發(fā)展1991年4月8日,從工作站起家的Sun公司為了把市擴(kuò)大到消費(fèi)電子產(chǎn)品,成立了一個專門的工作小組,著手代號為Green的項目,目的是開發(fā)一個分布式代碼系統(tǒng),讓人們可以把E-mail發(fā)送給電冰箱、電視機(jī)、空調(diào)等家用電器,對它們進(jìn)行控制,同它們進(jìn)行信息交流;這個系統(tǒng)還應(yīng)當(dāng)具有獨(dú)立于軟件平臺的特征、網(wǎng)絡(luò)操作功能強(qiáng)大,并容易被程序員們接受?;谶@一目標(biāo),自然應(yīng)當(dāng)首選當(dāng)時已經(jīng)廣為流行的C++進(jìn)行開發(fā)。但是C++太過復(fù)雜,安全性也差、網(wǎng)絡(luò)功能也達(dá)不到要求,最后不得不重新定義一套新的語言系統(tǒng),于是便有了Oak(意為橡樹)的問世。Oak一方面汲取了C++的有益成分,同時融進(jìn)了網(wǎng)絡(luò)應(yīng)用特性,可以稱得上是一種精巧而安全的語言了。可惜,Sun以它投標(biāo)一個自認(rèn)為比較合適的交互式電視項目時,卻一敗涂地,可憐的Oak幾乎陷入困境。恰巧這時,MarkArdreesen的Mosaic(馬賽克)和Netscape的巨大成功給Oak項目組成員帶來了新的希望,他們重整旗鼓,對Oak進(jìn)行了一次新的整合,并給了它一個據(jù)說來自幾位小組成員喝Java(爪哇)咖啡時靈機(jī)一動想到的新名字-----Java。接著,他們在Sun公司首席執(zhí)行官ScottMCnealy的支持下,用Java編制了HotJava瀏覽器,吹響了進(jìn)軍Internet的號角。Java由于與Internet的成功結(jié)合而很快風(fēng)靡全球,計算機(jī)產(chǎn)業(yè)的許多大公司購買了Java的許可證,包括IBM、Apple、DEC、Adobe、HP、Oracle,以及最不情原的Microsoft。眾多的軟件開發(fā)商開始支持Java的軟件產(chǎn)品。Java所特有的“writeonce,runanywhere”。的與平臺無關(guān)性的概念,與Internet的異構(gòu)網(wǎng)絡(luò)互聯(lián)一拍即合。它特別適合在網(wǎng)絡(luò)開發(fā)中使用,這一優(yōu)勢直威脅到Wintel聯(lián)盟的壟斷地位,使得它成為面向?qū)ο箝_發(fā)工具中潛力巨大的一員。3、Java的基本特點(diǎn)1)簡單性Java的簡單性指的是Java的語法簡單,Java實際上是C++的一個“純凈”版本。其中沒有頭文件、指針?biāo)惴?、結(jié)構(gòu)、聯(lián)合、操作符重載等較為復(fù)雜的部分。2)面向?qū)ο竺嫦驅(qū)ο笤谶^去30年已經(jīng)證明了自身的價值,如今很難想象一個現(xiàn)代編程語言不是面向?qū)ο蟮?。Java語言是一種面向?qū)ο蟮恼Z言,這是Java語言的重要特點(diǎn)。3)分布式Java的網(wǎng)絡(luò)能力強(qiáng)大而且易于使用。Java把打開套接字連接等繁瑣的網(wǎng)絡(luò)任務(wù)變得非常容易。4)健壯性Java編譯器會檢查出很多其它語言在運(yùn)行時刻才顯示出來的錯誤。5)跨平臺性Java對其基本數(shù)據(jù)類型的大小及其算法都做了明確的規(guī)定。例如:int類型在Java中始終是32位的整數(shù)。字符串在Java中用標(biāo)準(zhǔn)的Unicode格式存儲。4、Java開發(fā)環(huán)境的構(gòu)建1)JDK簡介SDK是SoftwareDevelopmentKit這幾個單詞的簡稱,是Sun公司發(fā)展的Java開發(fā)環(huán)境,是學(xué)習(xí)開發(fā)java程序最初使用的環(huán)境;讀者可以從1.4.2下載。2)JDK安裝①在http1.4.2地址下載JDK安裝包。②下載的文件是已經(jīng)被SUN公司打包的可執(zhí)行文件。用戶只需雙擊相應(yīng)的文件出現(xiàn)圖所示畫面開始安裝。用戶可以根據(jù)提示一步一步安裝完畢。3)環(huán)境變量設(shè)定設(shè)定環(huán)境變量的目的是為了能夠正常使用所安裝的Java開發(fā)包(JDK).主要包括兩個環(huán)境:Path和Classpath。Path稱之為路徑環(huán)境變量,用來指定Java開發(fā)包中的一些可執(zhí)行程序所在的位置Class稱之為類路徑環(huán)境變量,用來指定編譯時需要的類。設(shè)定Path環(huán)境變量步驟如下:第一步:右擊【我的電腦】,在彈出菜單中選擇【屬性】,出現(xiàn)如圖所示的【系統(tǒng)特性】對話框。第二步:選擇【高級】屬性頁,在該頁面中有一個【環(huán)境變量】按鈕,單擊進(jìn)入對話框,如圖所示。圖圖第三步:編輯Path環(huán)境變量在圖所示的系統(tǒng)變量中找到Path變量,然后單擊【編輯】按鈕,彈出圖所示對話框,讀者在【變量值】標(biāo)簽所示的編輯文本框的后面追加”;c:\\bin”(注意,引號不能作為值加入,c:\\bin是你安裝JDK的目錄,隨你安裝目錄不同而變化)(2)設(shè)置ClassPath環(huán)境變量的步驟第一步:同Path環(huán)境變量設(shè)置相同,請參照圖第二步:同Path環(huán)境變量設(shè)置相同,請參照圖第三步:編輯ClassPath環(huán)境變量在圖所示的Adiministrator用戶環(huán)境變量中ClassPath變量,然后單擊【編輯】按鈕,彈出圖所示對話框,讀者在【變量值】標(biāo)簽所示的編輯文本框的后面追加”;c:\\lib\.;.;d:\javaprogram”(注意,引號不能作為值加入,c:\\lib\.;是你安裝JDK的目錄,隨你安裝目錄不同而變化,”.”為當(dāng)前目錄,“d:\javaprogram”為Java文件存放目錄)圖5、Java應(yīng)用程序開發(fā)過程1)編寫源代碼例1.3.1/****功能:輸出HelloWorld!樣字符*@author黎紅星*@version**/publicclassHelloWorld{publicstaticvoidmain(String[]args){ "HelloWorld!");}}寫完代碼后,保存為2)編譯源代碼Java是解釋型語言,在解釋中只能識別字用Java編譯器編譯的節(jié)碼。在JDK中,Java的編譯器是。使用javac命令,就可以將Java源文件編譯成字節(jié)碼。對應(yīng)于Java源文件里的每一個類,Javac都將生成一個與此類類名相同但后綴為.class的字節(jié)碼文件,并將它們放在源文件的同一文件夾中。javac命令的一般格式為javac文件名.java3)運(yùn)行位于Java安裝目錄的bin子目錄中,稱為Java解釋器,用于對指定的字節(jié)碼進(jìn)行解釋并加以執(zhí)行。命令的一般格式如下:java文件名在本例中,其命令格式如下:javaHelloWorld討論、思考題、作業(yè):1.理解Java跨平臺性2.在Java環(huán)境配置中,path、pathclass變量的作用。程序分為哪幾類?寫一Java應(yīng)用程序,輸出”HelloWorld!”參考資料(含參考書、文獻(xiàn)等):Java程序開發(fā)教程清華大學(xué)出版社張基溫網(wǎng)站實施情況及分析:學(xué)生能較好掌握開發(fā)環(huán)境配置及應(yīng)用程序開發(fā)過程。第二章簡單數(shù)據(jù)類型、運(yùn)算符授課題目簡單數(shù)據(jù)類型、運(yùn)符算學(xué)時安排2學(xué)時課程設(shè)計常量和變量的概念各種數(shù)據(jù)類型的使用及轉(zhuǎn)換運(yùn)算符、表達(dá)式、優(yōu)先級、結(jié)合性等概念教學(xué)目的學(xué)生理解常量、變量的概念、運(yùn)算符、表達(dá)式、優(yōu)先級、結(jié)合性等概念;掌握程序結(jié)構(gòu)設(shè)計的三種基本結(jié)構(gòu),為以后深入學(xué)習(xí)打下基礎(chǔ)。教學(xué)要求1、理解常量、變量的概念、運(yùn)算符、表達(dá)式、優(yōu)先級、結(jié)合性等概念2、了解數(shù)據(jù)類型的使用及轉(zhuǎn)換教學(xué)重點(diǎn)常量、變量的概念、運(yùn)算符、表達(dá)式、優(yōu)先級、結(jié)合性等概念教學(xué)難點(diǎn)數(shù)據(jù)類型轉(zhuǎn)換、結(jié)合性授課類型理論課、實訓(xùn)課授課場地教室教學(xué)方式講授、演示、提問、討論教輔設(shè)備投影儀教學(xué)內(nèi)容引入人們學(xué)習(xí)開車時,首先要了解的是車子有哪些部件可以使用,哪些部件是車子保留不能使用以及每一個部件的作用。然而學(xué)習(xí)一門語言與學(xué)習(xí)車子類似,我們首先要了解有哪些數(shù)據(jù)類型可以使用、有哪些程序結(jié)構(gòu)在開發(fā)過程中使用。這章作為Java程序的入門章節(jié),我們將重點(diǎn)學(xué)習(xí)常量、變量的概念、運(yùn)算符、表達(dá)式、優(yōu)先級等基本概念以及程序設(shè)計的三種基本結(jié)構(gòu)。案例:現(xiàn)在有柑子5個,蘋果10個,請計算它們的總和并輸出結(jié)果。程序清單:publicclassFruit{publicstaticvoidmain(Stringargs[]){005c000a000c十進(jìn)制數(shù)形式,由數(shù)字和小數(shù)點(diǎn)組成,且必須有小數(shù)點(diǎn),如,.123,23.,。
2.科學(xué)計數(shù)法形式。如:123e3或123E3,其中e或E之前必須有數(shù),且e或E后面的指數(shù)必須為整數(shù)。實常數(shù)在機(jī)器中占64位,具有double型的值。對于float型的值,要在數(shù)字后加f或F,如12.3F,它在機(jī)器中占32位,且表示精度較低。(4)變量與常量變量:其值可以改變的量。如上面的numOranges、numApples等。學(xué)習(xí)變量時要注意的是變量的命名要符合標(biāo)識符的命名規(guī)則。變量的定義及變量的初始化等相關(guān)知識的講解。常量:其值不可改變的量是常量。注意常量的定義要用關(guān)鍵字final,如:finalintPI=3;則這里PI就是常量。在程序中如果試圖改變PI的值則系統(tǒng)會給出錯誤信息。(5)運(yùn)算符與表達(dá)式定義:運(yùn)算符又稱做操作符,是各種不同運(yùn)算操作的符號化表示分類:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、賦值運(yùn)算符和條件運(yùn)算符等算術(shù)運(yùn)算符:算術(shù)運(yùn)算符用于數(shù)值類型數(shù)據(jù)(整數(shù)或浮點(diǎn)數(shù))的運(yùn)算。注意:/、%、++、--四個特殊算術(shù)運(yùn)算符。賦值運(yùn)算:在賦值符“=”前加上其他運(yùn)算符,即構(gòu)成擴(kuò)展賦值運(yùn)算符,它將運(yùn)算的結(jié)果直接存到左邊的已命名變量中去。關(guān)系運(yùn)算符:關(guān)系運(yùn)算是用來比較兩個數(shù)的大小,并返回布爾型值true或false。布爾運(yùn)算符:布爾運(yùn)算符用于進(jìn)行布爾運(yùn)算,運(yùn)算的結(jié)果仍然是布爾型數(shù)值。布爾運(yùn)算符常與關(guān)系運(yùn)算符一起使用,作為流程控制語句的判斷條件。注意:真值表的運(yùn)用。&&”與“‖”是短路(Short-Circuit)邏輯運(yùn)算符&”與“|”是非短路邏輯運(yùn)算符(6)數(shù)據(jù)類型轉(zhuǎn)換①隱含類型轉(zhuǎn)換隱式轉(zhuǎn)換(自動類型轉(zhuǎn)換)允許在賦值和計算時由編譯系統(tǒng)按一定的優(yōu)先次序自動完成,通常,低精度類型到高精度的缺省類型轉(zhuǎn)換由系統(tǒng)自動轉(zhuǎn)換。例如:inti=20;longj=i;隱式轉(zhuǎn)換從低級到高級的轉(zhuǎn)換順序如下:byte→short、int、long、float、doubleshort→int、long、float、doublechar→int、long、float、doubleint→long、float、doublelong→float、doublefloat→double②顯示轉(zhuǎn)換顯示轉(zhuǎn)換是將高精度數(shù)據(jù)類型轉(zhuǎn)換到低精度數(shù)據(jù)類型,它是通過賦值語句來實現(xiàn)。(7)運(yùn)算符的優(yōu)先級別與結(jié)合方向優(yōu)先順序運(yùn)算符結(jié)合性1.[]()左/右2!,~,++,――,typeof,new,void,delete右3*,/,%左4+,-左5<<,>>,>>>左6<,<=,>,>=左7==,!=,===(嚴(yán)格等于),!==(嚴(yán)格不等于)左8&左9^左10|左11&&左12||左13?:左14=,+=,―=,*=,/=,%=,<<=,>>=,>>>=,&=,^=,|=右討論、思考題、作業(yè):1.計算兩個數(shù)的和、差、積、商2.調(diào)試并運(yùn)行下列程序,分析輸出結(jié)果publicclassDatetype{publicstaticvoidmain(Stringargs[]){bytea=30,b;doublec=,d;inti,k=100;d=a;b=(byte)k;i=(int)c;調(diào)試并運(yùn)行下列程序,分析輸出結(jié)果import.*;publicclassDeclareVarVariable{publicstaticvoidmain(Stringargs[]){byteb=043;shorts=0x43;inti=100;longl=0xffffL;charc='c';floatf=3.14F;doubled=;booleank=true;StringS="Thisisastring!";"字節(jié)型變量b="+b);"短整型變量s="+s);"整型變量i="+i);"長整型變量l="+l);"字符型變量c="+c);"浮點(diǎn)型變量f="+f);"雙精度變量d="+d);"布爾型變量k="+k);"字符串類對象S="+S);}}參考資料(含參考書、文獻(xiàn)等):Java程序開發(fā)教程清華大學(xué)出版社張基溫網(wǎng)站實施情況及分析:學(xué)生能較好分析出上述思考題的結(jié)果,學(xué)習(xí)效果較好。java面向?qū)ο蠹夹g(shù)概述授課題目JAVA面向?qū)ο蠹夹g(shù)概述學(xué)時安排3課程設(shè)計捕獵程序教學(xué)目的掌握面向?qū)ο蠡舅枷肱c方法教學(xué)要求掌握面向?qū)ο蟮幕靖拍罱虒W(xué)重點(diǎn)面向?qū)ο笏枷牒兔嫦蜻^程的思想有什么不同?面向?qū)ο笾械闹匾拍罱虒W(xué)難點(diǎn)面向?qū)ο笏枷牒兔嫦蜻^程思想的區(qū)別授課類型理論課授課場地教室教學(xué)方式講授、演示、提問、討論教輔設(shè)備投影儀教學(xué)內(nèi)容捕獵游戲假如獵人在森林里面打獵,那么有各種各樣的獵物存在。應(yīng)當(dāng)怎樣用程序來表示獵人注意到的以及抓到的獵物?面向過程的寫法我們是如何表示的?思考:應(yīng)當(dāng)怎樣用程序來表示獵人注意到的以及抓到的獵物?在面向?qū)ο蟮脑O(shè)計思想當(dāng)中我們應(yīng)當(dāng)怎樣來定義這些動物?是否需要對每一種動物都分別重復(fù)的定義?又怎么表示打獵的獵人?面向?qū)ο竺嫦驅(qū)ο蠹夹g(shù)是一種軟件開發(fā)和程序設(shè)計技術(shù)。面向?qū)ο蠓椒嫦驅(qū)ο蠓椒ㄊ且环N運(yùn)用對象,類,封裝,繼承,多態(tài)和消息等概念來構(gòu)造,測試,重構(gòu)軟件的方法。對象對象是封裝了數(shù)據(jù)和操作的程序塊。類類是具有相似內(nèi)部狀態(tài)和運(yùn)動規(guī)律的實體(對象)的集合。面向?qū)ο蟪绦蛟O(shè)計的三大特點(diǎn)封裝性通過對象的封裝,實現(xiàn)了模塊化和信息隱藏;通過對類的成員施以一定的訪問權(quán)限,實現(xiàn)了類中成員的信息隱藏。2.繼承性繼承是可以讓某個類型的對象獲得另一個類型的對象的屬性的方法。它支持按紀(jì)分類的概念。3.多態(tài)性多態(tài)性體現(xiàn)在兩個方面:由方法重載實現(xiàn)的靜態(tài)多態(tài)性(編譯時多態(tài))和方法覆蓋實現(xiàn)的動態(tài)多態(tài)性(運(yùn)行時多態(tài))。討論、思考題、作業(yè):思考:面向?qū)ο缶幊淘诰幊趟枷肷蠈γ嫦蜻^程的思想做了什么改變?參考資料:《java2入門基礎(chǔ)》編著:IvorHorton,中國電力出版社《Java語言程序設(shè)計》第2版編著:殷兆麟等,高等教育出版社實施情況及分析:學(xué)生帶著問題進(jìn)入學(xué)習(xí)過程當(dāng)中,每次學(xué)習(xí)都能夠解決一個問題,并在上機(jī)實踐中加以運(yùn)用。學(xué)習(xí)積極性高,學(xué)習(xí)狀況良好。類、對象與封裝授課題目類、對象與封裝學(xué)時安排2課程設(shè)計捕獵程序教學(xué)目的類、對象與封裝的基本概念教學(xué)要求掌握類的聲明,定義,類和對象的關(guān)系以及簡單操作。教學(xué)重點(diǎn)類與對象類的聲明,定義教學(xué)難點(diǎn)類的聲明,定義授課類型理論課授課場地教室教學(xué)方式講授、演示、提問、討論教輔設(shè)備投影儀教學(xué)內(nèi)容類和對象的關(guān)系類實例化就成為對象。類是具有相同屬性的對象的集合。具體實現(xiàn)最開始給出的實例。1.類聲明 class類名[extends父類名][implements接口列表]{類體}2.類中含有兩種成員:成員變量,成員方法。成員變量的聲明方式如下:public|protected|private][static][final]type變量名;建子類格式:classSubClassextendsSuperClass{…}2.注意:子類不能繼承父類中訪問權(quán)限為private的成員變量和方法。Java不支持多重繼承,即一個類從多個超類派生的能力。3.思考:我們是否還需要像面向過程的方法一樣對每一種動物都重復(fù)的進(jìn)行定義?如果采用繼承的方法能夠帶來什么樣的改變4.實現(xiàn)動物類當(dāng)中的貓和狗兩個子類,他們都具有父類動物類的屬性。討論、思考題、作業(yè):1、實現(xiàn)捕獵游戲中的貓和狗兩個子類,由動物類繼承而來參考資料:《java2入門基礎(chǔ)》編著:IvorHorton,中國電力出版社《Java語言程序設(shè)計》第2版編著:殷兆麟等,高等教育出版社實施情況及分析:學(xué)生帶著問題進(jìn)入學(xué)習(xí)過程當(dāng)中,每次學(xué)習(xí)都能夠解決一個問題,并在上機(jī)實踐中加以運(yùn)用。學(xué)習(xí)積極性高,學(xué)習(xí)狀況良好。異樣處置授課題目異常處理學(xué)時安排4課程設(shè)計主要介紹單元設(shè)計的要求教學(xué)目的Java異常處理機(jī)制講授異常捕捉、異常處理、清理異常的方法教學(xué)要求理解異常的概念了解異常類及其層次關(guān)系熟練掌握常用的標(biāo)準(zhǔn)Java異常類熟練掌握拋出異常、聲明拋出異常、定義異常的方法創(chuàng)建自定義的異常類型教學(xué)重點(diǎn)1、Java異常處理機(jī)制2、掌握拋出異常、聲明拋出異常、定義異常的方法教學(xué)難點(diǎn)1、Java異常處理機(jī)制2、掌握拋出異常、聲明拋出異常、定義異常的方法授課類型理論課授課場地教室教學(xué)方式講授、演示、提問、討論教輔設(shè)備投影儀教學(xué)內(nèi)容引入異常的概念通過程序演示數(shù)學(xué)計算中除數(shù)為了0時產(chǎn)生的錯誤信息,引入拋出異常的概念。我們都希望自己的程序不包含任何錯誤,也都希望我們的程序要訪問的資源總是可用。然而現(xiàn)實的情況可能和所期望的恰恰相反:程序中包含有“bug”,在運(yùn)行時會出現(xiàn)各種錯誤;要訪問的資源不存在或是存在但不能訪問。Java提供了強(qiáng)有力的異常處理機(jī)制來應(yīng)對可能出現(xiàn)的各種異常情況。本章重點(diǎn)講解Java異常處理機(jī)制及如何處理拋出異常、聲明拋出異常、定義異常的方法。通過提問(討論式、啟發(fā)式提問)和比較歸納,處理異常的必要性和重要性作為一名合格優(yōu)秀的程序員,必須認(rèn)識到在程序中處理異常的重要性。Java運(yùn)用面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把各種不同的異常進(jìn)行分類,并提供了良好的接口。這種機(jī)制為復(fù)雜程序提供了強(qiáng)有力的控制方式。同時這些異常代碼與“常規(guī)”代碼的分離,增強(qiáng)了程序的可讀性,編寫程序時也顯得更為靈活。那么,我們采用錯誤代碼和異常處理相結(jié)合的方式到底有哪些優(yōu)越性呢?把錯誤代碼與常規(guī)代碼分開可以在catch中傳播錯誤信息可以對錯誤類型分組方便定位錯誤,維護(hù)要寫出友好,健壯的程序,靈活地運(yùn)用Java程序語言的異常處理機(jī)制,須從以下幾個角度來認(rèn)識異常:異常類及分類、捕獲異常、處理異常及拋出異常。異常類及分類在Java中,異常也是被視為對象,所有的異常都繼承于Throwable類,Throwable類中有一個String類型的變量,它保存的是異常對象的一些說明信息,該信息可以用來識別所拋出的異常。Throwable類分別有兩個子類,分別是:Exception類和Error類,但對于軟件開發(fā)者來說,大多數(shù)遇到的異常對象都屬于Exception類及其相應(yīng)的子類,這是因為Exception類型的異常是由編寫的代碼所引起的,而Error類型的異常則是由Java虛擬機(jī)自身或者虛擬機(jī)與代碼之間的連接引起的。以下給出一個簡化的Java異常繼承關(guān)系圖。ErrorErrorThrowableExceptionIOExceptionRuntimeException用戶自定義異常Exception類的子類的分類:Exception類的子類可以分為兩種類弄,即checked和unchecked。其中unchecked類型的異常是指那些沒有被檢查出來的異常,它的拋出一般是由代碼編寫者的疏忽大意引起的。checked類型的異常指的是那些代碼編寫沒有問題,但是在代碼的實際運(yùn)行期間,由于代碼所處環(huán)境的影響而拋出的異常。學(xué)習(xí)異常處理關(guān)鍵字:try、catch、finally、throws和throw。1)、通過對比分析程序和,引入try——catch語句,并闡述Java中異常的處理機(jī)制。2)、通過走讀中的代碼,引導(dǎo)學(xué)生了解try——catch語句的執(zhí)行步驟。3)、如果程序出現(xiàn)非常嚴(yán)重的異常而導(dǎo)致程序完全退出,勢必會給系統(tǒng)帶來一些不確定的因素,Java提供了finally語句,不管拋出異常與否,都必須執(zhí)行finally語句塊,通常在finally語句中可以進(jìn)行資源的清除工作,如關(guān)閉打開的文件等。分析程序代碼,引出throws和throw異常關(guān)鍵字,并闡述其用法:4)、throws總是出現(xiàn)在一個函數(shù)頭中,用來標(biāo)明該成員函數(shù)可能拋出的各種異常。5)、throw總是出現(xiàn)在函數(shù)體中,異常并不是系統(tǒng)出錯產(chǎn)生,而是人為地拋出的異常。程序會在throw語句后立即終止執(zhí)行。創(chuàng)建自定義的異常類型當(dāng)程序員為提供一些特定的功能用Java類時,往往需要保證類之間有良好的關(guān)系,而且類之間的接口易于理解和實現(xiàn)。對于異常類一樣,可以定義新的異常類。創(chuàng)建自己的異常類更便于維護(hù)和管理。通常采用Exception作為異常類的父類。通過再次分析程序代碼,分析自定義異常拋出處理過程。知識點(diǎn)講解及程序代碼分析1)、源代碼publicclassExceptionExam{publicstaticvoidmain(String[]args){inti=0;i=3/i;}}2)、源代碼publicclassExceptionExam1{publicstaticvoidmain(Stringargs[]){inti,a;try{;}}staticvoidtestRuntime()throwsMyArithException{try{為了實現(xiàn)交互,必須進(jìn)行事件的處理.問題提問GUI中的容器有哪些類型?AWT中的組件都有那些?知識點(diǎn)講解用戶界面(UserInterface),簡稱UI,Java的圖形用戶界面的最基本組成部分是組件(Component),組件是一個可以以圖形化的方式顯示在屏幕上并能與用戶進(jìn)行交互的對象,例如一個按鈕,一個標(biāo)簽等。組件不能獨(dú)立地顯示出來,必須將組件放在一定的容器中才可以顯示出來。本節(jié)主要介紹如何創(chuàng)建各種UI組件。案例:創(chuàng)建用戶登陸界面現(xiàn)代的用戶傾向于使用可以由鼠標(biāo)方便操作的圖形用戶界面(GUI-GraphicalUserInterface)程序。本章的內(nèi)容就是介紹如何使用JFC(JavaFoundationClass)中的Swing組件(Component)來構(gòu)建GUI應(yīng)用程序用戶界面設(shè)計原則使用圖形界面GUI(GraphicsUserInterface)字符界面—采用命令行方式與用戶交互。圖形界面—用多種媒體顯示信息,用直觀、方便的GUI標(biāo)準(zhǔn)組件來接收命令。控制權(quán)在用戶界面與操作的風(fēng)格一致性寬容(容錯)性簡潔與美觀并重界面元素容器是用來組織其他界面成分和元素的單元??梢孕纬扇萜鞯膶哟?,構(gòu)筑復(fù)雜結(jié)構(gòu)Window(Frame、Applet、Dialog)組件是圖形用戶界面的基本單位,它里面不再包含其他的成分。GUI組件是圖形用戶界面標(biāo)準(zhǔn)化的結(jié)果。GUI組件的作用是完成與用戶的交互。用戶自定義成分文字、圖形、圖象…不能像標(biāo)準(zhǔn)組件一樣被系統(tǒng)識別和承認(rèn),只起裝飾作用。不能響應(yīng)用戶的動作,不具有交互功能。Containers容器組件Window——不需要其他組件支撐,獨(dú)立顯示。FrameDialog–沒有菜單條,不能改變大小Panel——必須放在Window組件中(或Web瀏覽器窗口)才能顯示。它為一矩形區(qū)域,在其中可擺放其他組件,可以有自己的布局管理器?;痉椒╝dd(Componentcomp)將指定組件放到容器中add(Componentcomp,intindex)remove(Component
comp)刪除指定組件setLayout(LayoutManager
mgr)設(shè)置容器布局Component類可顯示在屏幕上的圖形對象,可與用戶交互。方法:add(PopupMenu
popup)加一彈出菜單addFocusListener(FocusListener
l)將發(fā)生在本組件上的事件注冊給監(jiān)聽者,以進(jìn)行事件處理。setSize(int
width,int
height)設(shè)置組件尺寸paint(Graphics
g)重畫組件setFont(Font
f)設(shè)置組件字體setBackground(Color
c)設(shè)置組件背景色setForeground(Color
c)設(shè)置組件前景色Font類設(shè)計字體顯示效果Fontmf=newFont(String字體,int風(fēng)格,int字號);字體:TimesRoman,Courier,Arial等風(fēng)格:三個常量,,字號:字的大?。ò鯏?shù))設(shè)置組件當(dāng)前使用的字體:setFont(Fontfn)獲取組件當(dāng)前使用的字體:getFont()Color類構(gòu)造函數(shù)1(設(shè)置顏色)Colorc=newColor(int
red,int
green,int
blue)范圍:0~255newColor(200,200,200)newColor(255,0,100)構(gòu)造函數(shù)2Colorc=newColor(intrgb)蘭色:0~7位綠色:8~15位紅色:16~23位顏色常量值publicstaticfinalColorblack,,,Color.red常用組件1.標(biāo)識(Label)語法格式:Label(Strings)功能:構(gòu)造一個顯示字符串s的標(biāo)識。2.按鈕(Button)語法格式:Button(Strings)功能:構(gòu)造一個以字符串s為標(biāo)識的按鈕。
3.復(fù)選框(Checkbox)語法格式:Checkbox(Strings)功能:構(gòu)造一個以字符串s為標(biāo)識的復(fù)選框條目,未被選中。4.單選按鈕(RadioButtons)語法格式:CheckboxGroup()功能:構(gòu)造一個條目組。5.選擇菜單(ChoiceMenu)語法格式:Choice()功能:構(gòu)造一個選擇菜單。說明:構(gòu)造完之后,再使用Choice類中的addItem方法加入菜單的條目。6.列表框(ScrollingList)語法格式:List(intn,booleanb)功能:構(gòu)造一個有n個列表項的列表框,并根據(jù)b的值決定是否允許多選。7.單行文本輸入框(TextField)語法格式:TextField(inti)功能:構(gòu)造一個字符串長度為i單行文本輸入框8.多行文本輸入框(TextArea)語法格式:TextArea(inti,intj)功能:構(gòu)造一個多行文本輸入框,行數(shù)為i,列數(shù)為j討論、思考題、作業(yè):1.簡答題(1)UI組件包括哪些?(2)寫出創(chuàng)建一個指定長度、指定初始內(nèi)容的單行文本輸入框的語句。(3)簡述創(chuàng)建復(fù)選按鈕時和創(chuàng)建單選按鈕時的區(qū)別。2.操作題試設(shè)計一個學(xué)校的學(xué)生學(xué)籍資料錄入界面,內(nèi)容自定,盡量使用各種UI組件。參考資料(含參考書、文獻(xiàn)等):實施情況及分析:良好GUI編程基礎(chǔ)------布局治理授課題目GUI編程基礎(chǔ)------布局管理學(xué)時安排2學(xué)時課程設(shè)計本講主要講述GUI界面設(shè)計的事件處理教學(xué)目的掌握GUI中的事件處理教學(xué)要求學(xué)會GUI中的事件處理教學(xué)重點(diǎn)事件處理教學(xué)難點(diǎn)事件處理過程授課類型理論課授課場地教室教學(xué)方式講授、演示、提問、討論教輔設(shè)備投影儀教學(xué)內(nèi)容1、案例下面是利用不同的UI組件所創(chuàng)建的某公司的員工信息錄入界面的案例。如下圖所示2、分析:本按例是一個簡單的UI設(shè)計,同學(xué)們可以看的出來,界面看起來很混亂,java中為GUI設(shè)計準(zhǔn)備了布局管理和事件處理等操作3、提問如何使界面條例清晰?4、知識點(diǎn)講解 為了實現(xiàn)跨平臺的特性并且獲得動態(tài)的布局效果,Java將窗體內(nèi)的所有組件安排給一個“布局管理器”負(fù)責(zé)管理,當(dāng)窗口移動或調(diào)整大小后組件如何變化等功能授權(quán)給對應(yīng)的窗體布局管理器來管理。AWT提供三種最基本的布局管理器可供選擇:
1.流式布局管理器(FlowLayout);2.網(wǎng)格布局管理器(GridLayout);3.邊框布局管理器(BorderLayout)修改前面的代碼使界面看起來美觀,簡潔,整齊容器的組件布局布局管理器(layoutmanager)負(fù)責(zé)確定組件在容器中的位置和大小。調(diào)用容器的setLayout(布局管理器對象)方法,為容器指定某種布局管理器的一個對象。當(dāng)容器需要定位組件和確定組件大小時,就會給布局管理器對象發(fā)消息,讓它完成該項工作。直接管理組件調(diào)用容器的setLayout(null)方法,關(guān)閉布局管理器。調(diào)用每一個組件的setLocation()方法決定組件位置。調(diào)用每一個組件的setSize()方法決定其大小。直接管理組件將失去平臺無關(guān)性。布局管理器種類FlowLayout:組件在一行中從左至右水平排列,排滿后折行BorderLayout:北、南、東、西、中GridLayout:以行和列的網(wǎng)格形式安排組件GridBagLayout:更復(fù)雜、功能更強(qiáng)的網(wǎng)格布局CardLayout:每一個組件作為一個卡片,容器僅顯示多個卡片中的某一個確定容器布局缺省的布局管理器Window、Frame、Dialog——BorderLayoutPanel、Applet——FlowLayout:選擇布局管理器的方法建立布局管理器類的對象利用容器的setLayout為容器指定布局(即指定一個布局管理器的對象)例:將myFrame布局設(shè)定為FlowLayout類型(newFlowLayout());FlowLayout布局管理器構(gòu)造函數(shù):FlowLayout();FlowLayout(intalign,inthgap,intvgap);align:對齊方式:LEFTCENTERRIGHThgap:組件水平間距(象素)vgap:組件垂直間距無參數(shù)的構(gòu)造函數(shù)創(chuàng)建的FlowLayout對象,其對齊方式為CENTER居中方式,組件間的橫縱間距都為5個像素。Framef=newFrame("FlowLayout");(400,300);CardLayout布局管理器將每一個組件視為一張卡片,同一時刻只能顯示一個組件。setLayout(newCardLayout())CardLayout方法(按序指定組件)first(Container
parent)last(Container
parent)previous(Container
parent)next(Container
parent)CardLayout方法(按名顯示組件)addLayoutComponent(String
name,Component
c)show(Container
parent,String
name)討論、思考題、作業(yè):1。簡答題(1)常用的布局管理器有哪些?(2)簡述3種布局版面之間的區(qū)別和它們各自的特點(diǎn)2.操作題參考上機(jī)實踐中的例子,設(shè)計一個使用邊框布局管理的學(xué)生資料錄入界面,內(nèi)容自定。參考資料(含參考書、文獻(xiàn)等):實施情況及分析:良好GUI編程基礎(chǔ)------事件處置授授課題目GUI編程基礎(chǔ)------事件處理學(xué)時安排2學(xué)時課程設(shè)計本講主要講述GUI界面設(shè)計的事件處理教學(xué)目的掌握GUI中的事件處理教學(xué)要求學(xué)會GUI中的事件處理教學(xué)重點(diǎn)事件處理教學(xué)難點(diǎn)事件處理過程授課類型理論課授課場地教室教學(xué)方式講授、演示、提問、討論教輔設(shè)備投影儀教學(xué)內(nèi)容案例本按例要求模擬計算器,如下圖所示分析:本案例子是界面布局的一個復(fù)習(xí),加入新的內(nèi)容事件處理,點(diǎn)擊加法運(yùn)算,怎么會計算機(jī)直接運(yùn)算,通過本講的學(xué)習(xí),要掌握事件源,事件處理過程,事件分類.預(yù)習(xí)提問什么事件源?事件的處理過程是什么?常用的事件都有哪些,他們所對應(yīng)的事件源有哪些?知識點(diǎn)講解 在系統(tǒng)中有某些我們所關(guān)心的事情,如:鼠標(biāo)移動了,用戶按下了某個按鍵……等發(fā)生了,然后系統(tǒng)便通知我們?nèi)ヌ幚磉@些事情。這樣的概念在一般采用窗口用戶界面環(huán)境的操作系統(tǒng)中,是十分常見的。而通過這些事件,AWT組件與用戶或AWT構(gòu)件之間就可以進(jìn)行某種通訊。本節(jié)將介紹鼠標(biāo)和鍵盤的各種事件。案例:計算器事件及處理機(jī)制事件類ActionEvent類:存放這個事件的細(xì)節(jié)。()返回事件發(fā)生的對象(名)()返回按扭名。ActionListener接口publicvoidactionPerformed(ActionEvente)圖形用戶界面例import.*;importclassa{publicstaticvoidmain(Stringargs[]){MyFrameform1=newMyFrame();}}classMyFrameextendsFrame{MyFrame(){super("窗口標(biāo)題");setSize(200,100);setFont(newFont("TimesRoman",,20));setLayout(newFlowLayout());Buttonb=newButton("close");add(b);(newBprocess());setVisible(true);}}classBprocessimplementsActionListener{publicvoidactionPerformed(ActionEvente){(0);}}監(jiān)聽者類某個類可以兼職也可以專職做這件事(實現(xiàn)監(jiān)聽者接口)。一個類若實現(xiàn)一個接口,必須實現(xiàn)接口的全部方法。例如:ActionListener接口只有一個方法:voidactionPerformed(ActionEvente)實現(xiàn)接口的類可以是:一般類內(nèi)部類匿名類事件處理有關(guān)問題1)有哪些事件類?2)每個事件類的監(jiān)聽者接口?3)每個監(jiān)聽者接口規(guī)定的方法?4)多方法的監(jiān)聽者接口的適配器(實現(xiàn)接口的抽象類)是什么?5)組件的事件委托(注冊)方法?窗口事件關(guān)閉窗口框時引發(fā)WindowEvent事件委托addWindowListener(newWclose());定義監(jiān)聽者類classWcloseimplementsWindowListener{ publicvoidwindowClosing(WindowEvente){ (0);}WindowListener類有7個方法,必須都實現(xiàn)WindowAdapter接收窗口事件的抽象適配器類,用空內(nèi)容有WindowListener接口的所有方法classWcloseextendsWindowAdapter{…}ActionEvent事件引發(fā)原因:單擊按扭,雙擊列表框中選項,選擇菜單項,文本框中的回車事件監(jiān)聽接口:ActionListener接口方法:actionPerformed(ActionEvente)組件注冊該事件方法:addActionListener(監(jiān)聽者)TextEvent事件引發(fā)原因:文本框或文本區(qū)域內(nèi)容改變事件監(jiān)聽接口:TextListener接口方法:textValueChanged(TextEvent
e)組件注冊該事件方法:addTextListener(監(jiān)聽者)ItemEvent事件引發(fā)原因:改變列表框中的選中項改變復(fù)選框選中狀態(tài)改變下拉選單的選中項事件監(jiān)聽接口:ItemListener接口方法:itemStateChanged(ItemEvent
e)組件注冊該事件方法:addItemListener(監(jiān)聽者)AdjustmentEvent事件引發(fā)原因:操作滾動條改變滑塊位置事件監(jiān)聽接口:AdjustmentListener接口方法:adjustmentValueChanged(AdjustmentEvent
e)組件注冊該事件方法:addAdjustmentListener(監(jiān)聽者)KeyEvent事件引發(fā)原因:敲完鍵(KEY-TYPED)按下鍵(KEY-PRESSED)釋放鍵(KEY-RELEASE)事件監(jiān)聽接口:KeyListener接口方法:keyPressed(KeyEvent
e)鍵已被按下時調(diào)用keyReleased(KeyEvent
e)鍵已被釋放時調(diào)用keyTyped(KeyEvent
e)鍵已被敲完時調(diào)用KeyEvent方法:charch=();事件監(jiān)聽適配器(抽象類)KeyAdapter組件注冊該事件方法:addKeyListener(監(jiān)聽者)MouseEvent事件引發(fā)原因:(鼠標(biāo)作用在一個組件上)鼠標(biāo)事件:鼠標(biāo)鍵按下,鼠標(biāo)鍵抬起,單擊鼠標(biāo),鼠標(biāo)光標(biāo)進(jìn)入一個組件,鼠標(biāo)光標(biāo)離開一個組件。鼠標(biāo)移動事件:鼠標(biāo)移動,鼠標(biāo)拖動鼠標(biāo)事件監(jiān)聽接口1:MouseListener接受鼠標(biāo)事件該接口方法:mouseClicked(MouseEvent
e)mouseEntered(MouseEvent
e)鼠標(biāo)光標(biāo)進(jìn)入一個組件mouseExited(MouseEvent
e)鼠標(biāo)光標(biāo)離開一個組件鼠標(biāo)事件監(jiān)聽適配器(抽象類)MouseAdapter鼠標(biāo)事件監(jiān)聽接口2:MouseMotionListener接受鼠標(biāo)移動事件該接口方法:mouseMoved(MouseEvent
e)鼠標(biāo)光標(biāo)在組件上移動mouseDragged(MouseEvent
e)用鼠標(biāo)拖動一個組件鼠標(biāo)移動事件監(jiān)聽適配器MouseMotionAdapter組件注冊鼠標(biāo)事件方法:addMouseListener(監(jiān)聽者)組件注冊鼠標(biāo)移動事件方法:addMouseMotionListener(監(jiān)聽者)MouseEvent方法()=1單擊=2雙擊Point()取鼠標(biāo)光標(biāo)位置Int()int()取鼠標(biāo)光標(biāo)位置()=鼠標(biāo)左鍵=鼠標(biāo)右鍵WindowEvent事件引發(fā)原因:有關(guān)窗口操作引發(fā)的事件事件監(jiān)聽接口WindowListener接口方法windowActivated(WindowEvent
e)激活窗口windowClosed(WindowEvent
e)調(diào)用dispose方法關(guān)閉窗口后。windowClosing(WindowEvent
e)試圖利用窗口關(guān)閉框關(guān)閉窗口windowDeactivated(WindowEvent
e)本窗口成為非活動窗口windowDeiconified(WindowEvent
e)窗口從最小化恢復(fù)為普通窗口windowIconified(WindowEvent
e)窗口變?yōu)樽钚』瘓D標(biāo)windowOpened(WindowEvent
e)當(dāng)窗口第一次打開成為可見時接口適配器WindowAdapter注冊事件方法addWindowListenerFocusEvent事件引發(fā)原因:組件獲得焦點(diǎn)組件失去焦點(diǎn)事件監(jiān)聽接口FocusListener接口方法:focusGained(FocusEvent
e)組件獲得焦點(diǎn)時調(diào)用focusLost(FocusEvent
e)組件失去焦點(diǎn)時調(diào)用接口適配器:FocusAdapter組件注冊該事件方法:addFocusListenerTextEvent事件引發(fā)原因:當(dāng)組件(如文本框)文本改變時引發(fā)事件監(jiān)聽接口:TextListener接口方法:textValueChanged(TextEvent
e)組件注冊該事件方法:addTextListenerComponentEvent事件引發(fā)原因:當(dāng)組件移動、改變大小、改變可見性時引發(fā)事件監(jiān)聽接口:ComponentListener接口方法:componentHidden(ComponentEvente)組件隱藏componentMoved(ComponentEvent
e)組件移動componentResized(ComponentEvent
e)組件改變大小componentShown(ComponentEvent
e)組件變?yōu)榭梢娊涌谶m配器ComponentAdapter組件注冊該事件方法:addComponentListenerContainerEvent事件引發(fā)原因:當(dāng)容器內(nèi)增加或移走組件時引發(fā)事件監(jiān)聽接口:ContainerListener接口方法componentAdded(ContainerEvent
e)容器內(nèi)加入組件componentRemoved(ContainerEvent
e)從容器中移走組件接口適配器ContainerAdapter容器注冊該事件方法:addContainerListener討論、思考題、作業(yè):1.簡答題(1)簡述在Java中關(guān)于鼠標(biāo)的事件主要有哪幾種?(2)列出代表鍵盤上的四個方向鍵的類變量。2.操作題試設(shè)計一個程序,模擬光標(biāo)的移動。(提示:用字符“_”代表光標(biāo),利用鍵盤上的方向鍵事件來控制字符“_”的坐標(biāo)變化,實現(xiàn)上下左右移動的效果。)參考資料(含參考書、文獻(xiàn)等):實施情況及分析:良好GUI編程基礎(chǔ)------高級GUI授課題目GUI編程基礎(chǔ)------高級GUI學(xué)時安排2學(xué)時課程設(shè)計本講主要講述GUI中的Swing的內(nèi)容,包括JTable,JTree,JMenu,密碼框教學(xué)目的掌握J(rèn)Table,JTree,JMenu,密碼框的使用教學(xué)要求學(xué)會使用JTable,JTree,JMenu,密碼框的使用教學(xué)重點(diǎn)JTable,JTree,JMenu,密碼框教學(xué)難點(diǎn)JTree事件處理過程授課類型理論課授課場地教室教學(xué)方式講授、演示、提問、討論教輔設(shè)備投影儀教學(xué)內(nèi)容案例本按例學(xué)生信息管理系統(tǒng)界面,如下圖所示分析:本例子是為了進(jìn)行我們學(xué)生成績管理系統(tǒng)進(jìn)行界面設(shè)計,該界面采用的是GUI中的Swing設(shè)計的,包JMenu,JTtable,JTree,通過該講的學(xué)習(xí),重點(diǎn)讓大家能夠熟練的使用Swing中的組件預(yù)習(xí)提問菜單中有那些選項,它們之間的關(guān)系是什么?JTree中事件如何進(jìn)行處理?知識點(diǎn)講解 常用組件標(biāo)簽(JLabel)標(biāo)簽(JLabel)通常是用來標(biāo)識另外一個組件的含義。以在標(biāo)簽上顯示文字、圖象或是文字圖象的組合。 JLabellabText=newJLabel(“文本標(biāo)簽”); ("文本標(biāo)簽"); ImageIconicon=newImageIcon("image/");JLabellabImage=newJLabel(icon);(aIcon);密碼框密碼框?qū)嶋H上是一種特殊類型的文本框,用戶可以向其中輸入文本并加以編輯。和文本框不同的是,向密碼框中輸入文本時,顯示的不是實際輸入的文本,而是特殊的回顯字符(通常是'*')??梢允褂胹etEchoChar(charc)方法來改變?nèi)笔〉幕仫@字符。需要注意的是,取得文本框中的文本時,使用方法getText(),該方法返回的是一個String類型的對象;而要取得密碼框中的文本,使用方法getPassword(),該方法返回的是一個char數(shù)組。例如,創(chuàng)建了一個密碼框:JPasswordFieldtxtPwd=newJPasswrodField(20);設(shè)定該密碼框的回顯字符為'#':('#');取得密碼框中的內(nèi)容:char[]pwd=();也可以方便地將char數(shù)組轉(zhuǎn)化為String類型的對象:StringpwdStr=newString());菜單菜單也是一種常用的GUI組件,菜單采用的是一種層次結(jié)構(gòu),最頂層是菜單欄(JMenuBar);在菜單欄中可以添加若干個菜單(JMenu),每個菜單中又可以添加若干個菜單選項(JMenuItem)、分隔線(Separator)或是菜單(稱之為子菜單)見Tree_menu彈出式菜單彈出式菜單(JPopupMenu)是一種特殊的菜單,和普通菜單的區(qū)別在于其不固定在菜單欄中,而是可以四處浮動的。下面的語句創(chuàng)建了一個彈出式菜單:JPopupMenupopup=newJPopupMenu();與向菜單中添加菜單選項、分隔線或是子菜單一樣,使用同樣的方法向彈出式菜單中添加內(nèi)容。用戶可以通過點(diǎn)擊某個特殊的鼠標(biāo)鍵(稱為觸發(fā)器)來觸發(fā)彈出式菜單。例如,在Windows操作系統(tǒng)上,一般是鼠標(biāo)右鍵。為此,應(yīng)用程序中應(yīng)該監(jiān)聽彈出式菜單的父組件的鼠標(biāo)事件:當(dāng)有鼠標(biāo)事件發(fā)生時,使用isPopupTrigger()方法來判斷是否為彈出式菜單的觸發(fā)器;如果是,則在該父組件上顯示出彈出式菜單。同樣以圖6.4.13所示意的彈出式菜單為例,該菜單的父組件是一個顯示公司徽標(biāo)的標(biāo)簽labLogo,當(dāng)用戶在該標(biāo)簽上右擊鼠標(biāo)時,彈出式菜單出現(xiàn)。下面的代碼實現(xiàn)了上述功能:(newMouseAdapter(){publicvoidmouseReleased(MouseEvente){If()){(labLogo,(),()); } } });工具條有些菜單選項的使用頻率較高,每次使用都要打開菜單,效率較低。為此,可以在工具條(JToolBar)中提供與這些菜單選項相對應(yīng)快捷按鈕,以提高用戶的效率。工具條中通常是一些帶有圖標(biāo)的按鈕(如圖6.4.14所示),當(dāng)然也可以是其它類型的GUI組件,例如組合框等等。通常,工具條所提供的操作是菜單所能提供操作的一個子集,目的是能夠快速訪問那些使用頻率高的操作。工具條通常被置于布局為BorderLayout的容器中。在例6.4.8中,工具條被置于布局為BorderLayout的一個面板中。工具條還有一個特點(diǎn):可以被拖動到所在容器其它邊界(圖,甚至脫離其所在的容器(圖。工具條的使用生成一個工具條對象,可以使用語句:JToolBartoolbar=newJToolBar();還可以在生成工具條時,指明工具條的標(biāo)題。這樣,當(dāng)工具條脫離所在容器時,可以在自己的標(biāo)題欄顯示標(biāo)題(圖6.4.16):JToolBartoolbar=newJToolBar("顏色工具條");向工具條中添加組件,使用add方法:(btnBlue);(btnYellow); 缺省情況下,組件是按照水平方式逐個添加入工具條的,也可以在生成工具條時指明以垂直方式來添加組件:JToolBartoolbar=newJToolBar;如果希望工具條不能移動,可以使用setFloatable方法來設(shè)置:(false);當(dāng)工具條中的按鈕上只顯示圖標(biāo)時,用戶可能不能確切知道各個按鈕的具體含義。可以使用工具提示解決這個問題:("面板置為黃色");對話框?qū)υ捒蚴怯脩艉蛻?yīng)用程序進(jìn)行交互(對話)的一個橋梁:對話框可以用于收集用戶的輸入數(shù)據(jù)傳遞給應(yīng)用程序,或是顯示應(yīng)用程序的運(yùn)行信息給用戶。對話框分為模式(modal)和非模式兩種。模式對話框處于可見狀態(tài)時,用戶將不能與應(yīng)用程序的其它窗口進(jìn)行交互,而非模式對話框則沒有此限制。Java中提供了一個類JOptionPane用于創(chuàng)建簡單的模式對話框,如果希望創(chuàng)建非模式對話框或是自定義對話框可以使用JDialog。選項對話框JOptionPane類中提供了4種靜態(tài)方法,用以顯示4種常用的對話框:showMessageDialog消息對話框showInputDialog輸入對話框showConfirmDialog確認(rèn)對話框showOptionDialog選項對話框通過觀察右側(cè)的對話框可以發(fā)現(xiàn),該對話框主要由如下幾個部分構(gòu)成:圖標(biāo)、消息以及按鈕。先來看一下圖標(biāo),系統(tǒng)本身提供了如下四種圖標(biāo):類JOptionPane中定義了如下五個常量:6.4.24答題(1)簡述AWT和Swing的區(qū)別和聯(lián)系?(2)Swing的組件有那些。2.操作題試設(shè)計一個程序,仿照學(xué)生成績管理界面自由發(fā)揮編寫一個界面參考資料(含參考書、文獻(xiàn)等):實施情況及分析:良好多線程授課題目多線程學(xué)時安排6學(xué)時課程設(shè)計網(wǎng)絡(luò)聊天系統(tǒng)教學(xué)目的認(rèn)識線程的機(jī)制、線程的操作和使用教學(xué)要求理解定制線程類、繼承線程類、線程的生命周期教學(xué)重點(diǎn)線程的機(jī)制、線程的生命能周期教學(xué)難點(diǎn)線程的應(yīng)用授課類型理論課、實驗課授課場地教室、實驗室教學(xué)方式講授、演示、提問、討論教輔設(shè)備投影儀教學(xué)內(nèi)容引入各位!想象以下這個場景:目前大多數(shù)的計算機(jī)游戲使用圖象和聲音,但是各位是否注意到游戲的圖象、你的得分、和游戲的音樂是在同時進(jìn)行?想象這樣一個情形,你看見屏幕先變化,然后再更新你的得分,最后你聽到聲音!一個游戲在進(jìn)行時能同時擁有所有這些元素。更專業(yè)一點(diǎn)的說,程序此時已經(jīng)分成了三個子單元,每個單元由線程來處置。經(jīng)驗:在解釋問題陳述之前,應(yīng)首先確立多線程應(yīng)用的需要。區(qū)分Thread類和Runnable接口。解釋線程的生命周期(尤其是非運(yùn)行狀態(tài))。注意:闡明在Java中,線程是由JVM管理的。另外,雖然用戶程序是多線程的,可實際上任一時刻只有一個線程在運(yùn)行。由于分配給每一個線程的時間片非常短,因此看上去多個線程似乎是在同時運(yùn)行。知識點(diǎn)講解及程序代碼分析什么是線程與進(jìn)程 進(jìn)程:簡單來說就是一個程序在給定活動空間和初始條件下,在一個處理機(jī)上的執(zhí)行過程。可以簡單的理解為進(jìn)程就是一個正在運(yùn)行的程序。 線程:一個線程是一個程序內(nèi)部的一個順序控制流。即:一個或多個線程組成一個進(jìn)程。線程與進(jìn)程的區(qū)別: 線程與進(jìn)程的區(qū)別主要有以下兩點(diǎn):多個進(jìn)程的內(nèi)部數(shù)據(jù)和狀態(tài)是完全獨(dú)立的,而多線程是共享一塊內(nèi)存空間和一組系統(tǒng)資源,有可能互相影響。線程本身的數(shù)據(jù)通常只有寄存器數(shù)據(jù),以及一個程序執(zhí)行時使用的堆棧,所以線程的切換比進(jìn)程切換的負(fù)擔(dān)要小。線程本質(zhì)上就是一小部分獨(dú)立的代碼,處理器將其與其他線程同時運(yùn)行。線程不一定是整個程序(處理多線程時,一般將程序稱為進(jìn)程),因為進(jìn)程可以根據(jù)需要創(chuàng)建很多線程。一個線程的例子publicclassCurrentThread{ publicstaticvoidmain(Stringargs[]) { ThreadthisThread=(); try { for(intcounter=0;counter<10;counter+=2) { (1000); } } catch(InterruptedExceptione) { "hi!Iwasinterrupted"); } }}在上面的應(yīng)用程序中,當(dāng)前線程用CurrentThread()方法獲得。每次線成打印計數(shù)器的值,線程被設(shè)為1000毫秒(1秒)。線程可以引發(fā)異常如果有另一個線程中斷睡眠。因此,sleep()方法被保護(hù)在try塊里。輸出結(jié)果:定制線程類:實現(xiàn)線程最重要的方法是實現(xiàn)其中的run方法,run方法決定了線程所做的工作??梢允褂脙煞N方法來定制線程類提供
RUN方法:繼承線程類Thread實現(xiàn)Runnable繼承線程類Thread 類用于在多線程應(yīng)用程序構(gòu)造和訪問單個多線程,它支持許多方法獲得有關(guān)線程的活動信息,線程的設(shè)置和檢查屬性,引起線程等待,中斷或破壞的信息。由擴(kuò)充Thread類你能使應(yīng)用程序和類運(yùn)行在獨(dú)立的多線程。 Java線程的生命周期每個線程都是和生命周期相聯(lián)系的,一個生命周期含有多個狀態(tài),這些狀態(tài)間可以互相轉(zhuǎn)化。Java的線程的生命周期可以分為4個狀態(tài);創(chuàng)建(new)狀態(tài);可運(yùn)行(runnable)狀態(tài);不執(zhí)行(notrunnable)狀態(tài);消亡(dead)狀態(tài)。如下圖描述:線程中斷我們已經(jīng)知道,當(dāng)線程的run方法運(yùn)行結(jié)束,該線程也就自然終止。雖然也可以調(diào)用線程的stop方法來強(qiáng)制殺死一個線程,但該方法是不安全的,因此不推薦使用。Java中還提供了interrupt方法用來中斷一個線程。當(dāng)調(diào)用一個線程的interrupt方法時,即向該線程發(fā)送一個中斷請求,并將該線程的“interrupted”狀態(tài)值置為true線程的同步當(dāng)兩個線程需要分享數(shù)據(jù),你必須保證一個線程不會改變另一個線程使用的數(shù)據(jù)。例如,如果程序有兩個線程,一個從文件讀你的工資而另一個試著更新工資,就可能發(fā)生數(shù)據(jù)錯亂,JAVA用同步的方法或同步的語句允許你對等多線程操作。 線程的同步用synchronized關(guān)鍵字說明的方法能訪問對等存取的對象。在給定的時間片你能為對象調(diào)用一個同步方法。這防止在多線程里同步方法沖突。所有對象和類與監(jiān)督程序有關(guān)。監(jiān)督程序控制同步方法訪問對象或類。它保證只有一個線程在任何給定的時間片里訪問資源。同步方法在調(diào)用該對象時獲取對象的監(jiān)督程序。當(dāng)執(zhí)行同步方法時,對象被鎖住以至不能調(diào)用其他同步方法。一旦方法執(zhí)行完,監(jiān)督程序自動釋放。當(dāng)同步方法執(zhí)行某種方法(如wait()),監(jiān)督程序也釋放。與同步方法有關(guān)的線程變得不可運(yùn)行直到滿足等待條件。當(dāng)?shù)却龡l件滿足,線程必須獲取對象的監(jiān)督程序以便成為可運(yùn)行的。下列代碼顯示同步方法和對象監(jiān)督程序如何被多線程用于對等訪問普通對象的。importMyThreadextendsThread{ staticStringmessage[]={"l","like","to","java"}; publicMyThread(Stringid) { super(id); } publicvoidrun() { (getName(),message); } voidwaiting() { try { sleep(1000); } catch(InterruptedExceptione) { "Interrupted"); } }}classSthread{ publicstaticsynchronizedvoiddisplayList(Stringname,Stringlist[]) { for(inti=0;i<;++i) { MyThreadthread=(MyThread)(); (); } }}classThreadtest{ publicstaticvoidmain(Stringargs[]) { MyThreadthread1=newMyThread("Thread1:"); MyThreadthread2=newMyThread("Thread2:"); ();理層2.數(shù)據(jù)鏈路層3.網(wǎng)絡(luò)層4.傳輸層5.會話層6.表示層7.應(yīng)用層其模型如圖:3、協(xié)議(1)、IP(InternetProtocol)協(xié)議IP協(xié)議用于管理客戶端和服務(wù)器端之間的報文傳送。IP協(xié)議是所有Internet協(xié)議的基石,IP協(xié)議是一個面向包的協(xié)議,是無連接的。IP協(xié)議已經(jīng)成為世界上最重要的網(wǎng)際協(xié)議。例如:、TCP(TransmissionControlProtocol)協(xié)議傳輸控制協(xié)議(TCP)提供了可靠的報文流傳輸和對上層應(yīng)用的連接服務(wù),TCP使用順序的應(yīng)答,能夠按需重傳報文。TCP在兩個或多個主機(jī)之間建立面向鏈接的通信。TCP支持多數(shù)據(jù)流操作,提供數(shù)據(jù)流控制和錯誤控制,甚至完成對亂序到達(dá)報文的重新排序。(3)、UDP(UserDatagramProtocol)協(xié)議用戶數(shù)據(jù)報協(xié)議(UDP)是IP協(xié)議的另一個主機(jī)到主機(jī)層協(xié)議。UDP提供了一種基本的、低延時的稱為數(shù)據(jù)報的傳輸。UDP的簡單性使UDP不適合于一些應(yīng)用,但對另一些更復(fù)雜的、自身提供面向鏈接功能的應(yīng)用卻很適合。其它可能使用UDP的情況包括:轉(zhuǎn)發(fā)路由表數(shù)據(jù)交換、系統(tǒng)信息、網(wǎng)絡(luò)監(jiān)控數(shù)據(jù)等的交換。這些類型的交換不需要流控、應(yīng)答、重排序或任何TCP提供的功能。4、網(wǎng)絡(luò)地址在網(wǎng)絡(luò)中有成千上萬臺計算機(jī),每臺計算機(jī)都有一個專用的地址,我們稱之為網(wǎng)絡(luò)地址。網(wǎng)絡(luò)地址又稱為IP地址,它由4組0到255的數(shù)字組成,每組數(shù)字由下圓點(diǎn)“·”隔開。例如:地址也有缺點(diǎn):一般人很難理解和記住這組沒什么意思的數(shù)字。因此又為每臺計算機(jī)起個有意義的名字,稱為主機(jī)名(HostName)。上面的那組IP地址為例,其主機(jī)名為:、端口在網(wǎng)絡(luò)技術(shù)中,端口(Port)大致有兩種:(1)、物理意義上的端口。比如,ADSLModem、集線器、交換機(jī)、路由器用于連接其它網(wǎng)絡(luò)設(shè)備的接口,如RJ-45端口、SC端口等等。(2)、邏輯意義上的端口。一般是指TCP/IP協(xié)議中的端口,端口號的范圍從0到65535。比如,用于瀏覽網(wǎng)頁服務(wù)的80端口,用于FTP服務(wù)的21端口等等。邏輯意義上的端口可分為3大類:公認(rèn)端口(WellKnownPorts):從0到1023,這些端口緊密綁定于一些服務(wù)。通常這些端口的通訊明確表明了某種服務(wù)的協(xié)議。注冊端口(RegisteredPorts):從1024到49151。它們松散地綁定于一些服務(wù)。也就是說有許多服務(wù)綁定于這些端口,這些端口同樣用于許多其它目的。動態(tài)和/或私有端口(Dynamicand/orPrivatePorts):從49152到65535。理論上,不應(yīng)為服務(wù)分配這些端口。實際上,機(jī)器通常從1024起分配動態(tài)端口6、套接字套接字(Socket)是程序與網(wǎng)絡(luò)間的一種接口,大部分的網(wǎng)絡(luò)應(yīng)用程序都是點(diǎn)對點(diǎn)的(point-to-point),所謂的點(diǎn)就是服務(wù)器端和客戶端所執(zhí)行的程序。Socket在應(yīng)用程序中創(chuàng)建,通過一種綁定機(jī)制與驅(qū)動程序建立關(guān)系,告訴自己所對應(yīng)的IP和端口號。此后,應(yīng)用程序送給Socket的數(shù)據(jù),由Socket交給驅(qū)動程序向網(wǎng)絡(luò)上發(fā)送出去。計算機(jī)從網(wǎng)絡(luò)上收到與該Socket綁定的IP和端口號相關(guān)的數(shù)據(jù)后,由驅(qū)動程序交給Socket,應(yīng)用程序便可從該Socket中提取接收到的數(shù)據(jù)。網(wǎng)絡(luò)應(yīng)用程序就是這樣通過Socket進(jìn)行數(shù)據(jù)的發(fā)送與接收的。如下圖TCP程序設(shè)計Java中的TCP網(wǎng)絡(luò)程序設(shè)計是指利用Socket類,編寫通信程序。服務(wù)器端套接字等待客戶機(jī)的連接請求,并創(chuàng)建新的套接字使其與客戶機(jī)的套接字連接,而本身繼續(xù)等待其他客戶機(jī)的連接請求。如圖所示。8.2.1Socket通信在Java中,基于TCP協(xié)議實現(xiàn)網(wǎng)絡(luò)通信的類有兩個:在客戶端的Socket類和在服務(wù)器端的ServerSocket類。在服務(wù)器端通過指定一個用來等待的連接的端口號創(chuàng)建一個ServerSocket實例。在客戶端通過規(guī)定一個主機(jī)和端口號創(chuàng)建一個socket實例,連到服務(wù)器上。ServerSocket類的accept方法使服務(wù)器處于阻塞狀態(tài),等待用戶請求1、Socket類(1)構(gòu)造方法:publicSocket(
host,int
port)publicSocket(
address,int
port)publicSocket(
host,int
port,
localAddr,int
localPort)publicSocket(
address,int
port,
localAddr,int
localPort)在以前,Socket類可同時用于TCP/UDP通信:publicSocket(
host,int
port,boolean
stream)publicSocket(
host,int
port,boolean
stream)這些方法都將拋出例外IOException,程序中需要捕獲處理。(2)Socket的輸入/輸出流管理publicgetInputStream()publicvoidshutdownInput()publicgetOutputStream()publicvoidshutdownOutput()這些方法都將拋出例外IOException,程序中需要捕獲處理。(3)關(guān)閉Socketpublicvoidclose()throws(4)設(shè)置/獲取Socket數(shù)據(jù)publicgetInetAddress()、publicintgetPort(),…publicvoidsetSoTimeout(int
timeout),…這些方法都將拋出例外SocketException,程序中需要捕獲處理。2、ServerSocket類(1)構(gòu)造方法:publicServerSocket(int
port)publicServerSocket(int
port,int
backlog):支持指定數(shù)目的連接publicServerSocket(int
port,int
backlog,
bindAddr)這些方法都將拋出例外IOException,程序中需要捕獲處理。(2)主要方法publicaccept():等待客戶端的連接publicvoidclose():關(guān)閉Socket(3)設(shè)置/獲取Socket數(shù)據(jù)publicgetInetAddress()、publicintgetLocalPort(),…publicvoidsetSoTimeout(int
timeout),…這些方法都將拋出例外SocketException,程序中需要捕獲處理。無論一個Socket通信程序的功能多么齊全、程序多么復(fù)雜,其基本結(jié)構(gòu)都是一樣的,都包括以下四個基本步驟:(1)、在客戶方和服務(wù)器方創(chuàng)建Socket/ServerSocket。(2)、打開連接到Socket的輸入/輸出流。(3)、利用輸入/輸出流,按照一定的協(xié)議對Socket進(jìn)行讀/寫操作。(4)、關(guān)閉輸入/輸出流和Socket。通常,程序員的主要工作是針對所要完成的功能在第(3)步進(jìn)行編程,第(1)、(2)、(4)步對所有的通信程序來說幾乎都是一樣的。如圖:ServerSocket(port#)ServerSocket(port#)ServerServerSocketsocket=()接收連接OutputStreamInputStreamCloseSocketClientSocket(host,port#)與服務(wù)器建立連接OutputStreamInputStreamCloseSocketSocket第一步:建立Socket在客戶端:try{Socketclient=newSocket(host,4444);}catch(IOExceptione){}在服務(wù)器端:try{ServerSocketserver=newServerSocket(4444);}
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 有機(jī)化學(xué)原料的環(huán)保合成方法優(yōu)化研究進(jìn)展分析預(yù)測考核試卷
- 機(jī)器人服務(wù)創(chuàng)新模式與實踐案例考核試卷
- 景區(qū)旅游信息化平臺運(yùn)營與管理考核試卷
- 制作氣球培訓(xùn)課件
- 家電公司轉(zhuǎn)讓合同范本
- 委托汽車融資合同范本
- 正規(guī)吊車租賃合同范本
- 圍墻制作安裝合同范本
- 項目建設(shè)策劃合同范本
- 酒店餐飲服務(wù)流程優(yōu)化與提升制度
- 高職院校創(chuàng)新創(chuàng)業(yè)教育數(shù)字化轉(zhuǎn)型和改革研究
- 初中物理實驗全集-ppt
- 酒店住宿水單模板-可修改
- 合作公司變更函范文(必備6篇)
- 創(chuàng)新收益占有文獻(xiàn)綜述
- 急性腸系膜血管缺血性疾病
- 全國2017年10月自考00043經(jīng)濟(jì)法概論(財經(jīng)類)試題及答案
- 2023年山東力明科技職業(yè)學(xué)院單招面試模擬試題及答案解析
- 少兒美術(shù)繪本教案課件-3-6歲 《100層巴士》
- GB/T 20169-2006離子型稀土礦混合稀土氧化物
- GB/T 19477-2018畜禽屠宰操作規(guī)程牛
評論
0/150
提交評論