Java 介紹

Java 簡介

  • Java 是美國 Sun 公司(Stanford University Network)在 1995 年推出的計算機語言。
  • Java 之父:詹姆斯·高斯林(James Gosling)
  • 2009 年,Sun 公司被甲骨文公司收購。

Java 語言的三個版本:

  • JavaSE: Java 語言的標準版,用於桌面應用的開發,是以下兩個版本的基礎。
  • JavaME: Java 語言的小型版,用於嵌入式消費類電子裝置。
  • JavaEE: Java 語言的企業版,用於 Web 方向的網站開發。

Java 語言跨平臺原理

Java 程式並非是直接執行的,而是 Java 編譯器將 Java 源程式編譯成與平臺無關的位元組碼檔案(class 檔案),然後由 Java 虛擬機器(JVM)對位元組碼檔案解釋執行。

所以在不同的作業系統下,只需安裝不同的 Java 虛擬機器即可實現 Java 程式的跨平臺。

JRE 和 JDK

  • JVM(Java Virtual Machine):Java 虛擬機器。
  • JRE(Java Runtime Environment):Java 執行環境,包含了 JVM 和 Java 的核心類庫(Java API)。
  • JDK(Java Development Kit):Java 開發工具,包含了 JRE 和開發工具。

總結:只需安裝 JDK 即可,它包含了 Java 的執行環境和虛擬機器。

JDK 下載/安裝說明

通過 Oracle 官方網站下載對應版本的 JDK。

JDK 安裝目錄說明:

目錄名稱 說明
bin 該路徑下存放了 JDK 的各種工具命令。javac 和 java 就放在這個目錄。
conf 該路徑下存放了 JDK 的相關配置檔案。
include 該路徑下存放了一些平臺特定的標頭檔案。
jmods 該路徑下存放了 JDK 的各種模組。
legal 該路徑下存放了 JDK 各模組的授權文件。
lib 該路徑下存放了 JDK 工具的一些補充 JAR 包。

Java 語法說明

“Hello World”示例:

註釋

註釋是對程式碼的解釋和說明文字,可以提高程式的可讀性,因此在程式中新增必要的註釋文字十分重要。

Java 中的註釋分為三種:

1)單行註釋:單行註釋的格式是使用//,從//開始至本行結尾的文字將作為註釋文字。

// 單行註釋

2)多行註釋:多行註釋的格式是使用/**/將一段較長的註釋括起來。

/*
多行註釋
注意:多行註釋不能巢狀使用
*/

3)文件註釋:文件註釋以/**開始,以*/結束,是 Java 特有的註釋,其中註釋內容可以被 JDK 提供的工具 javadoc 所解析,生成一套以網頁檔案形式體現的該程式的說明文件。

Javadoc –d 指定儲存文件的路徑 -version –author(可選引數) 目標檔案

關鍵字

Java 的關鍵字對 Java 的編譯器有特殊的意義,他們常被用來表示一種資料型別,或者表示程式的結構等。關鍵字不能用作變數名、方法名、類名、包名。

關鍵字的特點:

  • 關鍵字的字母全部小寫。
  • 常用的程式碼編輯器對關鍵字都有高亮顯示,比如 public、class、static 等。
  • 注意:main 不是關鍵字,但可以理解為比關鍵字更為關鍵的單詞,是 JVM 唯一識別的單詞。

識別符號

識別符號是程式設計師在編寫 Java 程式時,自定義的一些名字,例如 helloworld 程式裡關鍵字 class 後跟的“HelloWorld”,就是我們定義的類名。類名就屬於識別符號的一種。

識別符號除了應用在類名上,還可以用在變數、函式名、包名上。

識別符號必須遵循以下規則:

  • 識別符號由英文字元大(a~zA~Z)、數字(0~9)、下劃線(_)和美元符號($)組成。
  • 不能以數字開頭,不能是關鍵字。
  • 區分大小寫。
  • 識別符號可以為任意長度。

Java 中的識別符號命名規範:

  • 包名:多個單片語成時所有字母小寫(例:package、com.util)
  • 類名和介面名:多個單片語成時所有單詞的首字母大寫(例:HelloWorld)
  • 變數名和函式名:多個單片語成時第一個單詞首字母小寫,其他單詞首字母大寫(例:lastAccessTime、getTime)。
  • 常量名:多個單片語成時,字母全部大寫,多個單詞之間使用_分隔(例:INTEGER_CACHE)

注意:上述只是為了增加程式碼規範性、可讀性而做的一種約定,但在定義識別符號時最好還是見名知意,提高程式碼閱讀性。

資料型別

Java 是一個強型別語言,Java 中的資料必須明確資料型別。

在 Java 中的資料型別包括基本資料型別和引用資料型別兩種。

基本資料型別

Java 的基本資料型別有 4 類 8 種:

