標籤:name 靜態 xxx als 使用 extends end 字串 amp
java編譯器有常亮最佳化機制,如果是常量的計算,會直接判斷常量計算結果的取值範圍,如果是變數,則沒辦法判斷計算取值
範圍,編譯會異常(如兩個byte類型的變數相加).
java中的常量指的是用 static final修飾的變數.具體可以看 6322651
整數預設的類型是int類型,浮點數預設的類型是double類型
在進行運算的時候,byte,short,char都會隱式轉換為int類型,剩下的資料類型由小到大依次為 int-long-float-double
字元類型參與運算,會按照ASCII錶轉換成相對應的數字,然後計算,字串類型在和任何類型用+拼接時都會把任何類型轉換為
字串類型(按照計算順序,如果字串在算式的最前,出現上面說的結果,但是前面如果是 1+1+"hello",那麼還是會先計算
1+1,結果就是2hello,小括弧可以提升計算優先順序).
&& 如果左邊確定為 false,那麼右邊的邏輯運算式不執行,因為最終結果就是false
|| 同樣左邊為true,那麼右邊的邏輯運算式也不執行,因為最終結果就是true
三元運算子 int a = (a > b) ? a : b;意思是如果括弧內的邏輯運算式true,就取a的值,false取b的值.
switch語句的運算式只能接受 short char byte int String 枚舉 類型,long等類型不接受.
跳出指定迴圈用標號 如 a: for(...){迴圈語句},那麼如果 break a;則代表跳出a:後面的迴圈.
方法重載是指在一個類中有多個相同名字的方法,他們的參數個數和類型不同,傳回值類型也可能不一樣,調用重載方法時,
編譯器能自動根據參數類型和個數選擇合適的方法.通常用來建立一組任務相似但參數個數和類型不同的方法.
基礎資料型別 (Elementary Data Type)傳遞的值不會改變,因為調用完後就彈棧,局部變數消失,引用資料類型的值傳遞改變原值,因為對象儲存在堆
裡面,可以通過地址繼續訪問(如往方法裡面傳值).
java中值的傳遞只能是值,因為引用資料類型傳遞的地址實際上只是一個地址的值.
成員變數和局部變數名字相同的情況下,一般訪問哪個是採用就近原則,所以一般局部變數會覆蓋成員變數.
一個檔案裡麵包含兩個或兩個以上的類則包含main方法的類必須是公用的切類名要和檔案名稱一致
主函數必須要是一個公用靜態方法,如 public static void main(String[] args){ }
switch case 裡面如果不加 break,那麼程式會從case匹配正確的那裡開始一直執行到有break和return的地方,
無論後面的case是否匹配.
-----------------------------------------------------------------------------------------------------
main方法是JVM(java虛擬機器)自動調用
JVM調用main方法的位置自然不會在某個類中、或某個包中,因此只有當main方法在公有層級上時,才對JVM可見,
所以mian方法需要public修飾,
main方法所在的類也需要public修飾符。
另外由於main方法是所有程式的入口,也就是main被調用時沒有任何對象建立,不通過對象調用某一方法,
只有將該方法定義為靜態方法,所以main方法是一個靜態方法,既需要static修飾。
JVM對於java程式已經是最底層,由它調用的方法的傳回值已經沒有任何地方可去,因此,main方法傳回值為空白,
既需用void修飾。
至於main方法的參數String[ ] arg我們現在已經很少有機會去用它了,它用於在接受命令列傳入的參數.
------------------------------------------------------------------------------------------------------
類不能多繼承,但是介面可以繼承多個介面,所以通過介面來實現多繼承的功能。
如果一個類中所有變數和方法都是靜態(static),那麼可以把構造方法設定為私人,防止別人建立對象.
產生文檔: javadoc -d api -version -author -encoding utf-8 ClassFileName.java
子類繼承父類,如果父類沒有空參構造方法,那麼子類構造方法中一定要用super(param...)調用父類構造方法.
final 修飾的變數可以顯式初始化,也可以在構造器中進行初始化.
向上轉型之後,非 private static final 的方法會出現動態綁定,具體表現為:如果用父類的引用指向子類的對象,那麼
實際上調用動態綁定的方法是調用的子類的方法.但是卻不能使用子類新增的方法,如果想使用,需要再向下轉型:
Son son = (Son) father;
instanceof 作用是判斷左邊的引用是否和右邊的對象是一個類型的.如果向上轉型,那麼會返回false.
抽象一個方法或者類 用 abstract,如果一個方法是抽象的,那麼它的類一定是抽象的.它的子類要麼也設定成抽象的,
要麼重寫它所有的抽象方法.抽象方法不能有代碼塊{}.
abstract 不能和 static final private 共存.
介面用 interface 定義,介面中的方法必須全部都是抽象方法.類實現介面用 implements.同樣,類也必須實現介面中的
所有抽象方法.類可以是抽象的.
介面中的成員變數只能是常量全部預設加修飾符 public static final,成員方法全部預設加 public abstract.
類可以實現多個介面,介面之間用逗號隔開,介面與介面之間可以有繼承關係,可以多繼承.
編譯帶包的類 javac -d . ClassName.java, 使用帶包的類 com.xxx.ClassName.(不建議這樣使用,用import)
內部類:使用格式: 外部類名.內部類名 = 外部類對象.內部類對象,如 FClass.SClass fs = new FClass().new SClass()
內部類可以訪問外部類的成員,包括私人,外部類訪問內部類必須要建立對象.
new 介面名(){...} 這是實現一個介面(可以說是介面的子類的對象),new 類名(){} 這是繼承了一個類,是一個子類,然後建立
對象.這個子類可以在代碼塊中添加新的方法等.因為直接就是繼承父類然後建立對象,所以這個子類沒有名字,叫匿名內部類.
匿名內部類,可以理解成子類直接在父類中實現。{}中就是子類。所以說是一個匿名的子類直接在父類裡面實現了,所以叫
內部類, 格式大概是 父類 { 匿名類extends父類{} }
Java : java基礎(1)