一名java培訓(xùn)生的學(xué)習(xí)筆記(基礎(chǔ)部分2).doc_第1頁(yè)
一名java培訓(xùn)生的學(xué)習(xí)筆記(基礎(chǔ)部分2).doc_第2頁(yè)
一名java培訓(xùn)生的學(xué)習(xí)筆記(基礎(chǔ)部分2).doc_第3頁(yè)
一名java培訓(xùn)生的學(xué)習(xí)筆記(基礎(chǔ)部分2).doc_第4頁(yè)
一名java培訓(xùn)生的學(xué)習(xí)筆記(基礎(chǔ)部分2).doc_第5頁(yè)
已閱讀5頁(yè),還剩70頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第十三章 2007年6月17日 星期日授課教師:老劉學(xué)生: 王洪峰第一節(jié) HashMap類常見(jiàn)的方法及其用法public class Test public static void main(String args) /創(chuàng)建5個(gè)Bean的對(duì)象b1-b5并對(duì)它們進(jìn)行初始化Bean b1=new Bean();b1.setAge(23);b1.setName(Bob);Bean b2=new Bean();b2.setAge(23);b2.setName(Bob);Bean b3=new Bean();Bean b4=new Bean();b4.setAge(30);b4.setName(Jack);Bean b5=new Bean();b5.setAge(29);b5.setName(wang);HashMap h=new HashMap();/創(chuàng)建HashMap類型對(duì)象h;/并調(diào)用put方法,將它們?nèi)€(gè)key名(外號(hào)),加入到Map中h.put(1,b1);h.put(2,b2);h.put(3,b3);h.put(4,b4);h.put(5,b5);h.remove(3);/調(diào)用remove()方法,將key值為3的元素移除HashMapSystem.out.println(h.size();/輸出Map中的元素?cái)?shù)Bean temp=(Bean)h.get(5);/將key值為5的元素取出來(lái),并恢復(fù)其Bean身份,并其引用返回給tempSystem.out.println(temp.getAge();System.out.println(temp.getName();/輸出key值為5的屬性值第二節(jié) equals方法和hashCode方法的重寫(xiě)在處理兩個(gè)對(duì)象之間關(guān)系時(shí),有時(shí)會(huì)需要判斷兩個(gè)對(duì)象是否相等,如果他們的引用指向的是同一個(gè)對(duì)象,那么它們是相等的。如Object中的equals方法。如果它們指向的是同一類型的不同對(duì)象,但是他們的屬性值是相等的,也就是說(shuō)它們的內(nèi)容是相等的,那么我們就需要重寫(xiě)equals方法,例如:String中的equals方法就是Object中的equals方法的重寫(xiě)。如果我們自己定義一個(gè)類,需要將自己寫(xiě)的類型的兩個(gè)對(duì)象equals。那么我們就需要在該類中重寫(xiě)Object中的equals方法。重寫(xiě)完equals方法后還需要重寫(xiě)hashCode方法。因?yàn)楫?dāng)我們用Hash容器(如HashMap、HashSet)裝載這些對(duì)象時(shí),例如,將一個(gè)對(duì)象用add方法加入Set時(shí),會(huì)產(chǎn)生一個(gè)HashCode,當(dāng)我們又創(chuàng)建一個(gè)同類型內(nèi)容相同的對(duì)象時(shí),又變成另外一個(gè)HashCode了,它們?cè)谌萜髦械腍ashCode是隨機(jī)的生成的,那么你就無(wú)法取得該對(duì)象了。如果我們要判斷容器中是否裝進(jìn)了某種類型的對(duì)象,那么就需要重寫(xiě)hashCode方法,因?yàn)閑quals方法返回true的對(duì)象,它們的hashCode是相同的,重寫(xiě)hashCode方法就是讓計(jì)算機(jī)在同一HashCode中尋找,否則計(jì)算機(jī)出于Hash容器的高效性考慮,不會(huì)去在已經(jīng)存放該對(duì)象的hashCode中尋找,當(dāng)然也就找不到了。重寫(xiě)equals方法和hashCodepublic class Money /創(chuàng)建名叫Money這個(gè)類public int value = 0;/定義int型數(shù)據(jù)成員value,并初始化為0。public Money()/創(chuàng)建無(wú)參數(shù)的構(gòu)造方法public Money(int i)/帶有參數(shù)的構(gòu)造方法value = i;public boolean equals(Object obj)/重寫(xiě)時(shí)需要注意重寫(xiě)的方法定義的要求if (obj=null)/判斷形參的是否為空。如果是,返回false return false;if(this=obj)/判斷形參對(duì)象與調(diào)用該方法的當(dāng)前對(duì)象是否指向同一對(duì)象,如果是返回true.return true;if(!(obj instanceof Money)/判斷形參對(duì)象是否是Money的實(shí)例,如果不是,返回false.return false;Money mo=(Money)obj;/將形參引用恢復(fù)成該對(duì)象的身份。if(mo.value!=this.value)/如果他們的內(nèi)容不相等,返回false return false;return ture;如果都不是上面的情況返回truepublic int hashcode()/重寫(xiě)hashcode方法,使它們的hashcode保持一致return value;我們?cè)趀clipse中測(cè)試一下:如果我們不重寫(xiě)hashCode方法。那么輸出的將會(huì)是flase如果我們將每個(gè)對(duì)象都存放在同一hashCode中,那樣查找的效率就會(huì)很低,但是我們還可以利用String中的hashCode的算法,去重新寫(xiě)hashCode方法。public int hashCode()String str=String.valueOf(value);/將整型的value轉(zhuǎn)化為String型的strreturn str.hashCode();/用String中的hashCode的算法,返回hashCode第十四章 2007年6月18日 星期一授課教師:老劉學(xué)生: 王洪峰第一節(jié) 如何創(chuàng)建一個(gè)文件對(duì)象有三種方式:1、File myfile=new File(“d:/java/a.txt”);2、File myfile1=new File(“d:/java”, a.txt”);3、File myfile2=new File(“myfile1”, b.txt”);File類中常見(jiàn)的方法舉例說(shuō)明:import java.io.File;import java.io.IOException;/導(dǎo)入java.io包中的File和 IOException兩個(gè)類public class FileName public static void main(String args)File f1=new File(d:/java111);/創(chuàng)建一個(gè)文件對(duì)象f1f1.mkdir();/創(chuàng)建該文件對(duì)象的目錄File f=new File(d:/whjhg.txt);/創(chuàng)建一個(gè)文件對(duì)象fFile ff=new File(f1,www.txt);/創(chuàng)建一個(gè)文件對(duì)象ff,利用File中的構(gòu)造方法,將其目錄設(shè)置為f1所指向的路徑/將文件名設(shè)置為www.txt。try /處理創(chuàng)建文件時(shí)可能出現(xiàn)的異常/如果兩個(gè)文件不存在則創(chuàng)建這2個(gè)文件ff.createNewFile();f.createNewFile(); catch (IOException e) /捕獲異常e.printStackTrace();System.out.println(ff.canRead();/ff所指向的這個(gè)文件是否可讀?System.out.println(ff.canWrite();/ ff所指向的這個(gè)文件是否可寫(xiě)入?System.out.println(ff.exists();/ ff所指向的這個(gè)文件是否存在?System.out.println(ff.getPath();/輸出ff對(duì)象的路徑名System.out.println(ff.isHidden();/ff所指向的文件是否為隱藏文件?System.out.println(ff.isFile();/ff這個(gè)對(duì)象是一個(gè)文件嗎?System.out.println(f1.mkdir();/f1這個(gè)對(duì)象路徑創(chuàng)建成功了嗎?System.out.println(ff.isDirectory();/ff這個(gè)對(duì)象是目錄嗎?System.out.println(ff.lastModified();/ff所指向的這個(gè)文件的最后修改時(shí)間System.out.println(ff.length();/ff所指向的這個(gè)文件的大小是多少System.out.println(ff.delete();/刪除ff所指向的文件是否成功System.out.println(f.renameTo(f1);/是否成功的將f所指向的文件重命名為f1System.out.println(f.toString();/以字符串的形式將f對(duì)象返回在eclipse中測(cè)試一下結(jié)果:第二節(jié) 怎么樣將一個(gè)創(chuàng)建好的文件寫(xiě)入一些內(nèi)容import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintStream;/導(dǎo)入java.io包中的FileOutputStream 、IOException 、PrintStreampublic class Output /創(chuàng)建名叫Output的類public void write(String filename)/創(chuàng)建一個(gè)帶有參數(shù)的無(wú)返回值的方法write/目的是將形參中所代表的路徑名文件寫(xiě)入一些內(nèi)容FileOutputStream fs=null;PrintStream ps=null;/分別創(chuàng)建兩個(gè)FileOutputStream、 PrintStream對(duì)象fs 和ps。/將它們初始化為nulltry /處理在寫(xiě)入文件時(shí)可能出現(xiàn)的異常fs=new FileOutputStream(filename);/將fs的引用指向用該方法形參作為構(gòu)造方法參數(shù)的FileOutputStream對(duì)象ps=new PrintStream(fs);/將ps的引用指向用fs作為構(gòu)造方法參數(shù)的PrintStream對(duì)象ps.println(1234567890123);/調(diào)用ps對(duì)象中的println方法,將字符串1234567890123寫(xiě)入到文件中System.out.println(文件寫(xiě)入成功);/如果沒(méi)有出現(xiàn)異常,輸出 文件寫(xiě)入成功。 catch (Exception e) /捕獲異常e.printStackTrace();finally/無(wú)論是否寫(xiě)入成功,都應(yīng)該將fs和ps所指向的文件關(guān)閉try if(ps!=null)ps.close(); catch (Exception e1) e1.printStackTrace();try if(fs!=null)fs.close(); catch (IOException e1) e1.printStackTrace();在eclipse中測(cè)試一下第三節(jié) 怎么樣讀取一個(gè)文件的內(nèi)容import java.io.File;import java.io.FileInputStream;import java.io.IOException;/導(dǎo)入java.io包中的File、FileInputStream 、IOExceptionpublic class In /創(chuàng)建名叫In的類public String fun(String a)/創(chuàng)建帶有參數(shù)的,返回值類型為String的方法fun/其中形參a是字符串形式的文件路徑/該方法返回的是形參路徑所指向的文件內(nèi)容File ff=new File(a);/創(chuàng)建用形參作為構(gòu)造方法參數(shù)的File類型的對(duì)象ffFileInputStream fs=null;/創(chuàng)建FileInputStream對(duì)象fs,并初始化為nullbyte bb=new byte2;/創(chuàng)建byte型的數(shù)組bb,并指定長(zhǎng)度為2,指定了每次讀取的字符數(shù)String con=;/創(chuàng)建一個(gè)String類型的變量con,用來(lái)儲(chǔ)存讀取文件的內(nèi)容int n=0;/定義一個(gè)局部變量。初始化為0try/處理在讀取文件中可能存在的異常fs=new FileInputStream(ff);/將fs的引用指向用該方法形參作為構(gòu)造方法參數(shù)的FileInputStream對(duì)象while(n!=-1)/以是否讀到文件尾為判斷條件,進(jìn)行while循環(huán)if(n!=0)/如果n不等于0,將讀取bb數(shù)組中的n個(gè)字符/并將其內(nèi)容放入到temp臨時(shí)字符串中String temp=new String(bb,0,n);/將內(nèi)容累加到con中con+=temp;n=fs.read(bb);/用fs對(duì)象調(diào)用read方法將讀取出的字符個(gè)數(shù)賦給ncatch(Exception e)/捕獲異常e.printStackTrace();finally/無(wú)論是否出現(xiàn)異常都應(yīng)該將文件關(guān)閉try /處理關(guān)閉文件時(shí)產(chǎn)生的異常 fs.close(); catch (IOException e1) /捕獲IOException異常e1.printStackTrace();return con;/返回調(diào)用該方法所讀取的文件內(nèi)容我們?cè)趀clipse中測(cè)試一下,測(cè)試碼如圖:第四節(jié) 利用前兩個(gè)程序中的方法拷貝一個(gè)文件import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/導(dǎo)入java.io包中的File、FileInputStream、FileOutputStream、IOException類 public class CopyFile /創(chuàng)建CopyFile類public void copy(String srcName, String desName) /創(chuàng)建copy方法,其形式參數(shù)分別為源文件和目的文件 File src = new File(srcName); File des = new File(desName);/分別由兩個(gè)形參作為File構(gòu)造方法的參數(shù),創(chuàng)建兩個(gè)File對(duì)象src和des FileInputStream fis = null; FileOutputStream fos = null;/分別聲明FileInputStream、FileOutputStream的對(duì)象fis和fos,并將其初始化為null try /處理在文件copy的時(shí)候所產(chǎn)生的異常 des.createNewFile();/創(chuàng)建形參des所指的目的文件 fis = new FileInputStream(src); fos = new FileOutputStream(des);/分別創(chuàng)建FileInputStream、FileOutputStream的對(duì)象fis和fos int n=0;/定義整形變量n,初始化為0 byte buf = new byte2;/創(chuàng)建byte型的數(shù)組bb,并指定長(zhǎng)度為2,指定了每次讀取的字符數(shù) while(n = fis.read(buf) != -1) /調(diào)用fis的read方法讀取源文件,并將其讀取的字符數(shù)量賦給n/定義循環(huán)條件為n!=-1(未讀到文件尾) fos.write(buf,0,n);/將每次讀取的內(nèi)容寫(xiě)入到目的文件中 catch(Exception e) /捕獲異常 e.printStackTrace(); finally /為了安全起見(jiàn),分別處理在文件關(guān)閉時(shí)的異常 try if(fos!=null)fos.flush(); catch (IOException e1) e1.printStackTrace(); try if(fos!=null)fos.close(); catch (IOException e2) e2.printStackTrace(); try if(fis!=null)fis.close(); catch (IOException e3) e3.printStackTrace(); System.out.println(文件copy成功); 在eclipse中測(cè)試,測(cè)試碼如下圖:第十五章 2007年6月20日 星期三授課教師:老劉學(xué)生: 王洪峰第一節(jié) 與文件操作相關(guān)的一些程序?qū)嵗?、?shí)現(xiàn)FilenameFilter接口來(lái)過(guò)濾符合某些條件的文件或目錄。import java.io.File;import java.io.FilenameFilter;/導(dǎo)入java.io包中的File類和FilenameFilter接口public class JavaFilter implements FilenameFilter/創(chuàng)建JavaFilter類實(shí)現(xiàn)FilenameFilter接口public boolean accept(File dir,String name)/重寫(xiě)接口中的accept方法,以實(shí)現(xiàn)FilenameFilter接口return name.endsWith(.java);/返回一以.java結(jié)尾字符串在eclipse中測(cè)試:二、讀取properties類型文件的內(nèi)容:properties類型文件叫屬性文件,其中的內(nèi)容不要寫(xiě)中文,否則會(huì)讀出亂碼,它的作用是實(shí)現(xiàn)程序和程序之間、程序和服務(wù)器之間的信息交換。由于properties類型文件通常存放的是一些服務(wù)器的IP地址,或者存放程序?qū)崿F(xiàn)所必須的目錄或文件,所以可以利用文件返回的字符串來(lái)使維護(hù)程序更加方便。下面舉一個(gè)讀取properties類型文件的內(nèi)容的程序。我們首先在硬盤(pán)上創(chuàng)建一個(gè)test. properties.用記事本打開(kāi)寫(xiě)入內(nèi)容如下圖其中url和name叫做標(biāo)記,后面的部分叫內(nèi)容import java.io.File;import java.io.FileInputStream;import java.util.Properties;/導(dǎo)入java.io包中的File和FileInputStream類/導(dǎo)入java.util中的Properties類public class ReadPro /創(chuàng)建ReadPro類 public String url = ; public String name = ; /定義.properties類型文件中的內(nèi)容標(biāo)記url和 name作為數(shù)據(jù)成員,初始化它們?yōu)閜ublic ReadPro() /在構(gòu)造方法中完成讀取.propertie文件的操作/使其創(chuàng)建該類對(duì)象時(shí)就已經(jīng)將.propertie文件的內(nèi)容賦給該類的成員變量 try /處理在讀取文件中可能出現(xiàn)的異常 Properties props = new Properties(); /創(chuàng)建Properties類的對(duì)象 File f = new File(d:/Test/test. properties); /用.propertie文件路徑作為參數(shù)的構(gòu)造方法創(chuàng)建File類對(duì)象f FileInputStream in = new FileInputStream(f);/將f作為FileInputStream構(gòu)造方法的參數(shù)創(chuàng)建其對(duì)象in props.load(in);/將in作為參數(shù)用對(duì)象props調(diào)用Properties中的方法load/將文件讀取出來(lái) in.close(); /關(guān)閉該文件 url = props.getProperty(url); name=props.getProperty(name);/用Properties類中的getProperty方法將標(biāo)記作為參數(shù),分別返回給數(shù)據(jù)成員 catch(Exception e) /捕獲異常 e.printStackTrace(); 我們?cè)趀clipse中測(cè)試。測(cè)試碼見(jiàn)下圖:第三節(jié) 線程一、基本概念:1、進(jìn)程:通俗來(lái)講就是指正在被cpu執(zhí)行的代碼叫進(jìn)程。2、線程:等待被cpu執(zhí)行的代碼叫線程。3、多線程:指的是在單個(gè)程序中可以同時(shí)運(yùn)行多個(gè)不同的線程,執(zhí)行不同的任務(wù)。 由于cpu采用分時(shí)復(fù)用,每個(gè)線程都有機(jī)會(huì)得到執(zhí)行,每個(gè)都執(zhí)行1ms,我們看起來(lái)就像是同時(shí)執(zhí)行。二、創(chuàng)建線程:線程的所有活動(dòng)都是通過(guò)線程的run()方法來(lái)實(shí)現(xiàn)的。在一個(gè)線程被建立并初始化以后, Java 的運(yùn)行時(shí)系統(tǒng)就自動(dòng)調(diào)用 run()方法,正是通過(guò) run()方法才使得建立線程的目的得以實(shí)現(xiàn)。線程開(kāi)始執(zhí)行時(shí),從它的 run ()方法中執(zhí)行,這種方法是定義的線程的執(zhí)行起點(diǎn),就像應(yīng)用程序從 main()開(kāi)始一樣。通常, run()方法是一個(gè)循環(huán),例如一個(gè)播放動(dòng)畫(huà)的線程要循環(huán)顯示一系列圖片。有時(shí), run() 方法會(huì)執(zhí)行一個(gè)時(shí)間較長(zhǎng)的操作,例如下載并播放電影。有兩種方法可以構(gòu)造自己的 run() 方法。下面我們將通過(guò)兩個(gè)例子來(lái)分別說(shuō)明。1、通過(guò)繼承創(chuàng)建線程定義一個(gè)線程類,它繼承線程類 Thread 并重寫(xiě)其中的方法 run ( ) ,由于 Java 只支持單繼承,用這種方法定義的類不能再繼承其他父類。啟動(dòng)時(shí)調(diào)用start方法。舉例說(shuō)明public class X1 extends Thread /創(chuàng)建類X1,繼承Thread類int i=1;/定義整型變量i,初始化值為1public void run()/重寫(xiě)run方法while(i0)System.out.println(X1的 +i+);try /處理在線程sleep時(shí)所產(chǎn)生的異常X1.sleep(1000L);/為了測(cè)試時(shí)能看清楚,調(diào)用Thread類中的sleep方法/每秒輸出一個(gè)數(shù)字 catch (InterruptedException e) /捕獲異常e.printStackTrace();測(cè)試碼如圖:2、提供一個(gè)實(shí)現(xiàn)接口 Runnable 的類作為一個(gè)線程的目標(biāo)對(duì)象,在初始化一個(gè)Thread 類或者 Thread 子類的線程對(duì)象時(shí),把目標(biāo)對(duì)象傳遞給這個(gè)線程實(shí)例,由該目標(biāo)對(duì)象提供線程體 run ( )。這時(shí),實(shí)現(xiàn)接口 Runnable 的類仍然可以繼承其他父類。舉例說(shuō)明:public class X2 implements Runnable/創(chuàng)建X2類,實(shí)現(xiàn)Runnable接口int i=1;public void run()/重寫(xiě)run方法以實(shí)現(xiàn)Runnable接口while(i0)System.out.println(X2的 +i+);try Thread.sleep(1000L); catch (InterruptedException e) / TODO 自動(dòng)生成 catch 塊e.printStackTrace();測(cè)試碼入圖:3、兩種方法的比較 (1)直接繼承線程 Thread 類。不能再?gòu)钠渌惱^承,編寫(xiě)簡(jiǎn)單,可以直接操作線程。 (2)通過(guò)實(shí)現(xiàn) Runnable 接口實(shí)現(xiàn)線程。可以將 CPU 、代碼和數(shù)據(jù)分開(kāi),形成清晰的模型;還可以繼承其他類;保持程序風(fēng)格的一致性和良好的擴(kuò)展性。在具體應(yīng)用中,采用哪種方法來(lái)構(gòu)造線程體要視情況而定。通常,當(dāng)一個(gè)線程已繼承了另一個(gè)類時(shí),就只能用第二種方法來(lái)構(gòu)造,即實(shí)現(xiàn)Runnable 接口。三、線程的狀態(tài):1、創(chuàng)建狀態(tài)(new Thread() 當(dāng)一個(gè)線程處于創(chuàng)建狀態(tài)時(shí),它僅僅是一個(gè)空的線程對(duì)象,系統(tǒng)不為它分配資源。2、可運(yùn)行狀態(tài)( Runnable ) 當(dāng)一個(gè)線程處于可運(yùn)行狀態(tài)時(shí),系統(tǒng)為這個(gè)線程分配了它所需的系統(tǒng)資源,安排其運(yùn)行并調(diào)用線程運(yùn)行方法,這樣就使得該線程處于可運(yùn)行( Runnable )狀態(tài)。3、運(yùn)行中狀態(tài)( Running ) 當(dāng)一個(gè)線程處于可運(yùn)行狀態(tài)時(shí),系統(tǒng)為這個(gè)線程分配了它所需的系統(tǒng)資源, Java 的運(yùn)行系統(tǒng)選中一個(gè)可運(yùn)行狀態(tài)的線程,該線程占有 CPU 并轉(zhuǎn)為運(yùn)行中狀態(tài)。4、不可運(yùn)行狀態(tài)( Not Runnable ) 不可運(yùn)行狀態(tài)也稱為阻塞狀態(tài)( Blocked )。由于某種原因(輸入輸出、等待消息或其他阻塞情況),系統(tǒng)不能執(zhí)行線程的狀態(tài)。這時(shí)即使處理器空閑,也不能執(zhí)行該線程。5、死亡狀態(tài)( Dead ) 線程執(zhí)行結(jié)束的狀態(tài)。存在兩種情況:自然撤消或是被停止。四、線程控制:1、設(shè)置線程的優(yōu)先級(jí)用Thread類中的setPriorty方法;例如:Thread.setPriorty(10);其中的參數(shù)10是設(shè)置為最高優(yōu)先級(jí),1是最低優(yōu)先級(jí)。注意:要在線程啟動(dòng)前設(shè)置優(yōu)先級(jí)。2、停止一個(gè)線程:一種方法是直接調(diào)用stop方法,但這不可靠,sun公司的文檔寫(xiě)明不推薦的方法。另外一種就是自己寫(xiě)個(gè)方法,讓線程該停止的時(shí)候調(diào)用該方法。例如:可在例一中添加fun方法:public class X1 extends Thread int i=1;public void run()while(i0)System.out.println(X1的 +i+);try X1.sleep(1000L); catch (InterruptedException e) / TODO 自動(dòng)生成 catch 塊e.printStackTrace();public void fun()i=-1;System.out.println(X1 is Dead);測(cè)試碼入圖:3、啟動(dòng)多個(gè)線程:在下圖中,我們雖然設(shè)置它們同樣的sleep時(shí)間,但是還是顯示出了不規(guī)律性,當(dāng)多個(gè)線程都有機(jī)會(huì)執(zhí)行時(shí),cpu想執(zhí)行哪個(gè)要靠它的心情決定。表現(xiàn)出來(lái)的隨機(jī)性,我們是無(wú)能為力的。4、當(dāng)兩個(gè)線程同時(shí)對(duì)一個(gè)數(shù)據(jù)進(jìn)行操作時(shí),例如、一個(gè)線程向數(shù)組中寫(xiě)數(shù)字,另外一個(gè)輸出,那么有可能出現(xiàn)還沒(méi)有寫(xiě)入的時(shí)候就被輸出了。當(dāng)我們不知道什么時(shí)間控制其停止的時(shí)候可以使用join方法。join方法是等待一個(gè)線程執(zhí)行完畢。public class Join /創(chuàng)建Join類,用來(lái)測(cè)試join方法int a=new int 10;/定義一個(gè)int型的數(shù)組a,其長(zhǎng)度為10public static void main(String args) /創(chuàng)建main方法,作為程序入口 Join a=new Join();a.fun();/調(diào)用fun()方法,啟動(dòng)內(nèi)部類中的線程,為數(shù)組a初始化。for(int i=0;i10;i+) System.out.println(ai= *+a.ai); /輸出數(shù)組a的各個(gè)元素值public void fun()/創(chuàng)建fun方法XXX b=new XXX();/創(chuàng)建內(nèi)部類對(duì)象bThread th=new Thread(b);th.start();/啟動(dòng)線程try /調(diào)用join方法,使該線程結(jié)束再處理main方法th.join(); catch (InterruptedException e) / TODO 自動(dòng)生成 catch 塊e.printStackTrace();class XXX implements Runnable/創(chuàng)建內(nèi)部類XXX實(shí)現(xiàn)Runnable接口public void run()/重寫(xiě)run方法實(shí)現(xiàn)Runnable接口for(int i=0;i后面輸入 open 1234 回車 */public class TestServerSocket1 public static void main(String args) throws Exception /安裝電話分機(jī) ServerSocket server = new ServerSocket(1234); System.out.println(Server is listening.); /秘書(shū)守侯電話 Socket sock = server.accept(); server.close(); /發(fā)出指示 PrintStream ps = new PrintStream(sock.getOutputStream(); for(int i = 10; i 0; i-) ps.println(i + 每天寫(xiě)500行代碼就能成JAVA高手.); /放下電話 ps.close(); sock.close(); /秘書(shū)接聽(tīng)一個(gè)電話就下班了:) 第三部分 JDBC技術(shù)第一章 2007年6月29日 星期五授課教師:老劉學(xué)生:王洪峰第一節(jié) 基本概念及java.sql包中常見(jiàn)類和接口在JAVA程序中對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)是通過(guò)JDBC工具包來(lái)進(jìn)行的。利用它可以使用SQL語(yǔ)句對(duì)任意一種數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)java.sql包中常見(jiàn)類和接口:1、Connection接口它代表數(shù)據(jù)庫(kù)的連接,并擁有創(chuàng)建SQL語(yǔ)句的方法,以及完成常規(guī)的SQL操作。2、類 DriverManager 該類管理一組 JDBC 驅(qū)動(dòng)程序的基本服務(wù)以及創(chuàng)建數(shù)據(jù)庫(kù)的連接,它可以在任意時(shí)間顯式地加載 JDBC 驅(qū)動(dòng)程序。例如,my.sql.Driver 是使用以下語(yǔ)句加載的: Class.forName(my.sql.Driver);在調(diào)用 getConnection 方法時(shí),DriverManager 會(huì)試著從初始化時(shí)加載的那些驅(qū)動(dòng)程序中查找合適的驅(qū)動(dòng)程序。并返回一個(gè)Connection接口類型的連接。注意:getConnection方法是會(huì)拋出SQLException異常的,使用時(shí)候要try-catch或者throw 。3、接口 Statement用于執(zhí)行靜態(tài) SQL 語(yǔ)句并返回它所生成結(jié)果的對(duì)象。在默認(rèn)情況下,同一時(shí)間每個(gè) Statement 對(duì)象在只能打開(kāi)一個(gè) ResultSet 對(duì)象。因此,如果讀取一個(gè) ResultSet 對(duì)象與讀取另一個(gè)交叉,則這兩個(gè)對(duì)象必須是由不同的 Statement 對(duì)象生成的。如果存在某個(gè)語(yǔ)句的打開(kāi)的當(dāng)前 ResultSet 對(duì)象,則 Statement 接口中的所有執(zhí)行方法都會(huì)隱式關(guān)閉它。提供用來(lái)執(zhí)行SQL語(yǔ)句的方法,返回SQL語(yǔ)句執(zhí)行的結(jié)果放在ResultSet對(duì)象中。4、接口 ResultSet 表示數(shù)據(jù)庫(kù)結(jié)果集的數(shù)據(jù)表,通常通過(guò)執(zhí)行查詢數(shù)據(jù)庫(kù)的語(yǔ)句生成。第二節(jié) 一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)訪問(wèn)程序在JAVA語(yǔ)言中,訪問(wèn)數(shù)據(jù)庫(kù)的基本步驟是:首先加載JDBC驅(qū)動(dòng)程序,建立與數(shù)據(jù)庫(kù)的連接,在建立與數(shù)據(jù)庫(kù)連接后執(zhí)行SQL語(yǔ)句,處理執(zhí)行結(jié)果,最后斷開(kāi)連接,關(guān)閉數(shù)據(jù)庫(kù)。舉例說(shuō)明:1、注冊(cè)驅(qū)動(dòng)程序(如果使用簡(jiǎn)單開(kāi)發(fā)環(huán)境,就需要重新配置環(huán)境變量classpath=.;D:oracleora92jdbclibclasses12.jar,重啟)。Class.forName(oracle.jdbc.driver.OracleDriver);2、創(chuàng)建數(shù)據(jù)庫(kù)連接:創(chuàng)建與指定數(shù)據(jù)庫(kù)連接,需要使用DriverManager類中的getConnection()方法。如果成功與數(shù)據(jù)庫(kù)建立連接,則返回一個(gè)Connection對(duì)象,否則會(huì)拋出一個(gè)SQLException異常。使用該方法的語(yǔ)法格式如下:Connection conn=DriverManager. getConnection(url,user,password);Connectionconn=DriverManager.getConnection(jdbc:oracle:thin::1521:WHF612,scott,tiger其中參數(shù)url字符串表示數(shù)據(jù)庫(kù)的具體位置,其中的jdbc:oracle:thin表示與數(shù)據(jù)庫(kù)連接的方式,::1521表示數(shù)據(jù)庫(kù)的IP地址和端口號(hào),:WHF612表示數(shù)據(jù)庫(kù)的名稱。后兩個(gè)參數(shù)user,password表示該數(shù)據(jù)庫(kù)的用戶名和密碼。3、創(chuàng)建SQL語(yǔ)句在建立與數(shù)據(jù)庫(kù)的連接并獲取連接對(duì)象后,就可以使用這個(gè)連接對(duì)象發(fā)送SQL語(yǔ)句。在JAVA中所有SQL語(yǔ)句都是由Statement對(duì)象發(fā)送到數(shù)據(jù)庫(kù)的。如果發(fā)送的SQL語(yǔ)句運(yùn)行后產(chǎn)生結(jié)果,Statement對(duì)象調(diào)用方法后會(huì)將該結(jié)果返回給一個(gè)ResultSet對(duì)象。由于Statement是接口,沒(méi)有構(gòu)造方法,不能實(shí)例化一個(gè)對(duì)象,所以需要使用Connection對(duì)象中的createStatement()方法。將該引用返回給Statement對(duì)象。Statement stmt = conn.createStatement();4、執(zhí)行SQL語(yǔ)句,處理執(zhí)行結(jié)果JDBC通過(guò)ResultSet對(duì)象接收結(jié)果,一個(gè)ResultSet對(duì)象包含了執(zhí)行SQL SELECT語(yǔ)句后返回的結(jié)果,而且還提供了對(duì)該結(jié)果的數(shù)據(jù)訪問(wèn)??梢哉{(diào)用ResultSet對(duì)象中的next()方法讀取結(jié)果中的數(shù)據(jù),如果有結(jié)果該方法返回true,否則返回false。因此可以使用該方法的返回值作為循環(huán)條件,訪問(wèn)所有結(jié)果中的數(shù)據(jù)。ResultSet rs = stmt.executeQuery(SELECT STUDENTID,NAME,AGE FROM STUDENT );while (rs.next()String id = rs.getString(STUDENTID);String name = rs.getString(NAME);String age = rs.getString(AGE);String dept = rs.getString(DEPART);System.out.println(id + + name + + age + );5、善后工作:斷開(kāi)連接,關(guān)閉數(shù)據(jù)庫(kù)等。分別利用ResultSet、Statement、Connection的close()方法,斷開(kāi)連接,關(guān)閉數(shù)據(jù)庫(kù)rs.close();stmt.close();conn.close();注意:這里可能會(huì)在關(guān)閉連接時(shí)出現(xiàn)異常,需要處理6、測(cè)試首先在在數(shù)據(jù)庫(kù)中建表,并插入幾條數(shù)據(jù),如下圖然后打開(kāi)eclipse ,建立新項(xiàng)目,并將Oracle目錄下jdbclib文件夾中的classes12.jar復(fù)制到項(xiàng)目中的lib目錄中:接著 右鍵點(diǎn)擊項(xiàng)目名稱whf屬性java構(gòu)建路徑選擇庫(kù)點(diǎn)擊添加jar選擇項(xiàng)目中的lib文件夾下的classes12.jar 確定。第三節(jié)一個(gè)稍微復(fù)雜的JDBC項(xiàng)目一、項(xiàng)目介紹:道里分公司的驢總想要搶南崗區(qū)炮子的地盤(pán),密謀暗殺炮子情報(bào)組的重要人物,但苦于沒(méi)有他們的資料,無(wú)從下手。于是驢總委托你去秘密連接炮子集團(tuán)的數(shù)據(jù)庫(kù),來(lái)取得其情報(bào)組重要資料。發(fā)出狠話:“只有一周時(shí)間,完成不了任務(wù),你小命不保”。由于時(shí)間緊

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論