計算機二級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部分的理解,見博客:

     http://blog.csdn.net/htq__/article/details/50993262?ticket=ST-26715-qyQeAEye3eKez9R5kPp5-passport.csdn.net

八、線程與對象串行化

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章