計算機二級Java筆記/重難點易錯點總結(按章節歸納整理)
一、java的體系結構:
1、Java程式首先由編譯器轉換為標準位元組程式碼,然後由虛擬機器來解釋執行
Applet是java的一類特殊應用程式,它潛入HTML中,可以實現多媒體的使用者介面或複雜的計算,可以在瀏覽器上執行;
2、JDK的bin目錄下由編譯器、直譯器等工具;lib目錄下是庫檔案;jre目錄是java程式執行環境的程式碼庫;
3、java類庫的核心是java包,javax擴充套件包,Org包
Java包包括:
(1)java.lang包,封裝程式設計要用的基本類,包括Object、Class、System、Interger、Thread,是java程式預設引用的包
(2)java.awt包,封裝抽象視窗工具包,提供構建和管理使用者圖形介面的功能
(3)java.applet包,為Applet提供執行所需要的所有類,主要是訪問Applet內容的通訊類
(4)java.io包,向程式提供檔案輸入輸出操作的類
(5)java.util包,提供實用程式類和集合類,如日期方法、Arrays等;
Javax擴充套件包包括:
javax.swing包,提供構建和管理應用程式的圖形介面的輕量級構件
4、package語句在java程式中最多有一個,且位於最首位,用於使檔案存入指定包;
import語句在java程式中可以有任意個,必須在類定義之前;
原始檔中最多隻能有一個public類(公共類),且與原始檔名相同;
5、JDK中的主要工具:
(1)javac.exe:java編譯器,以.class為副檔名講原始碼譯為位元組碼,並存入工作目錄中,javac 檔名.java,其中,-d<目錄>可以指定儲存目錄;
(2)java.exe:java直譯器,執行位元組碼,java 類名 [程式引數];
(3)javadoc.exe:java文件生成器,對java原始檔和包以MML格式產生AP文件,javadoc
(4)javap.exe:java類分解器,對.class檔案提供位元組程式碼的反彙編並列印,javap 類名
二、Java簡單資料型別概論:
1、java變數、常量、物件和類的命名規則要求只能以字母、下劃線、美元符作為首字母,不能用數字或其他字元為首字母;
2、java命名出了第一條的要求,還有一些命名約定:
(1)在宣告類時,類名的首字母要求大寫,並且類名要顯示類的功能;建構函式與類名相同,所以建構函式的首字母要大寫
(2)介面名第一個字母要大寫,同(1);
(3)組成變數名各個單次的首字母要大寫,但第一個單詞的首字母要小寫;
(4)常量名要完全大寫;
(5)關鍵字均為小寫;
3、java中所有資料型別的長度都是固定的,因此沒有sizeof的保留字
4、對於浮點型資料,如果數字後沒有“f”的符號,則預設為double型資料;
5、各個資料型別的資料範圍
(1)byte:8位元組,-2^8~2^8-1,-128~127;
(2)short:16位元組,-2^16~2^16-1,-32768~32767;
(3)int:32位元組,-2^32~2^32-1;
(4)long:64位元組,-2^64~2^64-1;
(5)float:32位元組,
(6)double:64位元組,
(7)char:16位元組,0~65535(注意這個)
6、不能將boolean型資料轉化為其他基本資料型別
7、自動轉換方向:位數少的資料型別向位數多的資料型別轉換;
同時需要注意,字元型資料型別能向int資料型別自動轉換,而字串不可以
三、算術運算子
1、對於“+”號運算子,應當掌握:
(1)兩個運算元全為整數時,只要有一個數是long型,結果就是long型;
兩個數全是byte型或short型,表示式結果就是int型;
兩個數是浮點型,只要有一個術士double型,結果就是double型,否則為float型
(2)“+”號在表示字串連線的時,有兩種情況:
“abc”+3輸出結果為abc3
1+2+3+“abc”輸出結果為6abc
2、移位運算子中:
(1)算術右移>>:低位捨棄,高位補入原來高位的數值
(2)算術左移<<:高位捨棄,低位補0
(3)邏輯右移>>>:低位捨棄,高位補0
3、運算子的優先順序:算術運算子,位移運算子,關係運算符,位邏輯運算子,布林邏輯運算子,條件運算子,賦值運算子
四、流程控制
1、switch(expression)中,expression只能是int、short、byte、char,注意不能是浮點型資料及字串型別
五、類、陣列和字串操作
1、類是java中的基本結構單元,所有方法均在類中定義
2、包含main方法的主類必須是公共類
3、抽象類中必須至少包含一個抽象方法,有抽象方法的類必須宣告為抽象類,如錯題集的第6題
4、在方法內部,super代表對父類物件的引用,this代表對當前物件的引用,注意關鍵字都是小寫,不能首字母大寫
5、構造方法中只能使用成員變數,當引數與成員變數同名時,用關鍵字this指定當前物件
6、構造方法沒有返回值(但不需要用void宣告),不能認為呼叫,只能用new自動呼叫
7、介面是一種只含抽象方法或常量的一種特殊的抽象類,它不包含成員變數和方法實現,只包含常量和方法的定義;
注意:介面包含四類,第一類內部定義了抽象方法,第二類內部定義了常量,第三類內部定義了抽象方法和常量,第四類內部什麼也沒有,就是一個標誌作用,例如Serializable介面時實現物件序列化的工具,是一個空介面。
8、類變數又稱靜態變數,用static修飾;在一個static方法內部,隨時可以訪問類中的static成員變數,但是要訪問非static成員變數則必須壽險建立一個物件,然後通過物件訪問例項變數,如錯題集第7題;
9、java的內部類可以使用其所在類的靜態成員變數和例項成員變數,也可以使用其所在類的方法中的區域性變數
10、當基本資料型別的成員沒有被初始化時,會獲得一個預設初始值,如下表
11、java.util.ArrayList類是動態陣列,是Array的複雜版本,在執行時能夠動態地自動調整陣列的大小,因此定義陣列時不必限定陣列的大小,在列表初始化時可以用add()方法對陣列元素賦值;
12、java.lang.String用於處理長度不變的字串;java.lang.StringBuffer用來處理長度變化的字串;
六、異常處理
1、Throwable類是所有異常類的父類,分為Error和Exception兩個子類;
2、throws關鍵字通常被應用在宣告方法時,指定方法可能丟擲的異常,多個異常用逗號隔開;
throw關鍵字通常用於方法體中,並明確丟擲一個異常物件(見《從入門到精通》P224例12.8)
七、輸入輸出及檔案操作
1、File類提供的方法:
(1)對檔名操作提供的方法:
①public String getName(),得到一個不包含路徑的檔名;
②public String getParent(),得到檔案的上一層目錄;
③public String getPath(),得到檔案路徑名字串,即路徑檔名;
④public String[] list(),返回一個字串陣列,是此檔案所在目錄下的所有檔名列表;
⑤public String renameTo(File newName),返回重新命名後的檔名;
⑥public String getAbsolutePath(),返回一個檔案的絕對路徑名;
⑦public File getParentFile(),得到檔案物件的父路徑名;
(2)測試檔案屬性操作所提供的方法:
①public Boolean isAbsolute(),測定是否是絕對路徑,返回布林值;
②public Boolean isDirectory(),測定是否是目錄;
③public Boolean exists(),測定檔案是否存在;
④public Boolean canRead(),測定是否是可讀檔案;
⑤public Boolean canWrite(),測定是否是可寫檔案;
(3)為檔案資訊操作和工具所提供的方法:
①public long length(),返回檔案的位元組長度;
②public long lastModified(),返回檔案最後修改時間;
(4)為目錄操作所提供的方法:
①public Boolean mkdir(),建立目錄;
②public Boolean mkdirs(),建立包含父目錄的目錄;
③public String[] list(),返回當前目錄下的檔案
2、隨機檔案流RandomAccessFile類,直接繼承Object類,兼有輸入和輸出功能,即同時實現了DataInput和DataOutput介面。
由於它是隨機訪問,因此檔案讀寫一個記錄的位置是任意的;
3、二進位制檔案可以作為FileOutputStream的構造方法的引數,而FileOutputStream物件作為DataOutputStream的構造方法的引數實現DataOutputStream類,如下例:
同理對input;
4、ByteArrayInputStream、ByteArrayOutputStream、StringBufferInputStream類是可以直接訪問記憶體的;
5、Reader類和Writer類是抽象類,不能用來產生例項物件;
6、FilterInputStream和FilterOutputStream抽象類保證某時刻只有一個執行緒訪問一個I/O流;
Java對I/O訪問所提供的同步處理機制是過濾流,位元組流、字元流、檔案流均不能提供同步;
7、關於對java的I/O部分的理解,見部落格:
八、執行緒與物件序列化
1、執行緒和程序的區別:
(1)多個程序的內部資料和狀態都是完全獨立的,而多執行緒是共享一塊記憶體空間和一組系統資源,有可能互相影響;
(2)程序是核心級的實體,程序結構的所有成分都在核心空間中,一個使用者程式不能直接訪問這些資料;
執行緒是使用者級的實體,縣城結構駐留在使用者空間中,能夠被普通使用者級方法直接訪問;
(3)程式、程序和執行緒的關係:
程式是一段靜態程式碼,它是應用軟體執行的藍本。程序對應與程式碼從載入到執行完畢的一個完整過程。作為執行藍本的一段程式,可以被多次載入導系統的不同記憶體區域執行,形成不同的執行緒,而執行緒是比程序更小的單位。執行緒是程式執行中的一個子程序。
2、執行緒模型包括:
(1)一個虛擬的CPU;
(2)此CPU所執行的程式碼;
(3)程式碼所操縱的資料;
3、java中的執行緒體是由執行緒類的run()方法定義的,此方法定義執行緒的具體行為;
實現run()方法有兩種方式,實現Runnable介面和繼承Thread類
4、在java.lang中,Runnable介面被定為:
public interface Runnable{
void run();
}
通過Runnable介面建立執行緒的演示:
public class X extends Thread implements Runnable{
public void run(){
System.out.println("this is run()");
}
public static void main(String args[]){
Thread t= new Thread(new X()); //將Runnable的一個例項作為引數傳遞給Thread類
t.start();
}
}
5、新建的執行緒不會自動執行,必須呼叫執行緒的start()方法,start()方法會自動呼叫run()方法;
6、以同一個類的某一個物件為引數只能構造一個執行緒(見錯題13)
7、注意,run()方法必須是不帶引數的,且必須宣告為void,即沒有返回值;
8、執行緒的優先順序劃分為:MIN-PRIORITY(常數1)、NORM_PRIORITY(常數5)、MAX-PRIORITY(常數10);
getPriority()方法用來獲取執行緒的優先順序,setPriority用來設定執行緒的優先順序;
建立執行緒後的任何時候都可以設定優先順序
9、yield()方法只能使同優先順序的執行緒有執行的機會;
10、一個程式中單獨的、併發的執行緒對同一個物件進行訪問的程式碼段稱為臨界區,在java中用關鍵字synchronized標識。
由synchronized語句指定的每個物件設定一個鎖,稱為物件鎖;當一個執行緒獲得了物件鎖之後,便擁有此物件的操作權,其他執行緒不能對此物件進行任何操作;
11、語句:synchronized(物件名);
或public synchronized void 函式名(){ …… }
12、java中沒有檢測和避免死鎖的專門機制,為了避免死鎖,java程式中可以先定義獲得鎖的順序,解鎖按加鎖的反序釋放;
13、wait()和notify()都是java.lang.object類的方法,是實現執行緒通訊的方法;
wait()方法用於使執行緒等待並釋放共享資料物件的鎖,使其他執行緒能夠獲得此執行緒的鎖;
notify()方法用於通知正在等待的執行緒重新佔有鎖並執行;
14、阻塞狀態分為物件鎖阻塞狀態,等待阻塞狀態和其他阻塞狀態;
15、可執行狀態下:
start()方法:執行緒狀態從新建狀態轉為可執行狀態,但此時執行緒僅僅可以執行,不一定正在執行;
執行狀態下:
正常執行結束,則進入終止狀態;
yield()方法:當前執行緒進入可執行狀態;
sleep()方法:當前執行緒進入其他阻塞狀態,睡眠時間到了將進入可執行狀態
join()方法:當前執行緒進入其他阻塞狀態;t.join()方法下當t執行緒結束或時間到後,執行緒進入可執行狀態
wait()方法:當前執行緒進入等待阻塞狀態;用notify()方法或時間到了之後,進入物件鎖阻塞狀態
執行緒請求物件的鎖未獲得,進入物件鎖阻塞狀態;此狀態下,獲得鎖後進入可執行狀態;
執行緒中有輸入輸出操作,進入阻塞狀態;當輸入輸出操作結束後,進入可執行狀態;
九、圖形使用者介面
swing部分:
1、Swing是java實現的輕量級結構,不依賴作業系統所提供的支援,這是它與AWT的最大區別;
2、Swing構件都是AWT的Container類的直接子類或間接子類;
大多數Swing構件又是JComponent的子類,它是一個抽象類;
javax.swing包中定義了兩種型別的構件:頂層容器(JFrame,Japplet,Jdialog,JWindow)和輕量級構件;
3、Swing採用一種成為MVC的設計正規化,即“模型-檢視-控制器”,模型用來儲存內容,檢視用來顯示內容,控制器用來控制使用者的輸入;
4、Swing雖然有頂層容器(JFrame,Japplet,Jdialog,JWindow),但是不能把構件直接新增到頂層容器中,必須先獲取容器中的內容面板,在把構件加入內容面板中,例如:
JFrame jf=new Jframe(title);
Container container=jf.getContenPane();
container.add(……);