1. 程式人生 > >Java : java基礎(1)

Java : java基礎(1)

-- 因此 常亮 可能 建議 .com return clas 技術

java編譯器有常亮優化機制,如果是常量的計算,會直接判斷常量計算結果的取值範圍,如果是變量,則沒辦法判斷計算取值
範圍,編譯會異常(如兩個byte類型的變量相加).

java中的常量指的是用 static final修飾的變量.具體可以看 https://blog.csdn.net/xueyepiaoling/article/details/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:後面的循環.

方法重載是指在一個類中有多個相同名字的方法,他們的參數個數和類型不同,返回值類型也可能不一樣,調用重載方法時,
編譯器能自動根據參數類型和個數選擇合適的方法.通常用來創建一組任務相似但參數個數和類型不同的方法.

基本數據類型傳遞的值不會改變,因為調用完後就彈棧,局部變量消失,引用數據類型的值傳遞改變原值,因為對象保存在堆
裏面,可以通過地址繼續訪問(如往方法裏面傳值).

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)