1. 程式人生 > >我的Java基礎的學習筆記

我的Java基礎的學習筆記

setAccessory
public void setAccessory(JComponent newAccessory)設定 accessory 元件。accessory 通常用於顯示已選中檔案的預覽影象;可按程式設計師的要求將其用來顯示任何內容,如額外的自定義檔案選擇器控制元件。 
注:如果有以前使用的 accessory,則應該取消註冊該 accessory 已向檔案選擇器所註冊的所有偵聽器。 


SwingUtilities:
public class SwingUtilities  extends Objectimplements 
SwingConstantsSwing 實用方法的集合。 


JMenu:
public class JMenuextends JMenuItemimplements Accessible, MenuElement選單的該實現是一個包含 JMenuItem 的彈出視窗,使用者選擇 JMenuBar 上的項時會顯示該 JMenuItem。除 JMenuItem 之外,JMenu 還可以包含 JSeparator。 




JList:
public class JList  extends JComponentimplements Scrollable, Accessible顯示物件列表並且允許使用者選擇一個或多個項的元件。




JMenuBar:
   選單欄的實現


Clipboard :
  此類實現一種使用剪下/複製/貼上操作傳輸資料的機制。


JscrollPane:
   提供輕量級元件的 scrollable 檢視。JScrollPane 管理視口、可選的垂直和水平滾動條以及可選的行和列標題視口.


Action:
Action 介面提供 ActionListener 介面的一個有用擴充套件,以便若干控制元件訪問相同的功能。


validate
public void validate()驗證此容器及其所有子元件。 
使用 validate 方法會使容器再次佈置其子元件。已經顯示容器後,在修改此容器的子元件的時候(在容器中新增或移除元件,或者更改與佈局相關的資訊),應該呼叫上述方法。 


如果此 Container 無效,則此方法將呼叫 validateTree 方法,並將此 Container 標記為有效。否則不執行任何動作。 




setSelectionEnd
public void setSelectionEnd(int selectionEnd)將選擇結束點設定為指定的位置。新的結束點限制在當前選定開始位置處或之後。 
這可用於在 java.awt.TextComponent 上呼叫此方法的程式碼向後相容。實現此方法以轉發 Caret 實現,後者是維護實際選定的位置。 




引數:
selectionEnd - 文字的結束位置,該值 >= 0


repaint
public void repaint()重繪此元件。 
如果此元件是輕量級元件,則此方法會盡快呼叫此元件的 paint 方法。否則此方法會盡快呼叫此元件的 update 方法。 


注:有關 AWT 和 Swing 所用繪製機制的更多資訊,包括如何編寫最高效的繪製程式碼的資訊,請參閱 Painting in AWT and Swing。 


JCheckBoxMenuItem:
   可以被選定或取消選定的選單項
 
public interface ListSelectionModel此介面表示任何元件的當前選擇狀態,該元件顯示一個具有穩定索引的值列表。該選擇被建模為一組區間,每個區間表示一個選定列表元素的連續範圍。修改該組選定區間的方法都採用一對索引:index0 和 index1,這對索引表示一個閉區間,即該區間同時包括 index0 和 index1。












path 路徑,是java編譯時需要呼叫的程式(如java,javac等)所在的地方
classpath 類的路徑,在編譯執行java程式時,如果有呼叫到其他類的時候,在classpath中尋找需要的類。
 




public class EOFExceptionextends IOException當輸入過程中意外到達檔案或流的末尾時,丟擲此異常。 


此異常主要被資料輸入流用來表明到達流的末尾。注意,其他許多輸入操作返回一個特殊值表示到達流的末尾,而不是丟擲異常。 








1. final關鍵字


在Java中, 可以使用final關鍵字修飾類、方法以及成員變數。


(1).final標記的類不能被繼承;


(2).final標記的方法不能被子類複寫;


(3).final標記的變數即成為常量,只能被賦值一次. 


注意: 如果使用final來宣告常量,請遵守以下常規: final標記的變數名,所有單詞字母都需大寫.




--------------------------------------------------------------------------------


2. 抽象類


講抽象類的定義必須先講抽象方法的定義. 所謂抽象方法,是指只宣告而未實現(即沒有{}包圍的方法體)的方法. 而含有一個或多個抽象方法的類就稱為抽象類.


抽象類 = 普通類 + 抽象方法


對於抽象類,時刻需要謹記: 抽象類是不能夠直接例項化的, 如果要使用一個抽象類,就必須要有該抽象類的子類. 如果抽象類的子類不是抽象類的話,就一定要複寫該抽象類的所有抽象方法.




抽象類中允許有自己的構造方法,但是該構造方法並不能直接例項化自己的物件. 如果在抽象類中存在有參構造方法,則必須在子類中明確的使用super([引數列表])指明要呼叫父類中的哪個構造方法.






3.1 介面的概念


介面是抽象方法與常量的結合.


