1. 程式人生 > >計算機二級Java筆記/重難點易錯點總結(按章節歸納整理)

計算機二級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

包名 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(……);