你好,世界!
源代碼組織方式;轉發+關注,私信小編“資料”免費分享資料給你!
Java程序由package+class組成,package對應目錄的相對路徑,class對應文件,如
E:\\Workspaces\\MyEclipse
10\\JavaStudy\\src\\com\\happyframework\\javastudy\\hello\\Hello.java
關於class有如下幾點規則:
- 文件的名字必須和class的名字一致(public級別的class名字)。
- 文件必須只包含一個public訪問基本的class(可以包含多個非public級別的class)。
- package名字必須和目錄一致。
- 1
- 入口方法
App.java
2
最終的項目結構
3
數據類型
8種原子類型
- 整數類型:byte、short、int和long。
- 小數類型:float和double。
- 字符類型:char。
- 布爾類型:bool。
除此之外的是interface、class和array。
小數類型的常量默認是double類型,聲明float類型的常量需要使用F作為後綴。
4
運算符
- 算術運算符:+、-、*、/ 和 %,兩個整數相除,結果還是整數。
- 賦值運算符:=、+=、-=、*=、/=、%=、&=、|=、~=、^=、>>=、<<= 、 <<<=、++ 和 --。
- 比較運算符:==、!=、>、>=、< 和 <=。
- 邏輯運算符:&&、|| 和 !。
- 位運算符:&、|、~、^、>>、<< 和 <<
5
字符串
String是擁有“值語義”的引用類型,字符串常量實現了“享元模式”,equals會按照內容進行比較,==按照地址比較。
為了高效的修改字符串Java引入了StringBuffer。
6
數組
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]。
控制結構
- 條件:if-else if-else、switch-case-default和三元運算符(?:)。
- 循環:while、do-while、for和foreach。
- Labeled block。
最近覺得label是個不錯的東西,最起碼多了一種選擇。
方法
Java中所有的賦值和方法調用都是“按值“處理的,引用類型的值是對象的地址,原始類型的值是其自身。
Java支持變長方法參數。
7
類
注意:調用自身的構造方法是用this(xxx,xxx,...)來完成,且必須位於第一行。
靜態成員
Java中類似靜態構造方法的結構,稱之為:靜態初始化代碼塊,與之對應的是實例初始化代碼塊,見下例:
8
繼承
繼承使用 extends,抽象類和抽象方法使用abstract聲明,向下轉型使用 (ChildType)instance,判斷是否是某個類型使用 instanceof,見下例:
9
重寫
Java中的重寫規則比較靈活,具體如下:
- 除了 private 修飾之外的所有實例方法都可以重寫,不需要顯式的聲明。
- 重寫的方法為了顯式的表達重寫這一概念,使用 @Override進行註解。
- 重寫的方法可以修改訪問修飾符和返回類型,只要和父類的方法兼容(訪問級別更高,返回類型更具體)。
- 可以使用final將某個方法標記為不可重寫。
- 在構造方法中使用 super(xxx, xxx)調用父類構造方法,在常規實例方法中使用 super.method(xxx, xxx)調用父類方法。
- Java不支持覆蓋(new)。
10
包
包的名字和項目路徑下的目錄路徑相對應,比如:項目路徑為:C:\\Study,有一個Java源文件位於:C:\\Study\\com\\happyframework\\study\\App.java,那麼App.java的包名字必須為:com.happyframework.study,且 App.java 的第一行語句必須為:package com.happyframework.study。
Java支持三種導入語法:
- 導入類型:import xxx.xxx.xxxClass。
- 導入包:import xxx.xxx.xxx.*。
- 導入靜態成員:import static xxx.xxx.*。
11
訪問級別
Java支持四種訪問級別:public、private、protected 和 default(默認),類型和接口只能使用public 和 default,成員和嵌套類型可以使用所有,下面簡單的解釋一下 protected 和 default。
- protected 修飾過的成員只能被自己、子類和同一個包裡的(不包括子包)其他類型訪問。
- default 修改過的類型或成員只能被自己和同一個包裡的(不包括子包)其他類型訪問。
嵌套類
Java支持如下幾種嵌套類:
- nested class,定義在類型內部的類型。
- static nested class,使用 static 聲明的 nested class,static nested class 可以訪問所有外部類的靜態成員。
- inner class,沒有使用 static 聲明的 nested class,inner class 可以訪問所有外部類的實例成員,inner class 不能定義靜態成員。
代碼示例
特殊的inner class:local class
除了inner class的規則之外,local class可以訪問局部final變量,在Java8中有更多的改進。
特殊的local class:anonymous class
12
常量
不廢話了,直接看代碼:
有一點需要注意的是:只有一種情況Java的常量是編譯時常量(編譯器會幫你替換),其它情況都是運行時常量,這種情況是:靜態類型常量且常量的值可以編譯時確定。
接口
Java的接口可以包含方法簽名、常量和嵌套類,見下例:
13
枚舉
Java枚舉是class,繼承自java.lang.Enum,枚舉中可以定義任何類型可以定義的內容,構造方法只能是private或package private,枚舉成員會被編譯器動態翻譯為枚舉實例常量,見下例:
調用枚舉的構造方法格式是:常量名字(xxx, xxx),如果構造方法沒有參數只需要:常量名子,如:
14
異常
Java中的異常分為checked和unchecked,checked異常必須聲明在方法中或被捕獲,這點我覺得比較好,必定:異常也是API的一部分,見下例:
所有繼承Exception的異常(除了RuntimeException和它的後代之外)都是checked異常。
15
裝箱和拆箱
Java提供了原始類型對應的引用類型,在1.5之後的版本還提供了自動裝箱和自動拆箱,結合最新版本的泛型,幾乎可以忽略這塊。
注意:自動裝箱和自動拆箱是Java提供的語法糖。
16
泛型
Java的泛型是編譯器提供的語法糖,官方稱之為:類型參數搽除,先看一下語法,然後總結一點規律:
泛型方法
測試代碼
調用泛型方法
輸出的結果是
17
泛型類
測試代碼
調用代碼
輸出結果
18
泛型接口
測試代碼
調用代碼
輸出結果
19
類型參數約束
測試代碼
調用代碼
輸出結果
類型搽除過程
- 將泛型定義中的類型參數去掉。
2.將T換成extends指定的約束類型,默認是Object。
3.如果有非泛型類型繼承或實現了泛型基類或接口,而且進行了重寫,根據情況,編譯器會自動生成一些方法。
4.根據泛型參數的實際參數搽除調用代碼。
這裡說的不一定正確,特別是Java泛型的約束支持&(如:可以約束實行多個接口),不過過程估計差別不大,我沒有看Java語言規範,這裡只是大概的猜測。
然後今天就講到這裡啦,大家記得點贊收藏,分享轉發,關注小姐姐哦!
java學習資料獲取方式
私信不要多字,不要少字,不要錯字,私信方法:點擊我頭像,進入主頁面,右上角有私信功能,在關注的上方位置。
閱讀更多 希晴帶你學編程 的文章