JAVA基礎容易疏忽的知識點總結

java_cxrs發表於2009-01-21

最近看了下18天JAVA學習筆記這個資料,其中裡面有些在使用JAVA中容易讓人疏忽的知識點,於是我就把一些容易讓人疏忽的地方摘抄了下來,都是一些基礎的東西,算是一個小的總結吧大家可以看下,自己也可以複習一下。

-----------------------------------------------
類、物件、例項三者的關係:
  類:是物件的模板,可以例項化物件
  物件:類的個體
  例項:實現的物件
  student s; 
  s=new student();
   其中 Student為類,s為物件,new Student()為例項,s賦值後也是例項了。

封裝:
 類的屬性加private修飾符,來限制只能夠在類的內部進行訪問,有效的保護資料。
 對於類中的私有屬性,要對其給出一對方法getXxx(),setXxx()訪問私有屬性,保證對私有屬性的操作的安全性。
 方法公開的是方法的宣告,即只須知道引數和返回值就可以呼叫該方法,隱藏方法的實現的細節。
 一個物件和外界的聯絡應當通過一個統一的介面,應當公開的公開,應當隱藏的隱藏。

父類的構造器不能被子類繼承
方法和屬性可以被繼承,許可權不限制能否繼承過來,限制的是能否直接訪問
  先構造父類,後構造子類,先this後super

static修飾的方法,不能直接訪問本類中的非靜態成員,但本類的非靜態方法可以訪問本類的靜態成員。
java中的main方法必須寫成static的原因:在類載入時無法建立物件,而靜態方法可以不通過物件呼叫,所以在類載入時就可以通過main方法入口來執行程式。

單例設計模式:
 一個類只允許有一個物件,保證所有引用的物件都是同一個物件。
 因為只允許存在一個物件,則不允許在外面直接new出新的物件,所以應該把構造器設為private,。
 在類內定義一個公開的靜態方法,讓使用者進行呼叫,通過該方法去獲得一個例項。
 例:
  public calss Singleton{
   private static Singleton s;
   private Singleton(){}
   public static Singleton newInstance(){
    if ( s == null)
     s = new Singleton();
    return s;
   }
  } 

有抽象方法的類一定是抽象類。但是抽象類中不一定都是抽象方法,也可以全是具體方法。
在介面中,所有的屬性都是公開、靜態的常量:public static final
介面與介面之間可以多繼承,用extends,多個之間用逗號隔開。
介面中沒有構造方法,不能用“new 介面名”來例項化一個介面,但可以宣告一個介面。
靜態內部類只能訪問外部類的靜態成員。

在內部類訪問外部類的例項變數:外部類名.this.屬性
在外部類的外部,要建立一個成員內部類物件,要首先建立一個外部類物件,然後再建立一個成員內部類物件。
在本類內部生成內部類物件的方式:
    在靜態方法中:Inner in = new Outer().new Inner();
    在非靜態方法中:Inner in = this.new Inner();
區域性內部類不僅可以訪問外部類的例項變數,還可以訪問外部類的區域性變數,但要求外部類的區域性變數必須為final的。

如果在方法的程式中有一行throw new Exception(),那麼其後的程式不執行,如果沒有對這個可能出現的檢查結果進行處理,那麼程式就會報錯。
   throws和throw沒有必然的聯絡。
如果父型別無throws時,子型別也不允許出現throws。此時只能使用try catch。

FlowLayout:流式佈局管理,Panel和JPanel的預設佈局管理就是FlowLayout
BorderLayout:按方位進行佈局管理,不明確指定,就會預設載入在中間,Frame和JFrame預設的佈局管理器是BorderLayout

實現監聽的步驟:
  a. 實現監聽介面implements XxxxListener
  b. 重寫方法actionPerformed(ActionEvent e)
  c. 註冊監聽addXxxxListener(ActionListener l)

程式與執行緒的區別:
程式有獨立的程式空間,程式中的資料存放空間(堆空間和棧空間)是獨立的。
執行緒的堆空間是共享的,棧空間是獨立的,執行緒消耗的資源也比程式小,相互之間可以影響的。

Thread中的一些方法:
  currentThread()
            返回對當前正在執行的執行緒物件的引用(實現介面方式時使用)
  sleep(long millis)
            在指定的毫秒數內讓當前正在執行的執行緒休眠(暫停執行)。
   本執行緒不會去搶,除非sleep結束。
   多個執行緒之間都會去搶執行許可權,不會考慮優先順序。
  yield()
            暫停當前正在執行的執行緒物件,並執行其他執行緒。
            只給本類或者優先順序大於本類優先順序的執行緒去搶。
           join()
            等待該執行緒終止。 
            放在start()前面則沒有用處。
           setDaemon(boolean on)
            將該執行緒標記為守護執行緒,守護執行緒需要依賴其他執行緒,會在虛擬機器停止的時候停止。

抽象方法不能是synchronized同步的方法。
構造方法不能是synchronized同步的方法。

選擇流的思路:
  先考慮是輸入流還是輸出流,
  再考慮是位元組流還是字元流,
  最後考慮是節點流還是處理流。

解決亂碼的方式:
String temp = 亂碼的字串
temp = new String(temp.getBytes("ISO8859-1") , "GBK")  
將temp按照ISO8859-1的方式進行解碼生成一個位元組序列,然後在按照GBK的方式解碼位元組序列生成字串。

File類的物件實施表示一個檔案並不是真正的檔案,只是一個代理而已,通過這個代理來操作檔案.

網路中傳遞物件必須實現序列化。

只有ByteBuffer類提供了直接緩衝。使用直接緩衝,不影響程式。其它類想用直接緩衝需要進行轉換。

國家會相容語言,但語言不會相容國家。

相關文章