介面的定義方式為: interface 介面名 { 資料型別 常量名 = 常量值; 返回值型別 方法名(); .......}


在Java中,一個類只能繼承一個類,但是卻可以實現(implements)多個介面. 如果實現介面的類不是抽象類的話,則該子類必須複寫介面中所有的抽象方法.


一個類可以繼承多個介面,但如果該類不是抽象類的話,則必須實現抽象類中的所有抽象方法




3.2 介面的兩點注意之處


(1). 抽象類使的是extends關鍵字,表示一個類只能繼承一個父類,但是介面使用的是implements,一個類可以同時實現多個介面,但是此時子類就必須同時覆寫好多個介面中的抽象方法。


(2). 既然定義中已經明確說明了介面是抽象方法和全域性變數的集合,因此,我們可以如下例一樣,對程式碼進行簡化: view plaincopy to clipboardprint






一個介面可以使用extends關鍵字去繼承一個或多個已有的介面,但在子類的實現時,也必須全部實現所有介面的抽象方法.
也可以將此類定義為抽象類
.相同點
  A. 兩者都是抽象類,都不能例項化。
  B. interface實現類及abstrct class的子類都必須要實現已經宣告的抽象方法。


2. 不同點
  A. interface需要實現,要用implements,而abstract class需要繼承,要用extends。
  B. 一個類可以實現多個interface,但一個類只能繼承一個abstract class。
  C. interface強調特定功能的實現,而abstract class強調所屬關係。 
  D. 儘管interface實現類及abstrct class的子類都必須要實現相應的抽象方法,但實現的形式不同。interface中的每一個方法都是抽象方法,都只是宣告的 (declaration, 沒有方法體),實現類必須要實現。而abstract class的子類可以有選擇地實現。
  這個選擇有兩點含義:
    一是Abastract class中並非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子類必須實現。那些沒有abstract的方法,在Abstrct class中必須定義方法體。
    二是abstract class的子類在繼承它時,對非抽象方法既可以直接繼承,也可以覆蓋;而對抽象方法,可以選擇實現,也可以通過再次宣告其方法為抽象的方式,無需實現,留給其子類來實現,但此類必須也宣告為抽象類。既是抽象類,當然也不能例項化。
  E. abstract class是interface與Class的中介。
  interface是完全抽象的,只能宣告方法,而且只能宣告pulic的方法,不能宣告private及protected的方法,不能定義方法體,也不能宣告例項變數。然而,interface卻可以宣告常量變數,並且在JDK中不難找出這種例子。但將常量變數放在interface中違背了其作為介面的作用而存在的宗旨,也混淆了interface與類的不同價值。如果的確需要,可以將其放在相應的abstract class或Class中。
  abstract class在interface及Class中起到了承上啟下的作用。一方面,abstract class是抽象的,可以宣告抽象方法,以規範子類必須實現的功能;另一方面,它又可以定義預設的方法體,供子類直接使用或覆蓋。另外,它還可以定義自己的例項變數,以供子類通過繼承來使用。










  1、在類第一次載入時候,會執行靜態域(field)初始化語句和靜態塊(用static{}包含的部分)。 
這裡要注意: 
    a、不管靜態域宣告語句的實際位置在哪兒,當第一次載入類的時候都會首先對它初始化為預設值(0,false,null等)。 
    b、即使靜態域宣告中使用了顯式初始化語句(比如:int x=3),第一次載入類的時候也會先把它初始化為預設值(此時x為0),然後再按照下面說的要點c來執行賦值語句(x=3)。 
    c、對於靜態域的顯式初始化語句和靜態塊,按照在類中程式碼出現的先後順序執行。 










11.final, finally, finalize的區別?


final 用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。


(final具有“不可改變的”的含義,他可以修飾非抽象類,非抽象成員方法和變數。用final修飾的類,不可繼承,沒有子類。用final修飾的方法,不能被子類的方法覆蓋。用final修飾的變量表示常量,只能被賦一次值。)


finally是異常處理語句結構的一部分,表示總是執行。


finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。


 
43. Class.forName的作用?為什麼要用? 




答:呼叫該方法返回一個以字串指定類名的類的物件。


Class.forName(xxx.xx.xx) 返回的是一個類


首先你要明白在java裡面任何class都要裝載在虛擬機器上才能執行。這句話就是裝載類用的(和new 不一樣,要分清楚)。 


至於什麼時候用,你可以考慮一下這個問題,給你一個字串變數,它代表一個類的包名和類名,你怎麼例項化它?只有你提到的這個方法了,不過要再加一點。 
A a = (A)Class.forName("pacage.A").newInstance(); 
這和你 
A a = new A(); 
是一樣的效果。 










覆蓋:


什麼是方法覆蓋
   如果在子類中定義的一個方法,其名稱、返回型別及引數簽名正好與父類中某


