Java 核心技術卷Ⅰ筆記
第1 章 Java 程序設計概述
一、 Java 和C++最大的不一樣在於Java 採用的指針模型能夠消除重寫內存和損壞數據的可能性。
二、虛擬機有一個選項,能夠將使用最頻繁的字節碼序列翻譯成機器碼,這一過程被稱爲即
時編譯。
三、在Java 中,數據類型具備固定的大小。
第2 章 Java 程序設計環境
一、JDK 目錄樹
二、運行applet 格式
javac filename.java
appletviewer filename.html
第3 章 Java 基本的程序設計結構
一、在一個單詞的中間使用大寫字母的方式稱爲駱駝命名法。
二、根據Java 語言規範,main 方法必須聲明爲public。(在JavaSE1.4 及之後的版本中將強
制main 方法是public 的)
三、在Java 中,/* */註釋不能嵌套。
四、在Java 中,整型的範圍與運行Java 代碼的機器無關。
五、Java 沒有任何無符號類型(unsigned type)。
六、 浮點數值不適用于禁止出現舍入偏差的金融計算中。例如,命令System.out.println(2.0-1.1)
將打印出0.8999999999999999,而不是人們想象的0.9。
七、整數被0 除將會產生一個異常,而浮點數被0 除將會獲得無窮大或NaN 結果。
八、Java 提供了計算用於表示 和e 常量的近似值:
Math.PI
Math.E
九、「==」運算符只可以肯定兩個字符串是否放置在同一個位置上。
十、輸入是可見的,因此Scanner類不適用於從控制檯讀取密碼。Console類實現了這個目的。要想讀取一個密碼,能夠採用下列代碼:
Console cons = System.console();
String username = cons.readLine("User name: ");
char[] passwd = cons.readPassword("Password: ");
十一、Java SE5.0沿用了C語言庫函數中的printf方法。
十二、java.math包中的BigInteger和BigDecimal能夠處理包含任意長度數字序列的數值。BigInteger類實現了任意精度的整數運算,BigDecimal實現了任意精度的浮點數運算。不能使用人們熟悉的算術運算符(如:+和*)處理大數值。而須要使用大數值類中的add和multiply方法。
◆使用靜態的valueOf()方法能夠將普通的數值轉換爲大數值:
BigInteger a = BigInteger.valueOf(4);
1三、Java SE 5.0增長了For each循環,格式:
for(varible:collection){
statement;
}
利用For each訪問二維數組a的全部元素:
for(Type[] row:a){
for(Type[] value:row){
do something with value;
}
}
1四、利用Arrays類的toString方法,能夠更加簡單的打印一維數組中的全部值。打印多維數組,須要調用Arrays.deepToString()(此方法不能打印一維數組)。
1五、在Java中,容許數組長度爲0。數組長度爲0與null不一樣。
第4章 對象與類
一、使用通配符「*」調用Java編譯器:
javac Employee*.java
因而,全部與通配符匹配的源文件都將被編譯成類文件。
二、全部的Java對象都是在堆中構造的。
三、不要編寫返回引用可變對象的訪問器方法。破壞了封裝性。若是須要返回一個可變對象的引用,應該首先對它進行克隆。
四、建議使用類名,而不是對象來調用靜態方法。
五、Java程序設計語言對對象採用的並非引用調用。
六、僅當類沒有提供任何構造器的時候,系統纔會提供一個默認的構造器。
七、在Java中,一個構造器不能調用另外一個構造器!
八、可使用Java編寫一個沒有main方法的「Hello World」程序:
public class HelloWolrd {
static {
System.out.println("Hello World!");
System.exit(0);//使其不報錯!
}
}
九、 在實際應用中,不要依賴於使用finalize方法回收任何短缺的資源,這是由於很難知道個方法社麼時候纔可以調用。
十、Sun公司建議將公司的因特網域名(因其獨一無二)以逆序的形式做爲包名。
十一、從Java SE5.0開始,import語句不只能夠導入類,還增長了導入靜態方法和靜態域的功能。(我的以爲少用爲好,因其使代碼艱澀難懂)
十二、註釋:
(1)類註釋應該放在import語句以後,類定義以前;
(2)每個方法註釋應該放在所描述的方法以前。
1三、這些技巧可使設計出來的類更具備OOP的專業水準:
(1)必定將數據設計爲私有。
(2)必定要對數據初始化。
(3)不要在類中使用過多的基本數據類型。
(4)不是全部的域都須要獨立的域訪問器和域更改器。
(5)使用標準格式進行類的定義。
(6)將職責過多的類進行分解。
(7)類名和方法要可以體現他們的職責。
第5章 繼承
一、在Java中,全部的繼承都是公有繼承。
二、super()只能做爲子類構造器的第一句出現!
三、一個對象變量能夠引用多種實際類型的現象被稱爲多態。在運行時可以自動地選擇調用哪一個方法的現象稱爲動態綁定。
四、在Java中,子類數組的引用能夠轉換成超類數組的引用。
五、若是是private方法、static方法、final方法或者構造器,那麼編譯器將能夠準確地知道應該調用哪一個方法,這種方式稱爲靜態調用。
六、 在覆蓋一個方法的時候,子類方法不能低於超類方法的可見性。若是超類方法是public,
子類方法必定要聲明爲public。
七、若是將一個類聲明爲final,只有其中的方法自動地成爲final,而不包括域。
八、將一個子類的引用賦給一個超類變量,編譯器是容許的。但將一個超類的引用賦給一個子類變量,必須進行類型轉換,這樣纔可以經過運行時的檢查。
(1)只能在繼承層次內進行類型轉換;
(2)在將超類轉換成子類以前,應該使用instanceof進行檢查。
九、包含一個或多個抽象方法的類自己必須被聲明爲抽象的。
十、在Java中,只有基本類型不是對象。
十一、全部的基本類型都有一個與之對應的類。Integer、Long、Float、Double、Short、Byte、Character、Void和Boolean(前6個類派生於公共的超類Number)。對象包裝器類是不可變的,即一旦構造了包裝器,就不容許更改包裝在其中的值。對象包裝器類仍是final,所以不能定義它們的子類。
十二、在比較兩個枚舉類型的值時,永遠不須要調用equals,而直接使用「==」就能夠了。
1三、可以分析類能力的程序被稱爲反射。
1四、一個設計繼承關係類的建議:
(1)將公共操做和域放在超類。
(2)不要使用受保護的域。
(3)使用繼承實現「is-a」關係。
(4)除非全部的繼承的方法都有意義,不然不要使用繼承。
(5)在覆蓋方法時,不要改變預期的行爲。
(6)使用多態,而非類型信息。
(7)不要過多地使用反射。
第6章 接口與內部類
一、在接口中能夠定義常量。但接口毫不能含有實例域,也不能在接口中實現方法。
二、不能使用new運算符實例化一個接口,卻能聲明接口的變量。
三、接口中的方法都自動地被設置爲public,接口中的域自動被設爲public static final。
四、在Object類中,clone方法被聲明爲protected。全部的數組類型均包含一個clone方法,這個方法被設爲public,而不是protected的。
五、編譯器將會把內部類翻譯成用$(美圓符號)分隔外部類名與內部類名的常規類文件。
六、final變量只可以被賦值一次(在定義的時候或構造方法中)。在定義final變量的時候,沒必要進行初始化。將一個類或數組定義爲final時,對象的引用不能更改,對象的值能更改!
七、聲明在接口中的內部類自動成爲static和public。
第7章 圖形程序設計
一、抽象窗口工具箱(Abstract Window Toolkit,AWT)。
二、Swing沒有徹底替代AWT,而是基於AWT架構之上。
三、JFrame是極少數幾個不繪製在畫布上的Swing組件之一。它的修飾部件(按鈕、標題欄、圖標等)由用戶的窗口系統繪製,而不是由Swing繪製。在默認狀況下,框架的大小爲0×0。
四、在初始化語句結束後,main方法退出。退出main並無終止程序,終止的只是主線程。
五、關閉框架裝飾:frame.setUndecorated(true);
禁止改變框架大小:frame.setResizable(flase);
六、對於框架來講,setLocation和setBounds中的座標均相對於整個屏幕。在容器中包含的組件所指的座標均相對於容器。
七、獲取屬性類方法以get開頭(一個例外,對於類型爲boolean的屬性,獲取類方法由is開頭);設置屬性類方法以set開頭;
八、獲取屏幕的大小:
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int WIDTH = screenSize.width;
int HEIGHT = screenSize.height;
九、調用pack方法設置框架大小,框架將被設置爲恰好可以放置全部組件的大小。
十、JFrame中有四層面板。
十一、若是須要強制刷新屏幕,就須要調用repaint方法。
十二、Java 2D圖形採用的是浮點座標。
1三、Rectangle2D方法的參數和返回值均爲double類型。
1四、java.awt.Color類中提供了13個預約義的常量,它們分別表示13中標準顏色。
1五、Color類中的brighter()方法和darker()方法的功能分別是加亮或變暗當前的顏色。
1六、Color(int r, int g, int b):建立一個顏色對象。參數:
r:紅色值(0-255)
g:綠色值(0-255)
b:藍色值(0-255)
1七、字體名由字體家族名和一個可選的「Bold」後綴組合。Sun JDK包含3種字體,它們是「Lucida Sans」,「Lucida Bright」和「Lucida SansTypewriter」。
第8章 事件處理
一、在按鈕示例中,使用的ActionListener接口並不只限於按鈕點擊事件。它能夠應用於不少狀況:
(1)當採用鼠標雙擊的方式選擇了列表框中的一個選項時;
(2)當選擇一個菜單項時;
(3)當在文本域中敲擊ENTER鍵時;
(4)對於一個Timer組件來講,當到達指定的時間間隔時。
二、(1)Object getSource():返回發生事件的對象引用。
(2)String getActionCommand():返回與這個動做事件相關的命令字符串。
三、Swing程序只在啓動時讀取一次swing.propertise文件(在Java安裝的子目錄jre/lib下)。
四、當程序用戶試圖關閉一個框架窗口時,JFrame對象就是WindowEvent的事件源。
WindowListener接口中包含7個方法。WindowListener接口:
public interface WindowListener{
void windowOpened(WindowEvent e);
void windowClosing(WindowEvent e);
void windowClosed(WindowEvent e);
void windowIconified(WindowEvent e);
void windowDeiconified(WindowEvent e);
void windowActivated(WindowEvent e);
void windowDeactvated(WindowEvent e);
}
◆僅當調用hide或dispose方法後窗口才可以關閉。
五、void WindowStateChanged(WindowEvent event):窗口被極大化、圖標化或恢復爲正常大小時調用這個方法。
六、能夠利用Toolkit類中的createCustomCursor方法自定義光標類型:
Toolkit tk = Toolkit.getDefaultToolkit();
Image img = tk.getImage("src\\note\\光標.gif");
Cursor dynamiteCursor = tk.createCustomCursor(img, new Point(10,10), "src\\note\\光標.gif");
七、只有鼠標在一個組件內部停留纔會調用mouseMoved方法。即便鼠標拖動到組件外面,mouseDragged方法也會被調用。
八、全部的事件都是由java.util包中的EventObject類擴展而來的。
第9章 Swing用戶界面組件
一、沒有一種模式可以使用與全部狀況。
二、每一個Swing組件都有一個相關的後綴爲UI的視圖對象,但並非全部的Swing組件都有專門的控制器對象。
三、JFrame是Container的子類,也是Component的子類,但卻不能放在其它容器內。
四、邊框佈局管理器(BorderLayout)是每一個JFrame的內容窗格的默認佈局管理器。當佈局管理器爲BorderLayout時,當容器被收縮時,邊緣組件的厚度不會改變,而中部組件的大小會發生變化。
五、面板的默認佈局管理器是FlowLayout。
六、在JTextField的構造器中設定的寬度並非用戶能輸入的字符個數的上限。當文本長度超過文本域長度時輸入就會滾動。
七、revalidate方法會從新計算容器內全部組件的大小,而且對它們從新進行佈局。它並非立刻就改變組件大小,而是給這個組件加一個須要改變大小的標記。
八、若是想要將getText方法返回的文本域中的內容的先後空格去掉,就應該調用trim()方法。
九、從JDK1.3開始,能夠在按鈕、標籤和菜單項上使用無格式文本或HTML文本。
◆包含HTML標籤的第一個組件須要延遲一段時間才能顯示出來。
十、void setEchoChar(char echo):爲密碼域設置回顯字符。
十一、JTextArea組件只顯示無格式的文本,沒有字體或者格式設置。若是想要顯示格式化文本(如HTML或者RTF),就須要使用JeditorPane和JTextPane。
十二、當複選框得到焦點時,用戶也能夠經過按空格鍵來切換選擇。
1三、複選框爲正方形;單選框爲圓形。
1四、調用BorderFactory的靜態方法建立邊框。
1五、調用setEditable方法可讓組合框可編輯。注意,編輯只會影響當前項,而不會改變列表內容。
1六、滑塊(JSlider)容許進行連續值的選擇。
1七、彈出菜單的顯示,如:popup.show(panel,x,y);
1八、啓用或禁用菜單項須要調用setEnable方法。
◆在顯示菜單以前禁用菜單項是一種明智的選擇,但這種方式不適用與帶有加速鍵的菜單項。
1九、工具欄的特殊之處在於能夠將它隨處移動。能夠將它拖拽到框架的四個邊框上。
◆工具欄只有位於採用邊框佈局或者任何支持North、East、South和West約束佈局管理器的容器內纔可以被拖拽。
20、在默認狀況下,工具欄最初爲水平的。
2一、可使用setToolTipText()方法將工具提示添加到JComponent上。
2二、在2005年,NetBeans開發隊伍發明了Matisse技術,這種技術將佈局工具與佈局管理器與
合起來。
2三、網格組佈局(GridBagLayout)是全部佈局管理器之首。能夠將相鄰的單元合併以適應較大的組件。
2四、任何高級技術都源於奇特的想法之中。
2五、可能想確保文本域和密碼域的寬度相等。在Matisse中,選擇這兩個組件,而後點擊鼠標右鍵,並從菜單中Same Size->Same Width。
2六、將一個組件定位到某個絕對定位的步驟:
(1)將佈局管理器設置爲null。
(2)將組件添加到容器中。
(3)指定想要放置的位置和大小。
2七、Swing的遍歷順序:從左至右,從上至下。
2八、在遍歷大子容器的最後一個元素以後,焦點並不回到第一個元素上,而是跳到容器的後繼組件上。
2九、AWT分爲模式對話框和無模式對話框。模式對話框是指在結束對它的處理以前,不容許用戶與應用程序的其他窗口進行交互。
30、JOptionPane有4個用於顯示對話框的靜態方法:
(1)showMessageDialog:顯示一條消息並等待用戶點擊OK。
(2)showConfirmDialog:顯示一條消息並等待用戶確認。
(3)showOptionDialog:顯示一條消息並得到用戶在一組選項中的選擇。
(4)showInputDialog:顯示一條消息並得到用戶輸入的一行文本。
3一、擁有者框架控制對話框的顯示位置,若是將擁有者標識爲null,那麼對話框將由一個隱藏框架所擁有。
第10章 部署應用程序和applet
一、 Java歸檔(JAR,Java Archive)文件是壓縮的,它使用ZIP壓縮格式。
二、 清單文件的最後一行必須以換行符結束。不然,清單文件將沒法被正確地讀取。
三、 在沙箱中的程序有下列限制:
(1)不能運行任何本地的可執行程序。
(2)不能從本地計算機文件系統中讀取任何信息,也不能往本地計算機文件系統中寫入任何信息。
(3)不能查看除Java版本信息和少數幾個無害的操做系統詳細信息外的任何有關本地計算機的信息。特別是,在沙箱中的代碼不能查看用戶名、e-mail地址等信息。
(4)遠程加載的程序不能與除下載程序所在的服務器以外的讓任何主機通訊。
(5)全部彈出式窗口都會帶一個警告消息。
四、JNLP(java網絡加載協議)API容許未簽名的應用程序在沙箱中運行,同時經過一種安全的途徑訪問本地資源。
五、若是applet包含Swing組件,就必須擴展於Japplet類。
六、applet:
(1)void init():首次加載applet時調用這個方法。覆蓋這個方法,而且將全部的初始化代碼放在這裏。
(2)void start():覆蓋這個方法,將用戶每次訪問包含applet的網頁時須要執行的代碼放在其中。典型的操做是從新激活線程。
(3)void stop():覆蓋這個方法,將用戶每次離開包含applet網頁時須要執行的代碼放入其中。典型的操做時撤銷線程。
(4)void destroy():覆蓋這個方法,將用戶退出瀏覽器時須要執行的代碼放入其中。
七、Applet的HTML標記和屬性:
(1)code屬性指出了類名,必需要包括.class擴展名。
(2)code、width和height屬性是必需的。若是缺乏任何一個,瀏覽器將不能加載applet。
八、Applet能夠處理圖像和音頻。圖像必須是GIF、PNG或JPEG格式。音頻文件必須是AU、AIFF、WAV或MIDI格式。動畫支持GIF,而且能顯示動畫效果。
第11章 異常、日誌、斷言和調試
一、 若是一個方法有可能拋出多個已檢查異常,那麼就必須在方法的首部列出全部的異常類。每一個異常類之間用逗號隔開。
二、 不須要聲明Java的內部錯誤,即從Error繼承的錯誤。任何程序代碼都具備拋出那些異常的潛能,而咱們沒有對其沒有任何控制能力。
三、 不該該聲明從RuntimeException繼承的那些未檢查異常。
四、 若是在子類中覆蓋了超類的一個方法,子類方法中聲明的已檢查異常不能超過超類方法中聲明的異常範圍(也就是說,子類方法中拋出的異常範圍更加小,或者根本不拋出任何異常)。若是超類方法沒有拋出任何已檢查異常,子類也不能拋出任何已檢查異常。
五、 在Java中,沒有throws說明符的方法將不能拋出任何已檢查異常。
六、 一旦方法拋出了異常,這個方法就不可能返回到調用者;若是catch子句拋出了一個異常,異常將被拋回這個方法的調用者。
七、 建立異常類時,定義的類應該包含兩個構造器,一個是默認的構造器,另外一個是帶有詳細描述信息的構造器(超類Throwable的toString方法將會打印出這些詳細信息)。
八、 應該捕獲那些知道如何處理的異常,而將那些不知道怎麼處理的異常傳遞出去。若是想將異常傳遞出去,就必須在方法的首部添加一個throws說明符,以便告知調用者這個方法可能會拋出異常
九、 當finally子句包含return語句時,將會出現一種意想不到的結果。假設利用return語句從try語句塊中退出。在方法返回前,finally子句的內容將被執行。若是finally子句中也有一個return語句,這個返回值將會覆蓋原始的返回值。
十、堆棧跟蹤(stack trace)是一個方法調用過程的列表,它包含了程序執行過程當中方法調用的特定位置。
十一、斷言機制容許在測試期間向代碼中插入一些檢查語句。當代碼發佈時,這些插入的檢測語句將會被自動地移走。在Java SE1.4中,Java語言引入了關鍵字assert。在默認狀況下,斷言被禁用。這個關鍵字有兩種形式:
(1)assert 條件;
(2)assert 條件:表達式;
十二、在Java語言中,給出了三種處理系統錯誤的機制:
(1)拋出一個異常
(2)日誌
(3)使用斷言
第12章 泛型程序設計
一、 一個泛型類就是具備一個或多個類型變量的類。
二、 泛型方法能夠定義在普通類中,也能夠定義在泛型類中。
三、 一個類型變量或通配符能夠有多個限定,限定類型用「&」分隔,而逗號用來分隔類型變量。
四、 虛擬機沒有泛型類型對象——全部對象都屬於普通類。
五、 使用Java泛型時須要考慮的一些限制。大多數限制都是由類型檫除引發的:
(1)不能用基本類型實例化類型參數;
(2)運行時類型查詢只適用於原始類型;
(3)不能拋出也不能捕獲泛型類實例;
(4)參數化類型的數組不合法(不能聲明參數化類型的數組);
(5)不能實例化類型變量;
(6)泛型類的靜態上下文中類型變量無效(不能再靜態域或方法中引用類型變量);
(7)注意檫除後的衝突。
第13章 集合
一、 集合類的基本接口是Collection接口。
二、 Map接口沒有實現Collection接口!
三、Java集合中的具體集合:
四、在Java程序設計語言中,全部鏈表實際上都是雙向連接的——即每一個結點還存放着指向前驅結點的引用。
五、若是要查看鏈表中第n個元素,就必須從頭開始,越過n-1個元素。沒有捷徑可走!
六、get()方法作了微小的優化:若是索引大於size()/2就從列表尾端開始搜索元素。
七、Vector類的全部方法都是同步的。
八、在Java中,散列表用鏈表數組實現。
九、將一個元素添加到樹中要比添加到散列表中慢,可是,與將元素添加到數組或鏈表的正確位置上相比仍是快不少的。
十、若是對同一個鍵兩次調用put()方法,第二個值就會取代第一個值。
十一、查看Map的鍵與值:
for(Map.Entry<Integer,String> element:map.entrySet()){
int key = element.getKey();
String values = element.getValue();
System.out.println(key+"\t"+values);
}
第14章 多線程
一、 多進程與多線程的本質區別在於:每一個進程擁有本身的一整套變量,而線程則共享數據。
二、 線程能夠有以下6種狀態:
(1)New(新生)
(2)Runnable(可運行)
(3)Blocked(被阻塞)
(4)Waiting(等待)
(5)Timed waiting(計時等待)
(6)Terminated(被終止)
三、線程因以下兩個緣由之一而被終止:
(1)由於run方法正常退出而天然死亡;
(2)由於一個沒有捕獲的異常終止了run方法二意外死亡。
四、在Java程序設計語言中,每個線程有一個優先級。默認狀況下,一個線程繼承它的父線程的優先級。
五、守護線程的惟一用途是爲其它線程提供服務。守護線程應該永遠不去訪問固有資源,如文件、數據庫,由於它會在任什麼時候候甚至在一個操做的中間發生中斷。
六、默認狀況下,建立的全部線程屬於相同的線程組。
七、經驗證實suspend方法會常常致使死鎖。
八、Swing不是線程安全的。只有不多的Swing方法是線程安全的。
九、將線程與Swing一塊兒使用時,必須遵循兩個簡單的原則:
(1)若是一個動做須要花費很長時間,在一個獨立的工做器線程中作這件事不要在事件分配線程中作。
(2)除了線程分配線程,不要在任何線程中接觸Swing組件。
十、每個Java應用程序都開始於主線程中的main方法。
下載
html