1. 程式人生 > >Java初學筆記

Java初學筆記

在有C++和C#基礎之下開始學習Java,主要記錄了一些和C++C#不同的或不知到的點

  • 棧物件必須初始化,否則會報錯。(其他的則有預設值)
  • byte佔用8位,char佔用16位
  • 介面預設為public,介面中的變數預設位public static final
  • 如果子類和基類在同一包中,則子類可以訪問基類protected成員(也就是說:被宣告為 protected 的變數、方法和構造器能被同一個包中的任何其他類訪問)
  • 繼承訪問規則:public-public            protected-protected/public
  • final 修飾的類不能夠被繼承,修飾的方法不能被繼承類重新定義,修飾的變數為常量,是不可修改的。
  • transient關鍵子,該修飾符包含在定義變數的語句中,用來預處理類和變數的資料型別。???
    public transient int limit = 55;   // 不會持久化
    public int b; // 持久化
  • volatile 易變的變數,每次都會強制從記憶體中讀取

 

  運算子

  • >>>:按位右移補充0
  • instanceof:判斷一個例項是否是某個型別(如果是該型別或該型別的超類則返回true)

  迴圈控制語句

  • 增強for迴圈,限制位陣列或者有迭代器的類
    public static String[] names = {"acsd", "bcasdf", "cfgad"};
    public static void main(String[] args) {
        for(String s:names) {
            System.out.println(s);
        }
    }
  • switch語句在邏輯上需要break。否則會在第一次匹配到後,繼續輸出後面所有不匹配的選項,直到break或者結束。
  • switch條件必須時常量,支援整型、字串或者列舉:Cannot switch on a value of type float. Only convertible int values, strings or enum variables are permitted

 

 

  Java Number

  • Java 語言為每一種內建資料型別提供了對應的包裝類,(Integer、Long、Byte、Double、Float、Short)都是抽象類 Number 的子類。
  • 一個快取問題?當數字的值佔用記憶體小於一個byte時,會指向同一個引用
    Integer iNum1 = 128;
    Integer iNum2 = 128;
    System.out.println(iNum1.equals(iNum2));//true
    System.out.println(iNum1 == iNum2);//true

  Java中的字串優化 stringbuffer 和 stringbuilder

  • stringbuilder 相對有速度上的優勢,但不是執行緒安全的

  Java陣列

  • 陣列是連續的,非對齊。
  • arrays類提供了很多對陣列操作的方法(賦值-fill,升序-sort,通過 binarySearch 方法能對排序好的陣列進行二分查詢法操作)

  Java函式

  • 可變引數
    public static void testFcn4(double...ds) {
        for(double it : ds) {
            System.out.println(it);
        }
    }
  • Java解構函式 finalize  以下為一般形式
    protected void finalize()
    {
       // 在這裡終結程式碼
    }
  • synchronized 關鍵字宣告的方法同一時間只能被一個執行緒訪問。synchronized 修飾符可以應用於四個訪問修飾符。
  • 序列化的物件包含被 transient 修飾的例項變數時,java 虛擬機器(JVM)跳過該特定的變數。該修飾符包含在定義變數的語句中,用來預處理類和變數的資料型別。 

  Java 面向物件

  • Java不能經行多個繼承,繼承使用extends關鍵字
  • 可以繼承多個介面interface,使用關鍵字implements,多個介面之間使用逗號隔開
  • super為父類引用,this為當前引用
  • final關鍵子:修飾類,則該類不能被繼承;修飾函式,則改函式不能被修改(Cannot override the final method from Parent);final修飾變數,則變數不可修改
  • final關鍵字:一個類為final類,則她的函式都會是final,但是例項變數不是final
  • 重寫:default修飾的方法,子類和父類同包時才可以重寫;
  • 重寫:重寫的方法能夠丟擲任何非強制異常,無論被重寫的方法是否丟擲異常。但是,重寫的方法不能丟擲新的強制性異常,或者比被重寫方法宣告的更廣泛的強制性異常,反之則可以。也就是說強制性異常不能丟擲更多!
  • 過載:可以更改返回型別,但不能作為過載的區別;還可以更改訪問修飾符