個方法的名稱、返回型別及引數簽名相匹配,那麼可以說,子類的方法覆蓋了父


類的方法。


覆蓋方法必須滿足的十大約束


一:子類方法的名稱、引數簽名和返回型別必須與父類方法的名稱、引數簽名和


返回型別一致


二:子類方法不能縮小父類方法的訪問許可權


三:子類方法不能丟擲比父類方法更多的異常,子類方法丟擲的異常必須和父類


方法丟擲的異常相同,或者子類方法丟擲的異常類是父類方法丟擲的異常類的子





四:方法覆蓋只存在於子類和父類(包括直接父類和間接父類)之間。在同一個


類中方法只能被過載,不能被覆蓋。(哈哈,這個是方法覆蓋的定義吧)。


五:父類的靜態方法不能被子類覆蓋為非靜態方法。


六:子類可以定義與父類的靜態方法同名的靜態方法,以便在子類中隱藏父類的


靜態方法。子類隱藏父類的靜態方法和子類覆蓋父類的例項方法,這兩者的區別


在於:執行時,Java虛擬機器把靜態方法和所屬的類繫結,而把例項方法和所屬的
例項繫結。


* 父類的非靜態方法不能被子類覆蓋為靜態方法


  * 父類的私有方法不能被子類覆蓋


  * 父類的抽象方法可以被子類通過兩種途徑覆蓋(即實現和覆蓋)(P169)


  * 父類的非抽象方法可以被覆蓋為抽象方法










靜態內部類物件有著指向其外部類物件的引用,它可以訪問建立它的外部類物件的內容,甚至包括私有變數!
非靜態內部類不能宣告本類的static成員 ,只有一個靜態的內部類,才可以宣告一個static成員,
非靜態內部類非靜態方法中:可以直接訪問該類的非靜態成員、外部類內中的靜態和非靜態的成員;訪問靜態內部類和非靜態內部類的成員的方法一樣。








靜態成員類特性
靜態內部類沒有了指向外部的引用。
靜態內部類中可以定義任何靜態和非靜態的成員
靜態內部類裡的靜態方法中:可以直接訪問該類和外部類中的靜態成員,訪問該類和外部類中成員通過建立物件訪問
靜態內部類裡的非靜態方法中:可以直接訪問該類中的所有的非靜態、靜態成員和直接訪問外部類中的靜態成員;訪問外部類中成員通過建立類物件訪問
像靜態方法或靜態欄位一樣,靜態成員類有public/private/default許可權修飾符 
靜態成員類約束
靜態成員類不能與外部類重名 
像外部類的靜態方法一樣,不能直接訪問外部類的例項欄位和例項方法 
靜態成員類只能定義於外部類的頂層程式碼或外部類其它靜態成員類的頂層程式碼中(巢狀定義);不能定義於外部類的某個函式中。


區域性內部類
如果我們在用一個內部類的時候僅需要建立它的一個物件並創給外部,就可以建立一個區域性內部類並返回。區域性內部類的訪問域是受限的。
匿名內部類
也就是沒有名字。可以這樣使用。
在java的事件處理的匿名介面卡中,匿名內部類被大量的使用。
匿名內部類由於沒有名字,所以它沒有建構函式(但是如果這個匿名內部類繼承了一個只含有帶引數建構函式的父類,建立它的時候必須帶上這些引數,並在實現的過程中使用super關鍵字呼叫相應的內容)。如果你想要初始化它的成員變數,有下面幾種方法:
1.如果是在一個方法的匿名內部類,可以利用這個方法傳進你想要的引數,不過記住,這些引數必須被宣告為final。 
2.將匿名內部類改造成有名字的區域性內部類,這樣它就可以擁有構造函數了。 
3.在這個匿名內部類中使用初始化程式碼塊。 


97.子類覆蓋父類總結:
A.子類方法的名稱、引數名和返回型別必須與父類方法的名稱、引數名和返回型別一致。
B.子類方法不能縮小父類方法的訪問許可權。
C.子類方法不能丟擲比父類方法更多的異常,子類方法丟擲的異常必須和父類方法丟擲的異常相同或者是在方法丟擲的異常類的子類。
D.方法覆蓋只存在於子類和父類(包括直接父類和間接父類)之間。在同一個類中方法只能被過載,不是覆蓋。
E.父類的靜態方法不能被子類覆蓋為非靜態方法。
F.子類可以定義與父類的靜態方法同名的靜態方法,以便在子類中隱藏父類的靜態方法。
G.父類的非靜態方法不能被子類覆蓋為靜態方法。
H.父類的私有方法不能被子類覆蓋。
I.父類的抽象方法可以被子類通過兩種途徑覆蓋:一種是子類實現父類的抽象方法;另一種是子類重新宣告父類的抽象方法,這種方法通常用來擴大該方法的訪問許可權。
J.父類的非抽象方法可以被覆蓋為抽象方法。