1. 程式人生 > 實用技巧 >Java學習筆記(長期更新)

Java學習筆記(長期更新)

初識Java

20200824

初識

  • Java 是由Sun Microsystems公司於1995年5月推出的高階程式設計語言。
  • Java可運行於多個平臺,如Windows, Mac OS,及其他多種UNIX版本的系統。

簡介

  • Java分為三個體系:
    • JavaSE(J2SE)(Java2 Platform Standard Edition,java平臺標準版)
    • JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平臺企業版)
    • JavaME(J2ME)(Java 2 Platform Micro Edition,java平臺微型版)。
  • 2005年6月,JavaOne大會召開,SUN公司公開Java SE 6。此時,Java的各種版本已經更名以取消其中的數字"2":J2EE更名為Java EE, J2SE更名為Java SE,J2ME更名為Java ME。

主要特性

  • Java語言是簡單的:

    Java語言的語法與C語言和C++語言很接近,使得大多數程式設計師很容易學習和使用。另一方面,Java丟棄了C++中很少使用的、很難理解的、令人迷惑的那些特性,如操作符過載、多繼承、自動的強制型別轉換。特別地,Java語言不使用指標,而是引用。並提供了自動的廢料收集,使得程式設計師不必為記憶體管理而擔憂。

  • Java語言是面向物件的:

    Java語言提供類、介面和繼承等面向物件的特性,為了簡單起見,只支援類之間的單繼承,但支援介面之間的多繼承,並支援類與介面之間的實現機制(關鍵字為implements)。Java語言全面支援動態繫結,而C++語言只對虛擬函式使用動態繫結。總之,Java語言是一個純的面向物件程式設計語言。

  • Java語言是分散式的:

    Java語言支援Internet應用的開發,在基本的Java應用程式設計介面中有一個網路應用程式設計介面(java net),它提供了用於網路應用程式設計的類庫,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠端方法啟用)機制也是開發分散式應用的重要手段。

  • Java語言是健壯的:

    Java的強型別機制、異常處理、垃圾的自動收集等是Java程式健壯性的重要保證。對指標的丟棄是Java的明智選擇。Java的安全檢查機制使得Java更具健壯性。

  • Java語言是安全的:

    Java通常被用在網路環境中,為此,Java提供了一個安全機制以防惡意程式碼的攻擊。除了Java語言具有的許多安全特性以外,Java對通過網路下載的類具有一個安全防範機制(類ClassLoader),如分配不同的名字空間以防替代本地的同名類、位元組程式碼檢查,並提供安全管理機制(類SecurityManager)讓Java應用設定安全哨兵。

  • Java語言是體系結構中立的:

    Java程式(字尾為java的檔案)在Java平臺上被編譯為體系結構中立的位元組碼格式(字尾為class的檔案),然後可以在實現這個Java平臺的任何系統中執行。這種途徑適合於異構的網路環境和軟體的分發。

  • Java語言是可移植的:

    這種可移植性來源於體系結構中立性,另外,Java還嚴格規定了各個基本資料型別的長度。Java系統本身也具有很強的可移植性,Java編譯器是用Java實現的,Java的執行環境是用ANSI C實現的。

  • Java語言是解釋型的:

    如前所述,Java程式在Java平臺上被編譯為位元組碼格式,然後可以在實現這個Java平臺的任何系統中執行。在執行時,Java平臺中的Java直譯器對這些位元組碼進行解釋執行,執行過程中需要的類在聯接階段被載入到執行環境中。

  • Java是高效能的:

    與那些解釋型的高階指令碼語言相比,Java的確是高效能的。事實上,Java的執行速度隨著JIT(Just-In-Time)編譯器技術的發展越來越接近於C++。

  • Java語言是多執行緒的:

    在Java語言中,執行緒是一種特殊的物件,它必須由Thread類或其子(孫)類來建立。通常有兩種方法來建立執行緒:其一,使用型構為Thread(Runnable)的構造子類將一個實現了Runnable介面的物件包裝成一個執行緒,其二,從Thread類派生出子類並重寫run方法,使用該子類建立的物件即為執行緒。值得注意的是Thread類已經實現了Runnable介面,因此,任何一個執行緒均有它的run方法,而run方法中包含了執行緒所要執行的程式碼。執行緒的活動由一組方法來控制。Java語言支援多個執行緒的同時執行,並提供多執行緒之間的同步機制(關鍵字為synchronized)。

  • Java語言是動態的:

    Java語言的設計目標之一是適應於動態變化的環境。Java程式需要的類能夠動態地被載入到執行環境,也可以通過網路來載入所需要的類。這也有利於軟體的升級。另外,Java中的類有一個執行時刻的表示,能進行執行時刻的型別檢查。

