第十四章 集合類
14.1 Collection 接口
14.2 List 集合
1.List接口,兩個重要方法:
2.List接口的實現類
14.3 Set 集合
14.4 Map 集合
第十五章 I/O輸入輸出
15.1 輸入輸出流
15.2 File類
15.3文件輸入輸出流
15.3.1 FileInputStream與FileOutputStream類
15.3.2 FileReader類和FileWriter類
使用方法:
File file = new File("G:/word.txt");
char a[] = new char[1024];
FileReader reader= new FileReader(file);;
FileWriter fw = new FileWriter(file);
fw.write(a);
fw.close();
int len = reader.read(c);
System.out.println(new String(c,0,len));
reader.close();
15.4 帶緩存的輸入輸出流
15.5 數據輸入輸出流
15.6 ZIP壓縮輸入輸出流
第十六章 反射
◆16.1.Class類
getFields():獲得類的public類型的屬性(成員變量)。
getDeclaredFields():獲得類的所有屬性。
getMethods():獲得類的public類型的方法。
getDeclaredMethods():獲得類的所有方法。
getMethod(String name, Class[] parameterTypes):獲得類的特定方法,name參數指定方法的名字,parameterTypes參數指定方法的參數類型。
getConstrutors():獲得類的public類型的構造方法。
getConstrutor(Class[] parameterTypes):獲得類的特定構造方法,parameterTypes參數指定構造方法的參數類型。
newInstance():通過類的不帶參數的構造方法創建這個類的一個對象。
Object objectCopy=classType.getConstructor(new Class[]{}).newInstance(new Object[]{});
Field fields[]=classType.getDeclaredFields();
以上代碼先調用Class類的getConstructor()方法獲得一個Constructor對象,它代表默認的構造方法,然後調用Constructor對象的newInstance()方法構造一個實例。
for(int i=0; i Field field=fields[i];
String fieldName=field.getName();
String firstLetter=fieldName.substring(0,1).toUpperCase();
//獲得和屬性對應的getXXX()方法的名字 String getMethodName="get"+firstLetter+fieldName.substring(1);
//獲得和屬性對應的setXXX()方法的名字 String setMethodName="set"+firstLetter+fieldName.substring(1);
//獲得和屬性對應的getXXX()方法
Method getMethod=classType.getMethod(getMethodName,new Class[]{});
//獲得和屬性對應的setXXX()方法
Method setMethod=classType.getMethod(setMethodName,new Class[]{field.getType()});
//調用原對象的getXXX()方法
Object value=getMethod.invoke(object,new Object[]{});
System.out.println(fieldName+":"+value);
//調用複製對象的setXXX()方法
setMethod.invoke(objectCopy,new Object[]{value});}
◆16.2.Method類(訪問方法)
invoke()方法的返回值總是對象,如果實際被調用的方法的返回類型是基本類型數據,那麼invoke()方法會把它轉換爲相應的包裝類型的對象,再將其返回。
◆16.3.Array類
◆16.4.Annotation類型
1.Annotation功能可用於類、構造方法、成員變量、方法、參數等的聲明中。該功能不影響程序運行,但會對編輯器的警告等輔助工具產生影響。16.4.2訪問Annotation信息
第十七章 枚舉類型與泛型
17.1 枚舉類型
{ Sun,Mon,Tue,Wed,Thu,Fri,Sat}
該集合可定義爲描述星期的枚舉類型,該枚舉類型共有七個元素,因而用枚舉類型定義的枚舉變量只能取集合中的某一元素值。由於枚舉類型是導出數據類型,因此,必須先定義枚舉類型,然後再用枚舉類型定義枚舉型變量。
2.語法:
enum <枚舉類型名>
{ <枚舉元素表> };
其中:關鍵詞enum表示定義的是枚舉類型,枚舉類型名由標識符組成,而枚舉元素表由枚舉元素或枚舉常量組成。例如:
enum weekdays
{ Sun,Mon,Tue,Wed,Thu,Fri,Sat };
3.用戶可以將一個枚舉類型看作一個類(但需在類內定義!),它繼承於java.lang.Enum類,當定義一個枚舉類型時,每一個枚舉類型成員都可以看作是枚舉類型的一個實例,這些枚舉類型成員默認都被final、public、static所修飾,所以當使用枚舉成員時直接使用枚舉類型名稱調用枚舉類型成員即可。
4.枚舉類型常用方法:
values(),將枚舉類型的成員變量實例以數組的形式返回,也可通過該方法獲取枚舉類型的成員。
valueOf(),可以將普通字符串轉換爲枚舉類型。
compareTo(),用於比較兩個枚舉類型對象定義時的順序。
ordinal(),獲取某個枚舉對象的位置索引值。
5.在枚舉類型中,可以添加構造方法,但是構造方法必須爲private修飾符所修飾。
17.2 泛型
第十八章 多線程
1. 世間萬物都可以同時完成多項工作,這種思想放在Java中被稱爲併發,而將併發完成的每一件事情稱爲線程。程序員在Java程序中可以執h行多個線程,每個線程完成一個功能,並與其他線程併發執行,這種機制稱爲多線程。
2. 進程:每個進程是一個包含有自身地址的程序,每個立執行的程序都稱爲進程,也就是正在執行的程序。
3.一個線程是進程中的執行流程,一個進程中可以同時包括多個線程,每個線程可以得到一小段程序的執行時間,這樣一個進程就可以具有多個併發執行的線程。
18.1 實現線程的兩種方式
1.繼承Thread類
1.Thread類是Java.lang包中的一個類,從這個類中實例化的對象代表線程,程序員啓動一個新線程需要建立Thread實例。
2.Thread類中常用的構造方法:publicThread([String threadName]) //StringthreadName線程名稱
3.完成線程真正功能的代碼放在類的run()方法中,而Thread類中start()方法執h行線程,也就是調用run()方法。主方法線程啓動由Java虛擬機負責,程序員負責啓動自己的線程。
2. 實現Runnable接口
1.如果程序員需要繼承其他類(非Thread類),而且還要是當前類實現多線程,由於Java不支持多繼承,就只能通過Runnable接口實現。(實質上
Thread類就是實現了Runnable接口)
2.語法:publicclass Thread extends Object implements Runnable
3.實現Runnable接口的程序會創建一個Thread對象,並將Runnable對象與Thread對象相關聯。Thread類中有以下構造方法:
public Thread(Runnable r,[String name]) //此構造方法可以將Runnable實例與Thread實例相關聯。
4.使用Runnable接口啓動新線程的步驟:
建立Runnable對象;
使用參數爲Runnable對象的構造方法創建Thread實例;
調用start()方法啓動線程。
實例:
- package mythread;
- public class MyRunnable implements Runnable
- {
- public void run()
- {
- System.out.println(Thread.currentThread().getName());
- }
- public static void main(String[] args)
- {
- MyRunnable t1 = new MyRunnable();
- MyRunnable t2 = new MyRunnable();
- Thread thread1 = new Thread(t1, "MyThread1");
- Thread thread2 = new Thread(t2);
- thread2.setName("MyThread2");
- thread1.start();
- thread2.start();
- }
- }
18.2 線程的生命週期
線程包含7中狀態:出生狀態、就緒狀態、運行狀態、等待狀態、休眠狀態、阻塞狀態和死亡狀態。
18.3 操作線程的方法
1.線程的休眠(sleep())
sleep()方法需要一個參數用於指定該線程休眠的時間,以毫秒爲單位
語法:Thread.sleep(2000);
2.線程的加入(join())
在A線程中插入B線程。當某個線程使用join()加入到另一個線程時,另一個線程會等待該線程研究完畢後再繼續執行。
3.線程的中斷(stop())
當前不建議使用stop()方法,提h倡在run()方法中使用無限循環的形式,然後使用一個布爾型標價控制循環的停止。
18.4 線程的優先級
Thread類中包含的成員變量代表了線程的某些優先級,如Thread.MIN_PRIORITY(常數1)、Thread.MAX_PRIORITY(常數10)、Thread.NORM_PRIORITY(常數5)【默認】
線程的優先級可以使用setPriority方法調整
18.5 線程同步
線程同步機*^製爲瞭解決資源共享時,發生多個線程同一時間共享一個資源的情況。採用給定時間只允許一個線程訪問共享,給共享資源上一道鎖。
同步機hh制使用synchronized關鍵字。
1.同步塊語法:
synchronized(Object){ 語句 }
2.同步方法語法:
synchronized voidf(){ }
第十九章 網絡通信
19.1 網絡程序設計基礎
1.網絡程序設計是指編寫與其他計算機進行通信的程序。2.網路協議,規定了計算機之間連接的物理、機械(網卡與網線的連接規定)、電氣(有效地電平範圍)等特徵及計算機之間的相互尋址規則、數據發送衝突的解決,長的數據如何分段傳送與接收等。
3.TCP/IP協議棧中,有兩個高級協議:“傳輸控制協議”(TCP)與“用戶數據報協議”(UDP)
4.TCP協議以固接連線爲基礎的協議,數據傳送可靠。.UDP是無連接通信協議,不保證可靠的數據傳輸。
5.一般一臺計算機只有單一的連到網絡的“物理連接”,這就是端口。網絡程序設計中的端口(Port)並非真實的物理存在,而是假象的連接裝置。端口被規定爲一個在0~65535之間的整數。HTTP服務一般使用80端口。FTP服務使用21端口。
6.通常0~1023之間的端口數用於一些知名的網絡服務和應用,用戶的普通網絡應用程序應該使用1024以上的端口數,避免衝突。
7.網絡程序中套接字(socket)用於將應用程序與端口連接起來。套接字是一個假想的連接裝置,就像插座,用來連接電器與電線。Java將套接字抽象化爲類--Socket類。
Socket類的常用方法:
- public Socket(InetAddress address,int port) throws IOException
- public Socket(String host,int port) throws UnknowHostException,IOException
- public Socket(InetAddress address,int port,InetAddress localAddr,int localport) throws IOException
- public InetAddress getInetAddress()//返回套接字連接的主機地址
- public InetAddress getLocalAddress()//返回套接字綁定的本地地址
- public InputStream getInputStream()throws IOException//獲得該套接字的輸入流
- public int getLocalPort()//返回套接字綁定的本地端口
- public int getPort()//返回套接字連接的遠程端口
- public OutputStream getOutputSteam()throws IOException//返回該套接字的輸出流
- public int getSoTimeout()throws SocketException//返回該套接字最長等待時間
- public void setSoTimeout(int timeout)throws SocketException//設置該套接字最長等待時間
- public void shutdownInput()throws IOException//關閉輸入流
- public void shutdownOutput()throws IOException//關閉輸出流
- public void close()throws IOException//關閉套接字
19.2 TCP程序設計基礎
19.2.1 InetAddress類
常用方法有:
getByName(String host) //獲取與Host相對應的InetAddress對象
getHostAddress() //獲取InetAddress對象所含的IP地址
getHostName() //獲取此IP地址的主機名
getLocalHost() //返回本地主機的InetAddress對象
19.2.2 ServerSocket類
- public ServerSocket(int port) throws IOException
- public ServerSocket(int port,int backlog) throws IOException
- public ServerSocket(int port,int backlog,InetAddress bindAddr) throws IOException
- public Socket accept() throws IOException//監聽並接受客戶端Socket連接
- public InetAddress getInetAddress()//返回服務器套接字的本地地址
- public int getLocalPort()//返回套接字監聽的端口
- public int getSoTimeout()throws SocketException//返回該套接字最長等待時間
- public void setSoTimeout(int timeout)throws SocketException//設置該套接字最長等待時間
- public void close()throws IOException//關閉套接字
19.2.3 TCP網絡程序
19.3 UDP程序設計基礎
UDP程序的步驟:
a.使用DatagramSocket(int port)創建數據包套接字,綁定到指定的端口
b.使用DatagramPacket(byte[] buf,int length)創建字節數組來接收數據包。
c.使用DatagramPacket類的receive()方法接收UDP包。
DatagramPacket類
DatagramSocket類
補充:
第二十章 數據庫操作
2.數據庫指的是以一定方式儲存在一起、能爲多個用戶共享、具有儘可能小的冗餘度、與應用程序彼此獨立的數據集合
20.1 SQL語言主要部分組成:
常用數據操縱語言:
1.select語句
2.insert語句
3.update語句
4.delete語句
20.2 JDBC
1.JDBC技術
2.JDBC驅動類型
1)JDBC-ODBC橋
把標準的JDBC調用轉換成相應的ODBC調用,並通過ODBC庫把它們發送給ODBC數據源。這種方式訪問數據庫,需要經過多層調用,效率比較低。訪問Micros Access數據庫,就只能通過這種方式來訪問。
2)部分本地API Java驅動程序
利用JDBC API訪問數據庫時,JDBC驅動程序將調用請求轉換爲數據庫廠商提供的本地API調用,數據庫處理完請求將結果通過這些API返回,進而返回給JDBC驅動程序,JDBC驅動程序將結果轉化爲JDBC標準形式,再返回客戶程序。
這種類型減少了ODBC的調用環節,極高了數據庫訪問的效率,並且能夠充分利用廠商提供的本地API的功能。
3)JDBC網絡純Java驅動程序(首先)
這種驅動利用應用服務器作爲中間件來訪問數據庫。應用服務器作爲一個到多個數據庫的網關,客戶端通過它可以連接到不同的數據服務器。應用服務器都有自己的網絡協議,Java客戶程序通過JDBC驅動程序將JDBC調用發送給應用服務器,應用服務器使用本地驅動程序訪問數據庫,從而完成請求。
4)本地協議的純Java驅動程序(首先)
客戶程序通過網絡直接與數據庫進行通信。數據庫訪問效率最高。