1. 程式人生 > >Java之Java快速入門篇

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、根據泛型引數的實際引數搽除呼叫程式碼。
在這裡插入圖片描述
宣告:本文內容來源於網路,如有侵權請聯絡刪除
胖胖愛學習愛分享,每日更新,快來關注胖胖和胖胖一起學習吧!