發展歷史

  • 1995年5月23日,Java語言誕生
  • 1996年1月,第一個JDK-JDK1.0誕生
  • 1996年4月,10個最主要的作業系統供應商申明將在其產品中嵌入JAVA技術
  • 1996年9月,約8.3萬個網頁應用了JAVA技術來製作
  • 1997年2月18日,JDK1.1釋出
  • 1997年4月2日,JavaOne會議召開,參與者逾一萬人,創當時全球同類會議規模之紀錄
  • 1997年9月,JavaDeveloperConnection社群成員超過十萬
  • 1998年2月,JDK1.1被下載超過2,000,000次
  • 1998年12月8日,JAVA2企業平臺J2EE釋出
  • 1999年6月,SUN公司釋出Java的三個版本:標準版(JavaSE,以前是J2SE)、企業版(JavaEE以前是J2EE)和微型版(JavaME,以前是J2ME)
  • 2000年5月8日,JDK1.3釋出
  • 2000年5月29日,JDK1.4釋出
  • 2001年6月5日,NOKIA宣佈,到2003年將出售1億部支援Java的手機
  • 2001年9月24日,J2EE1.3釋出
  • 2002年2月26日,J2SE1.4釋出,自此Java的計算能力有了大幅提升
  • 2004年9月30日18:00PM,J2SE1.5釋出,成為Java語言發展史上的又一里程碑。為了表示該版本的重要性,J2SE1.5更名為Java SE 5.0
  • 2005年6月,JavaOne大會召開,SUN公司公開Java SE 6。此時,Java的各種版本已經更名,以取消其中的數字"2":J2EE更名為Java EE,J2SE更名為Java SE,J2ME更名為Java ME
  • 2006年12月,SUN公司釋出JRE6.0
  • 2009年04月20日,甲骨文74億美元收購Sun。取得java的版權。
  • 2010年11月,由於甲骨文對於Java社群的不友善,因此Apache揚言將退出JCP[4]。
  • 2011年7月28日,甲骨文釋出 Java7.0 的正式版。
  • 2014年3月18日,Oracle公司發表 Java SE 8。
  • 2017年9月21日,Oracle公司發表 Java SE 9
  • 2018年3月21日,Oracle公司發表 Java SE 10
  • 2018年9月25日,Java SE 11 釋出
  • 2019年3月20日,Java SE 12 釋出

Java關鍵字

類別 關鍵字 說明
訪問控制 private 私有的
protected 受保護的
public 公共的
default 預設
類、方法和變數修飾符 abstract 宣告抽象
class
extends 擴充,繼承
final 最終值,不可改變的
implements 實現(介面)
interface 介面
native 本地,原生方法(非 Java 實現)
new 新,建立
static 靜態
strictfp 嚴格,精準
synchronized 執行緒,同步
transient 短暫
volatile 易失
程式控制語句 break 跳出迴圈
case 定義一個值以供 switch 選擇
continue 繼續
default 預設
do 執行
else 否則
for 迴圈
if 如果
instanceof 例項
return 返回
switch 根據值選擇執行
while 迴圈
錯誤處理 assert 斷言表示式是否為真
catch 捕捉異常
finally 有沒有異常都執行
throw 丟擲一個異常物件
throws 宣告一個異常可能被丟擲
try 捕獲異常
包相關 import 引入
package
基本型別 boolean 布林型
byte 位元組型
char 字元型
double 雙精度浮點
float 單精度浮點
int 整型
long 長整型
short 短整型
變數引用 super 父類,超類
this 本類
void 無返回值
保留關鍵字 goto 是關鍵字,但不能使用
const 是關鍵字,但不能使用
null

核心基礎

註釋

  • 單行註釋 //

  • 多行註釋(不可以巢狀使用) /**/

  • java特有的文件註釋

    /**
    	@author ···
    	@version ···
    	@···
    */
    
    • 註釋的內容可以被JDK提供的工具Javadoc所解析,生成一套一網頁形式的體現該程式說明的文件
    javadoc -d 資料夾名 -author -version 原始檔名
    

Tip:關鍵字public 必須加在同名檔案的類名前,且一個檔案中有且僅有一個public關鍵字宣告的類

Tip:程式的入口是mian方法,格式是固定的public static void main(String[] arguements)

  • 示例程式碼

    public class test{
    	public static void main(String[] args){
    		System.out.println("Hello Java");
    		// print() 方法也是輸出但是不會在結尾新增換行符
    	}
    }
    

Tip:語句結束符;

Tip:在java檔案中每宣告一個類在編譯完成後都會生成一個對應的.class位元組碼檔案

