Java初學筆記
阿新 • • 發佈:2018-11-01
在有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修飾的方法,子類和父類同包時才可以重寫;
- 重寫:重寫的方法能夠丟擲任何非強制異常,無論被重寫的方法是否丟擲異常。但是,重寫的方法不能丟擲新的強制性異常,或者比被重寫方法宣告的更廣泛的強制性異常,反之則可以。也就是說強制性異常不能丟擲更多!
- 過載:可以更改返回型別,但不能作為過載的區別;還可以更改訪問修飾符