Java之Java快速入門篇
你好,世界!
原始碼組織方式
Java程式由package+class組成,package對應目錄的相對路徑,class對應檔案,如
E:WorkspacesMyEclipse 10JavaStudysrccomhappyframeworkjavastudyhelloHello.java
關於class有如下幾點規則:
1、檔案的名字必須和class的名字一致(public級別的class名字)。
2、檔案必須只包含一個public訪問基本的class(可以包含多個非public 級別的class)。
3、package名字必須和目錄一致。
入口方法
App.java
最終的專案結構
資料型別
8種原子型別
1、整數型別:byte、short、int和long。
2、小數型別:float和double。
3、字元型別:char。
4、布林型別:bool。
除此之外的是interface、class和array。
小數型別的常量預設是double型別,宣告float型別的常量需要使用F作為字尾。
運算子
1、算術運算子:+、-、、/ 和 %,兩個整數相除,結果還是整數。
2、賦值運算子:=、+=、-=、=、/=、%=、&=、|=、~=、^=、<<=、>>= 、 >>>=、++ 和 --。
3、比較運算子:==、!=、<、<=、> 和 >=。
4、邏輯運算子:&&、|| 和 !。
5、位運算子:&、|、~、^、<<、>> 和 >>>。
字串
String是擁有“值語義”的引用型別,字串常量實現了“享元模式”,equals會按照內容進行比較,==按照地址比較。
為了高效的修改字串Java引入了StringBuffer。
陣列
宣告語法
DataType[] name 或 DataType name[]。
初始化語法
DataType[] name = new DataType[length]。
DataType[] name = new DataType[] { element1, element2, …elementn }。
DataType[] name = { element1, element2, …elementn }。
多維陣列
只有不等長多維陣列DataType[][],沒有DataType[xxx, xxx]。
控制結構
1、條件:if-else if-else、switch-case-default和三元運算子(?:)。
2、迴圈:while、do-while、for和foreach。
3、Labeled block。
最近覺得label是個不錯的東西,最起碼多了一種選擇。
方法
Java中所有的賦值和方法呼叫都是“按值“處理的,引用型別的值是物件的地址,原始型別的值是其自身。
Java支援變長方法引數。
類
注意:呼叫自身的構造方法是用this(xxx,xxx,…)來完成,且必須位於第一行。
靜態成員
Java中類似靜態構造方法的結構,稱之為:靜態初始化程式碼塊,與之對應的是例項初始化程式碼塊,見下例:
繼承
繼承使用 extends,抽象類和抽象方法使用abstract宣告,向下轉型使用 (ChildType)instance,判斷是否是某個型別使用 instanceof,見下例:
重寫
Java中的重寫規則比較靈活,具體如下:
1、除了 private 修飾之外的所有例項方法都可以重寫,不需要顯式的宣告。
2、重寫的方法為了顯式的表達重寫這一概念,使用 @Override進行註解。
3、重寫的方法可以修改訪問修飾符和返回型別,只要和父類的方法相容(訪問級別更高,返回型別更具體)。
4、可以使用final將某個方法標記為不可重寫。
5、在構造方法中使用 super(xxx, xxx)呼叫父類構造方法,在常規例項方法中使用 super.method(xxx, xxx)呼叫父類方法。
6、Java不支援覆蓋(new)。
包
包的名字和專案路徑下的目錄路徑相對應,比如:專案路徑為:C:Study,有一個Java原始檔位於:C:StudycomhappyframeworkstudyApp.java,那麼App.java的包名字必須為:com.happyframework.study,且 App.java 的第一行語句必須為:package com.happyframework.study。
Java支援三種匯入語法:
1、匯入型別:import xxx.xxx.xxxClass。
2、匯入包:import xxx.xxx.xxx.。
3、匯入靜態成員:import static xxx.xxx.。
訪問級別
Java支援四種訪問級別:public、private、protected 和 default(預設),型別和介面只能使用public 和 default,成員和巢狀型別可以使用所有,下面簡單的解釋一下 protected 和 default。
-
protected 修飾過的成員只能被自己、子類和同一個包裡的(不包括子包)其他型別訪問。 default
-
修改過的型別或成員只能被自己和同一個包裡的(不包括子包)其他型別訪問。
巢狀類
Java支援如下幾種巢狀類:
1、nested class,定義在型別內部的型別。
2、static nested class,使用 static 宣告的 nested class,static nested class 可以訪問所有外部類的靜態成員。
3、inner class,沒有使用 static 宣告的 nested class,inner class 可以訪問所有外部類的例項成員,inner class 不能定義靜態成員。
程式碼示例
特殊的inner class:local class
除了inner class的規則之外,local class可以訪問區域性final變數,在Java8中有更多的改進。
特殊的local class:anonymous class
常量
不廢話了,直接看程式碼:
有一點需要注意的是:只有一種情況Java的常量是編譯時常量(編譯器會幫你替換),其它情況都是執行時常量,這種情況是:靜態型別常量且常量的值可以編譯時確定。
介面
Java的介面可以包含方法簽名、常量和巢狀類,見下例:
列舉
Java列舉是class,繼承自java.lang.Enum,列舉中可以定義任何型別可以定義的內容,構造方法只能是private或package private,列舉成員會被編譯器動態翻譯為列舉例項常量,見下例:
呼叫列舉的構造方法格式是:常量名字(xxx, xxx),如果構造方法沒有引數只需要:常量名子,如:
異常
Java中的異常分為checked和unchecked,checked異常必須宣告在方法中或被捕獲,這點我覺得比較好,必定:異常也是API的一部分,見下例:
所有繼承Exception的異常(除了RuntimeException和它的後代之外)都是checked異常。
裝箱和拆箱
Java提供了原始型別對應的引用型別,在1.5之後的版本還提供了自動裝箱和自動拆箱,結合最新版本的泛型,幾乎可以忽略這塊。
注意:自動裝箱和自動拆箱是Java提供的語法糖。
泛型
Java的泛型是編譯器提供的語法糖,官方稱之為:型別引數搽除,先看一下語法,然後總結一點規律:
泛型方法
測試程式碼
呼叫泛型方法
輸出的結果是
泛型類
測試程式碼
呼叫程式碼
輸出結果
泛型介面
測試程式碼
呼叫程式碼
輸出結果
型別引數約束
測試程式碼
呼叫程式碼
輸出結果
型別搽除過程
1、將泛型定義中的型別引數去掉。
2、將T換成extends指定的約束型別,預設是Object。
3、如果有非泛型型別繼承或實現了泛型基類或介面,而且進行了重寫,根據情況,編譯器會自動生成一些方法。
4、根據泛型引數的實際引數搽除呼叫程式碼。
宣告:本文內容來源於網路,如有侵權請聯絡刪除
胖胖愛學習愛分享,每日更新,快來關注胖胖和胖胖一起學習吧!