編寫注意事項

  • 大小寫敏感:Java 是大小寫敏感的,這就意味著識別符號 Hello 與 hello 是不同的。
  • 類名:對於所有的類來說,類名的首字母應該大寫。如果類名由若干單片語成,那麼每個單詞的首字母應該大寫,例如 MyFirstJavaClass
  • 方法名:所有的方法名都應該以小寫字母開頭。如果方法名含有若干單詞,則後面的每個單詞首字母大寫。
  • 原始檔名:原始檔名必須和類名相同。當儲存檔案的時候,你應該使用類名作為檔名儲存(切記 Java 是大小寫敏感的),檔名的字尾為 .java。(如果檔名和類名不相同則會導致編譯錯誤)。
  • 主方法入口:所有的 Java 程式由 public static void main(String[] args) 方法開始執行。

識別符號

  • 所有的識別符號都應該以字母(A-Z 或者 a-z),美元符($)、或者下劃線(_)開始
  • 首字元之後可以是字母(A-Z 或者 a-z),美元符($)、下劃線(_)或數字的任何字元組合
  • 關鍵字不能用作識別符號
  • 識別符號是大小寫敏感的
  • 合法識別符號舉例:age、$salary、_value、__1_value
  • 非法識別符號舉例:123abc、-salary

修飾符

  • 訪問控制修飾符 : default, public , protected, private
  • 非訪問控制修飾符 : final, abstract, static, synchronized

命名規範

  • 包名:多單片語成時所有所有字母小寫
  • 類名、介面名:大駝峰命名法
  • 變數名、方法名:小駝峰命名法
  • 常量名:所有的字母大寫,多個單詞使用下劃線連線
  • 所有命名都應遵循見名知意

Tip:java使用的是Unicode字符集,因此識別符號可以使用漢字,但是不建議使用!

變數

  • 類變數:獨立於方法之外的變數,用 static 修飾。
    • 類變數也稱為靜態變數,在類中以 static 關鍵字宣告,但必須在方法之外。
    • 無論一個類建立了多少個物件,類只擁有類變數的一份拷貝。
    • 靜態變數除了被宣告為常量外很少使用。常量是指宣告為public/private,final和static型別的變數。常量初始化後不可改變。
    • 靜態變數儲存在靜態儲存區。經常被宣告為常量,很少單獨使用static宣告變數。
    • 靜態變數在第一次被訪問時建立,在程式結束時銷燬。
    • 與例項變數具有相似的可見性。但為了對類的使用者可見,大多數靜態變數宣告為public型別。
    • 預設值和例項變數相似。數值型變數預設值是0,布林型預設值是false,引用型別預設值是null。變數的值可以在宣告的時候指定,也可以在構造方法中指定。此外,靜態變數還可以在靜態語句塊中初始化。
    • 靜態變數可以通過:ClassName.VariableName的方式訪問。
    • 類變數被宣告為public static final型別時,類變數名稱一般建議使用大寫字母。如果靜態變數不是public和final型別,其命名方式與例項變數以及區域性變數的命名方式一致。
  • 例項變數:獨立於方法之外的變數,不過沒有 static 修飾。
    • 例項變數宣告在一個類中,但在方法、構造方法和語句塊之外;
    • 當一個物件被例項化之後,每個例項變數的值就跟著確定;
    • 例項變數在物件建立的時候建立,在物件被銷燬的時候銷燬;
    • 例項變數的值應該至少被一個方法、構造方法或者語句塊引用,使得外部能夠通過這些方式獲取例項變數資訊;
    • 例項變數可以宣告在使用前或者使用後;
    • 訪問修飾符可以修飾例項變數;
    • 例項變數對於類中的方法、構造方法或者語句塊是可見的。一般情況下應該把例項變數設為私有。通過使用訪問修飾符可以使例項變數對子類可見;
    • 例項變數具有預設值。數值型變數的預設值是0,布林型變數的預設值是false,引用型別變數的預設值是null。變數的值可以在宣告時指定,也可以在構造方法中指定;
    • 例項變數可以直接通過變數名訪問。但在靜態方法以及其他類中,就應該使用完全限定名:ObejectReference.VariableName。
  • 區域性變數:類的方法中的變數。
    • 區域性變數宣告在方法、構造方法或者語句塊中;
    • 區域性變數在方法、構造方法、或者語句塊被執行的時候建立,當它們執行完成後,變數將會被銷燬;
    • 訪問修飾符不能用於區域性變數;
    • 區域性變數只在宣告它的方法、構造方法或者語句塊中可見;
    • 區域性變數是在棧上分配的。
    • 區域性變數沒有預設值,所以區域性變數被聲明後,必須經過初始化,才可以使用。

變數的分類(資料型別)

  • 資料型別
    • 基本資料型別
      • 數值型
        • 整數型別(byte,short,int,long)
        • 浮點型別(float,double)
      • 字元型(char)
      • 布林型(boolean)
    • 引用資料型別
      • 類(class)
      • 介面(interface)
      • 陣列(array)