四類 八種 記憶體佔用(位元組) 取值範圍 說明
整數型別 byte 1 最小值是 -128(-2^7)
最大值是 127(2^7-1)
預設值是 0
byte 型別用在大型陣列中節約空間,主要代替整數,因為 byte 變數佔用的空間只有 int 型別的四分之一。
short 2 最小值是 -32768(-2^15)
最大值是 32767(2^15 - 1);
預設值是 0
short 資料型別也可以像 byte 那樣節省空間。一個 short 變數是 int 型變數所佔空間的二分之一。
int(預設型別) 4 最小值是 -2,147,483,648(-2^31)
最大值是 2,147,483,647(2^(31-1))
預設值是 0
long 8 最小值是 -9,223,372,036,854,775,808(-2^63)
最大值是 9,223,372,036,854,775,807(2^(63-1))
預設值是 0L
這種型別主要使用在需要比較大整數的系統上;
"L"理論上不分大小寫,但是若寫成"l"容易與數字"1"混淆,不容易分辯。所以最好大寫。
浮點型別 float 4 預設值是 0.0f float 資料型別是單精度、32 位、符合IEEE 754 標準的浮點數;
範圍規模可變,保留 7 位小數;
float 在儲存大型浮點陣列的時候可節省記憶體空間;
浮點數不能用來表示精確的值,如貨幣;
double(預設型別) 8 預設值是 0.0d double 資料型別是雙精度、64 位、符合 IEEE 754 標準的浮點數;
範圍規模可變,保留 15 位小數;
浮點數的預設型別為 double 型別;
double型別同樣不能表示精確的值,如貨幣。
字元型別 char 2 最小值是 \u0000(十進位制等效值為 0)
最大值是 \uffff(即為 65535)
char 型別是一個單一的 16 位 Unicode 字元;
char 資料型別可以儲存任何字元。
布林型別 boolean 1 只有兩個取值:true 和 false
預設值是 false
boolean 資料型別表示一位的資訊。

引用資料型別

引用資料型別有類(class)、介面(Interface)、陣列(Array)等。

Book b = new Book();
Book c = new Book();
// 宣告兩個 Book 的引用變數並建立兩個 Book 物件,然後將 Book 物件賦值給引用變數。
b = c;
// 把變數 c 賦值給變數 b,此時 b、c 對應 Book2,而 Book1 已經沒有引用,會被垃圾回收。
c = null;
// 代表它不再引用任何事物,但還是個可以被指定引用其他Book的引用變數。

隱式型別轉換

隱式型別轉換是指把一個表示資料範圍小的數值或者變數賦值給另一個表示資料範圍大的變數。

這種轉換方式是自動的,直接書寫即可。例如:

double num = 10;  // 將 int 型別的 10 直接賦值給 double 型別
System.out.println(num); // 輸出 10.0

整數預設是 int 型別,因此 byte、short 和 char 型別資料在參與整數運算均會自動轉換為 int 型別。

即多個不同資料型別的資料在運算的時候,結果取決於大的資料型別。

強制型別轉換

強制型別轉換是指把一個表示資料範圍大的數值或者變數賦值給另一個表示資料範圍小的變數。

強制型別轉換格式:目標資料型別 變數名 = (目標資料型別)值或者變數;

示例:

double num1 = 5.5;
int num2 = (int) num1; // 將 double 型別的 num1 強制轉換為 int 型別
System.out.println(num2); // 輸出 5(小數位直接捨棄)

案例:

byte a = 3;
byte b = 4;
byte c = a + b; // 錯誤。因為兩個 byte 變數相加,會先提升為 int 型別
byte d = 3 + 4; // 正確。常量優化機制

常量優化機制:在編譯時,整數常量的計算會直接算出結果,並且會自動判斷該結果是否在byte取值範圍內,在則編譯通過,不在則編譯失敗。

編譯器在編譯的時候能確認常量的值,但不能確認變數的值,變數儲存的值只有在執行的時候才會在記憶體分配空間。

變數

變數的定義:在程式執行過程中,其值可以發生改變的量。

從本質上講,變數是記憶體中的一小塊區域,其值可以在一定範圍內變化。

變數的定義方式有如下 3 種:

  1. 宣告變數並賦值
資料型別 變數名 = 初始化值;
int age = 18;
System.out.println(age);
  1. 先宣告,後賦值(在使用前賦值即可)
資料型別 變數名;
變數名 = 初始化值;
double money;
money = 55.5;
System.out.println(money);
  1. 在同一行定義多個同一種資料型別的變數,中間使用逗號隔開。但不建議使用這種方式,因為降低了程式的可讀性。
int a = 10, b = 20;  // 定義int型別的變數a和b,中間使用逗號隔開
System.out.println(a);
System.out.println(b); int c,d; // 宣告int型別的變數c和d,中間使用逗號隔開
c = 30;
d = 40;
System.out.println(c);
System.out.println(d);

變數的修改:

int a = 10;
a = 30; // 變數前面不加資料型別時,表示修改已存在的變數的值。
System.out.println(a);