Java從入門到實戰之(1)java基礎
Java 簡介
什麼是Java?
Java是一種流行的程式語言,創建於1995年。
Java屬於Oracle公司所有,執行Java的裝置超過30億臺。
Java可用於:
- 移動應用(特別是Android應用)
- 桌面應用程式
- Web應用程式
- Web伺服器和應用程式伺服器
- 遊戲
- 資料庫連線
- 更多
為什麼用Java?
- Java可以在不同的平臺上執行(Windows、Mac、Linux、Raspberry Pi等)。
- 它是世界上最流行的程式語言之一
- 它易學易用
- 它是開源和免費的
- 它安全、快速、強大
- 它擁有強大的社群支援(數千萬開發者)
開始
本教程將學習Java的基礎知識。
不要求有程式設計經驗。
Java 環境搭建
Java安裝
一些電腦可能已經安裝了Java。
要檢查你的Windows電腦上是否安裝了Java,可以在開始欄中搜索Java,或者在命令提示符(cmd.exe)中輸入以下命令:
Kevin@qikegu C:\Users\Kevin
> java -version
如果安裝了Java,您將看到如下內容(取決於版本):
java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
如果您的計算機上沒有安裝Java,可以從oracle.com免費下載。
windows Java路徑設定
需要把Java可執行程式(bin)目錄新增到windows的Path環境變數中,這樣才能直接執行Java的命令。
按如下步驟操作:
1. 我的電腦->屬性->高階系統設定
2. 點選”環境變數”
3. 如下圖所示,開啟”Path”設定對話方塊
4. 如下圖所示,把Java可執行程式(bin)目錄新增到windows的Path環境變數中
5. 驗證路徑設定,執行 java -version
Kevin@QIKEGU C:\Users\Kevin > java -version java version"1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
Java 快速入門
在Java中,每個應用程式都以類名開頭,該類必須與檔名匹配。
讓我們建立第一個Java檔案MyClass.java
,可以在任何文字編輯器(如記事本)中編寫該檔案。
該程式會輸出一條“Hello World”訊息,程式碼如下:
MyClass.java
public class MyClass { public static void main(String[] args) { System.out.println("Hello World"); } }
如果不理解上面的程式碼,請不要擔心 – 我們將在後面的章節中詳細討論它。現在,只需執行它。
將程式碼儲存為“MyClass.java”檔案。開啟命令列工具(cmd.exe),切換到儲存檔案的目錄,輸入“javac MyClass.java”:
Kevin@QIKEGU G:\project\qikegu-demo\java
> javac MyClass.java
這將編譯你的程式碼。如果程式碼中沒有錯誤,完成編譯後,輸入“java MyClass”執行檔案:
Kevin@QIKEGU G:\project\qikegu-demo\java
> java MyClass
輸出應該是:
Hello World
恭喜你編寫並執行了第一個Java程式。
Java 基本語法
在前一章中,我們建立了一個名為MyClass.java
的Java檔案,執行時把“Hello World”列印到螢幕上,程式碼如下:
public class MyClass { public static void main(String[] args) { System.out.println("Hello World"); } }
例子解釋
在Java中執行的每一行程式碼都必須在一個類中。示例中,類被命名為MyClass,類名的首字母是大寫的。
注意:Java是區分大小寫的: “MyClass”和“myclass”是不同的。
java檔案的名稱必須與類名匹配。儲存檔案時,使用類名儲存,並新增.java
副檔名。
要執行上面的示例,請確保正確安裝了Java: 轉到Java 環境搭建一章。輸出應該是:
Hello World
main 方法
main()
方法是必需的,每個Java程式中都包含:
public static void main(String[] args)
main()
方法是Java程式的執行入口,該方法中的所有程式碼都將被執行。目前不必深究main前後的關鍵字,學習本教程後續內容時,將逐步瞭解它們。
現在,只要記住每個Java程式都有一個類名,這個類名必須與檔名匹配,每個程式都必須包含一個main()
方法。
System.out.println()
在main()
方法內部,可以使用println()
方法向螢幕列印一行文字:
public static void main(String[] args) { System.out.println("Hello World"); }
注意:在Java中,每個程式碼語句必須以分號結束。
Java 註釋
Java中,註釋可以用來解釋程式碼,使其更具可讀性。註釋還可以遮蔽程式碼,在除錯時很有用。
單行註釋以兩個前斜槓(//
)開頭。
Java會忽略//
和行尾之間的任何文字(不會執行)。
這個例子在程式碼行之前使用單行註釋:
示例
// 這是註釋 System.out.println("Hello World");
這個例子在一行程式碼的末尾使用單行註釋:
示例
System.out.println("Hello World"); // 這是註釋
Java多行註釋
多行註釋以/*
開頭,以*/
結尾。
Java將忽略/*
和*/
之間的任何文字。
本例使用多行註釋(註釋塊)來解釋程式碼:
示例
/* 下面的程式碼向螢幕 列印“Hello World”*/ System.out.println("Hello World");
Java 變數
Java 運算子
運算子用於對變數和值進行運算操作。
參與運算的值稱為運算元,運算操作(在兩個運算元之間執行)由運算子定義:
運算元 | 運算子 | 運算元 |
---|---|---|
100 | + | 50 |
在下面的例子中,數字100
和50
是運算元,+
是運算子:
示例
int x = 100 + 50;
+
運算子可用於將兩個值相加,就像上面的例子一樣,但它也可以用於將一個變數和一個值相加,或者將兩個變數相加:
示例
int sum1 = 100 + 50; // 150 (100 + 50) int sum2 = sum1 + 250; // 400 (150 + 250) int sum3 = sum2 + sum2; // 800 (400 + 400)
Java將運算子分為以下幾組:
- 算術運算子
- 賦值運算子
- 比較運算子
- 邏輯運算子
- 按位運算子
Java算術運算子
算術運算子用於執行常見的數學運算。
運算子 | 名稱 | 描述 | 例子 |
---|---|---|---|
+ | 加 | 將兩個值相加 | x + y |
– | 減 | 從一個值減去另一個值 | x – y |
* | 乘 | 兩個值相乘 | x * y |
/ | 除 | 將一個值除以另一個值 | x / y |
% | 取模 | 返回除法餘數 | x % y |
++ | 增加 | 將變數的值增加1 | ++x |
— | 減少 | 將變數的值減少1 | –x |
Java賦值操作符
賦值運算子用於為變數賦值。
在下面的例子中,我們使用賦值運算子(=
)將值10賦給一個名為x的變數:
示例
int x = 10;
加法賦值運算子(+=
)向變數加一個值:
示例
int x = 10; x += 5;
所有賦值運算子的列表:
運算子 | 例子 | 等價於 |
---|---|---|
= | x = 5 | x = 5 |
+= | x += 3 | x = x + 3 |
-= | x -= 3 | x = x – 3 |
*= | x *= 3 | x = x * 3 |
/= | x /= 3 | x = x / 3 |
%= | x %= 3 | x = x % 3 |
&= | x &= 3 | x = x & 3 |
|= | x |= 3 | x = x | 3 |
^= | x ^= 3 | x = x ^ 3 |
>>= | x >>= 3 | x = x >> 3 |
<<= | x <<= 3 | x = x << 3 |
Java比較運算子
比較運算子用於比較兩個值:
運算子 | 名稱 | 例子 |
---|---|---|
== | 等於 | x == y |
!= | 不等於 | x != y |
> | 大於 | x > y |
< | 小於 | x < y |
>= | 大於等於 | x >= y |
<= | 小於等於 | x <= y |
Java邏輯運算子
邏輯運算子用於確定變數或值之間的邏輯:
運算子 | 名稱 | 描述 | 例子 |
---|---|---|---|
&& | 邏輯與 | 如果兩個語句都為真,則返回true | x < 5 && x < 10 |
|| | 邏輯或 | 如果其中一個語句為真,則返回true | x < 5 || x < 4 |
! | 邏輯非 | 反轉結果,如果結果為真,則返回false | !(x < 5 && x < 10) |
Java 型別轉換
Java 型別轉換
型別轉換是將一種基本型別的值賦給另一種基本型別。
Java中,有兩種型別轉換:
- 擴大轉換(自動) – 將位元組數較小型別轉換為較大型別
byte
->short
->char
->int
->long
->float
->double
-
縮小轉換(手動) – 將位元組數較大型別轉換為較小型別
double
->float
->long
->int
->char
->short
->byte
擴大轉換
將位元組數較小型別轉換為較大型別時,自動進行位元組數加大轉換:
示例
public class MyClass { public static void main(String[] args) { int myInt = 9; double myDouble = myInt; // 自動轉換: int 到 double System.out.println(myInt); // 輸出 9 System.out.println(myDouble); // 輸出 9.0 } }
縮小轉換
將位元組數較大型別轉換為較小型別,必須手動轉換,方法是將型別用括號括起來,放在要轉換的值前面:
示例
public class MyClass { public static void main(String[] args) { double myDouble = 9.78; int myInt = (int) myDouble; // 手動轉換: double 到 int System.out.println(myDouble); // 輸出 9.78 System.out.println(myInt); // 輸出 9 } }
Java 運算子
運算子用於對變數和值進行運算操作。
參與運算的值稱為運算元,運算操作(在兩個運算元之間執行)由運算子定義:
運算元 | 運算子 | 運算元 |
---|---|---|
100 | + | 50 |
在下面的例子中,數字100
和50
是運算元,+
是運算子:
示例
int x = 100 + 50;
+
運算子可用於將兩個值相加,就像上面的例子一樣,但它也可以用於將一個變數和一個值相加,或者將兩個變數相加:
示例
int sum1 = 100 + 50; // 150 (100 + 50) int sum2 = sum1 + 250; // 400 (150 + 250) int sum3 = sum2 + sum2; // 800 (400 + 400)
Java將運算子分為以下幾組:
- 算術運算子
- 賦值運算子
- 比較運算子
- 邏輯運算子
- 按位運算子
Java算術運算子
算術運算子用於執行常見的數學運算。
運算子 | 名稱 | 描述 | 例子 |
---|---|---|---|
+ | 加 | 將兩個值相加 | x + y |
– | 減 | 從一個值減去另一個值 | x – y |
* | 乘 | 兩個值相乘 | x * y |
/ | 除 | 將一個值除以另一個值 | x / y |
% | 取模 | 返回除法餘數 | x % y |
++ | 增加 | 將變數的值增加1 | ++x |
— | 減少 | 將變數的值減少1 | –x |
Java賦值操作符
賦值運算子用於為變數賦值。
在下面的例子中,我們使用賦值運算子(=
)將值10賦給一個名為x的變數:
示例
int x = 10;
加法賦值運算子(+=
)向變數加一個值:
示例
int x = 10; x += 5;
所有賦值運算子的列表:
運算子 | 例子 | 等價於 |
---|---|---|
= | x = 5 | x = 5 |
+= | x += 3 | x = x + 3 |
-= | x -= 3 | x = x – 3 |
*= | x *= 3 | x = x * 3 |
/= | x /= 3 | x = x / 3 |
%= | x %= 3 | x = x % 3 |
&= | x &= 3 | x = x & 3 |
|= | x |= 3 | x = x | 3 |
^= | x ^= 3 | x = x ^ 3 |
>>= | x >>= 3 | x = x >> 3 |
<<= | x <<= 3 | x = x << 3 |
Java比較運算子
比較運算子用於比較兩個值:
運算子 | 名稱 | 例子 |
---|---|---|
== | 等於 | x == y |
!= | 不等於 | x != y |
> | 大於 | x > y |
< | 小於 | x < y |
>= | 大於等於 | x >= y |
<= | 小於等於 | x <= y |
Java邏輯運算子
邏輯運算子用於確定變數或值之間的邏輯:
運算子 | 名稱 | 描述 | 例子 |
---|---|---|---|
&& | 邏輯與 | 如果兩個語句都為真,則返回true | x < 5 && x < 10 |
|| | 邏輯或 | 如果其中一個語句為真,則返回true | x < 5 || x < 4 |
! | 邏輯非 | 反轉結果,如果結果為真,則返回false | !(x < 5 && x < 10) |
Java 字串
Java字串/String
字串用於儲存文字。
一個字串變數包含了一組由雙引號括起來的字元:
示例
建立一個String
型別的變數,併為其賦值:
String greeting = "Hello";
字串長度
Java中的字串實際上是一個物件,字串物件包含了一組操作字串的方法。例如,可以使用length()
方法獲取字串長度:
示例
String txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
System.out.println("字串長度是: " + txt.length());
更多字串方法
有很多字串方法可用,例如toUpperCase()
和toLowerCase()
:
示例
String txt = "Hello World"; System.out.println(txt.toUpperCase()); // 輸出 "HELLO WORLD" System.out.println(txt.toLowerCase()); // 輸出 "hello world"
在字串中查詢字串
indexOf()
方法在字串中查詢字串,返回被查詢字串首次出現的索引(位置):
示例
String txt = "奇客谷教程 - Java 教程"; System.out.println(txt.indexOf("Java")); // 輸出 8
Java從0開始計算位置。
0是字串中的第一個位置,1是第二個,2是第三個…
字串拼接
可以使用+
運算子拼接兩個字串:
示例
String firstName = "Kevin"; String lastName = "Wu"; System.out.println(firstName + " " + lastName);
注意,在firstName
與lastName
之間,我們添加了一個空格。
還可以使用concat()
方法拼接兩個字串:
示例
String firstName = "Kevin "; String lastName = "Wu"; System.out.println(firstName.concat(lastName));
特殊字元
因為字串必須用引號括起來,如果字串中含有引號,Java會報錯:
String txt = "關於西湖的詩句: "畢竟西湖六月中,風光不與四時同"";
要避免這個問題,可以使用反斜槓轉義字元。
反斜槓(\
)轉義字元將特殊字元轉換為字串字元:
轉義字元 | 結果 | 描述 |
---|---|---|
\’ | ‘ | 單引號 |
\” | “ | 雙引號 |
\\ | \ | 反斜槓 |
\"
在字串中插入雙引號:
示例
String txt = "關於西湖的詩句: \"畢竟西湖六月中,風光不與四時同\"";
\'
在字串中插入單引號:
示例
String txt = "It\'s OK.";
\\
在字串中插入一個反斜槓:
示例
String txt = "字元 \\ 稱為反斜槓.";
Java中,還有幾個轉義組合:
轉義字元 | 結果 |
---|---|
\n | 換行 |
\r | 回車 |
\t | 製表符 |
\b | 退格 |
\f | 換頁 |
數字相加和字串拼接
警告: Java中,加法和字串拼接都是用`+`運算子,2個數字相加是值相加,2個字串相加是字串拼接。兩個數字相加,結果將是一個數字:
示例
int x = 10; int y = 20; int z = x + y; // z 將是 30 (一個整型值)
兩個字串相加,結果將是拼接後的一個字串:
示例
String x = "10"; String y = "20"; String z = x + y; // z 將是 1020 (一個字串)
如果數字和字串相加,會作為字串拼接處理,結果將是一個字串:
示例
String x = "10"; int y = 20; String z = x + y; // z 將是 1020 (一個字串)
Java Math
Java Math類有許多方法可用於數學計算。
Math.max(x,y)
Math.max(x,y)
方法可以求出x, y中的最大值:
示例
Math.max(5, 10);
Math.min(x,y)
Math.min(x,y)
方法可以求出x, y中的最小值:
示例
Math.min(5, 10);
Math.sqrt(x)
Math.sqrt(x)
方法返回√x:
示例
Math.sqrt(64);
Math.abs(x)
Math.abs(x)
方法返回x的絕對值(正值):
示例
Math.abs(-4.7)
Math.random()
Math.random()
返回一個介於0(含)和1(不含)之間的隨機數:
示例
Math.random();
Java 布林運算
Java 布林型別
在程式設計中,有時需要的資料型別,取值只能取兩個值之一,比如:
- 是/否
- 開/關
- 真/假
為此,Java有一個boolean
資料型別,可以取值:true
或false
。
布林值
布林型別是用boolean
關鍵字宣告的,只能取值:true
或false
:
示例
boolean isJavaFun = true; boolean isFishTasty = false; System.out.println(isJavaFun); // 輸出 true System.out.println(isFishTasty); // 輸出 false
布林表示式
布林表示式是返回布林值true
或false
的Java表示式。
可以使用比較運算子,例如大於(>
)運算子,來檢驗表示式是否為真:
示例
System.out.println(10 > 9); // 返回true, 因為 10 大於 9
在下面的例子中,使用等號(==
)比較運算子來計算表示式:
示例
int x = 10; System.out.println(x == 10); // 返回true, 因為x的值是10
示例
System.out.println(10 == 15); // 返回false, 因為10不等於15
Java中,布林表示式是所有比較運算和條件判斷的基礎。
Java If … Else
Java 條件和If語句
Java支援數學中常見的邏輯條件:
- 小於:
a < b
- 小於等於:
a <= b
- 大於:
a > b
- 大於等於:
a >= b
- 等於:
a == b
- 不等於:
a != b
可以使用這些條件做判斷,然後執行不同的程式碼。
Java有以下條件語句:
if
如果條件為真,if
中的程式碼塊將被執行else
如果if
語句中的條件為假,else
中的程式碼塊將被執行else if
如果第一個條件不成立,則指定一個新條件switch
指定多個條件,匹配條件下的程式碼塊將被執行
if語句
使用if語句,指定當條件為真時,要執行的程式碼塊。
語法
if (條件) { // 條件為真時,要執行的程式碼塊 }
注意if是小寫字母。大寫字母(If或IF)將產生錯誤。
在下面的例子中,我們測試兩個值,看看20是否大於18。如果條件為真,列印一些文字:
示例
if (20 > 18) { System.out.println("20 大於 18"); }
我們也可以測試變數:
示例
int x = 20; int y = 18; if (x > y) { System.out.println("x 大於 y"); }
在上面的例子中,我們使用兩個變數x和y,來測試x是否大於y(使用>
運算子)。當x = 20,y = 18,我們知道20大於18,螢幕上將列印“x大於y”。
else語句
使用else語句,指定如果條件為假時,要執行的程式碼塊。
語法
if (條件) { // 條件為真時,要執行的程式碼塊 } else { // 條件為假時,要執行的程式碼塊 }
示例
int time = 20; if (time < 18) { System.out.println("白天"); } else { System.out.println("夜晚"); } // 輸出 "夜晚"
在上面的例子中,time(20)大於18,所以條件為假,程式將執行else語句,在螢幕上列印“夜晚”。如果時間小於18,程式將列印“白天”。
else if語句
使用else if語句,當第一個條件為假時,指定一個新條件。
語法
if (條件1) { // 條件1為真時,要執行的程式碼塊 } else if (條件2) { // 條件1為假,條件2為真時,要執行的程式碼塊 } else { // 條件1為假,條件2為假時,要執行的程式碼塊 }
示例
int time = 22; if (time < 6) { System.out.println("夜晚"); } else if (time < 18) { System.out.println("白天"); } else { System.out.println("夜晚"); } // 輸出 "夜晚"
在上面的例子中,time(22)大於6,所以第一個條件為假,接下來else if語句中的條件也為假,程式會繼續執行,到達else程式碼塊,螢幕上將列印“夜晚”。
如果time = 14,程式會列印“白天”。
if…else 精簡格式(三元運算子)
如果if與else程式碼塊中都只有一個語句要執行,可以把它們放在同一行:
語法
variable = (條件) ? 條件真時執行的語句 : 條件假時執行的語句;
更換下面的寫法
示例
int time = 20; if (time < 18) { System.out.println("白天"); } else { System.out.println("夜晚"); }
可以簡單地寫為:
示例
int time = 20; String result = (time < 18) ? "白天" : "夜晚"; System.out.println(result);
Java Switch
Java Switch語句
使用switch
語句,可以從許多程式碼塊中選擇一個執行。
語法
switch(表示式) { case x: // 程式碼塊 break; case y: // 程式碼塊 break; default: // 程式碼塊 }
switch
語句是這樣工作的:
switch
中的表示式求值一次。- 將表示式的值與每個
case
的值進行比較。 - 如果匹配,則執行相關聯的程式碼塊。
break
和default
關鍵字是可選的,本章稍後將對此進行描述
下面的例子,使用周工作日編號來計算周工作日名稱:
示例
int day = 4; switch (day) { case 1: System.out.println("週一"); break; case 2: System.out.println("週二"); break; case 3: System.out.println("週三"); break; case 4: System.out.println("週四"); break; case 5: System.out.println("週五"); break; case 6: System.out.println("週六"); break; case 7: System.out.println("週日"); break; } // 輸出 "週四" (day 4)
break 關鍵字
當程式執行遇到break
關鍵字時,就會跳出當前switch塊。後續的case
都會跳過,不再檢測。
當找到匹配項,工作完成時,就該跳出了,沒有必要進行更多的檢測。
break可以節省執行時間,因為“跳過”了switch
塊中剩餘程式碼的執行。
default 關鍵字
當沒有匹配的case
時,default
關鍵字下的程式碼塊就會執行。
示例
int day = 4; switch (day) { case 6: System.out.println("今天是週六"); break; case 7: System.out.println("今天是週日"); break; default: System.out.println("期待週末"); } // 輸出 "期待週末"
注意,如果default
語句是switch塊中的最後一個語句,則不需要break
。
Java While 迴圈
迴圈
只要滿足指定的條件,迴圈會反覆執行某個程式碼塊。
Java While 迴圈
只要條件為真,while迴圈語句會迴圈執行一個程式碼塊:
語法
while (條件) { // 要執行的程式碼塊 }
在下面的例子中,只要變數(i
)小於5,迴圈中的程式碼就會反覆執行:
示例
int i = 0; while (i < 5) { System.out.println(i); i++; }
注意: 不要忘記給變數
i
遞增,否則迴圈將永遠不會結束!
Do/While
do/while
迴圈是while
迴圈的變體。此迴圈將先執行一次程式碼塊,然後再檢查條件,只要條件為真,迴圈將繼續。
語法
do { // 要執行的程式碼塊 } while (條件);
下面的示例使用do/while迴圈,迴圈將至少執行一次,即使條件是假的。因為會先執行一次程式碼塊,然後再檢查條件:
示例
int i = 0; do { System.out.println(i); i++; } while (i < 5);
注意: 不要忘記給變數i
遞增,否則迴圈將永遠不會結束!
Java For 迴圈
當確切地知道一段程式碼要迴圈的次數時,最好使用for迴圈,而不是while迴圈:
語法
for (語句1; 語句2; 語句3) { // 要執行的程式碼塊 }
- 語句1在程式碼塊執行之前執行(一次)。
- 語句2定義了執行程式碼塊的條件。
- 語句3在程式碼塊執行之後(每次)執行。
下面的例子將列印數字0到4:
示例
for (int i = 0; i < 5; i++) { System.out.println(i); }
- 語句1 在迴圈開始之前設定一個變數(int i = 0)。
- 語句2 定義了迴圈執行的條件(i必須小於5),如果條件為真,迴圈將再次執行,如果條件為假,迴圈將結束。
- 語句3 迴圈中的程式碼塊每次執行後,都會給變數
i
遞增1(i++)。
另一個例子
這個例子列印0到10之間的偶數值:
示例
for (int i = 0; i <= 10; i = i + 2) { System.out.println(i); }
For-Each 迴圈
還有一個for-each
迴圈,專門用來遍歷陣列中的元素:
語法
for (型別 變數 : 陣列) { // 要執行的程式碼塊 }
下面的例子使用for-each
迴圈,輸出vehicle
陣列中的所有元素:
示例
String[] vehicle = {"自行車", "電動車", "汽車", "高鐵"}; for (String i : vehicle) { System.out.println(i); }
Java Break 與 Continue
Java Break
前面章節中,介紹switch語句時,學習過break
語句,它用於“跳出”switch語句。
break
語句也可以用來跳出迴圈。
這個例子中,當i等於4時跳出迴圈:
示例
for (int i = 0; i < 10; i++) { if (i == 4) { break; } System.out.println(i); }
Java Continue
continue
語句中斷本次迴圈中的程式碼執行,但迴圈會繼續。
注意:
continue
語句之後將繼續執行下一次迴圈,而break
語句是跳出整個迴圈。
這個例子,當i等於4時跳過,不列印:
示例
for (int i = 0; i < 10; i++) { if (i == 4) { continue; } System.out.println(i); }
While 迴圈中的 break 與 continue
也可以在while循序中使用break
和continue
:
Break 示例
int i = 0; while (i < 10) { System.out.println(i); i++; if (i == 4) { break; } }
Continue 示例
int i = 0; while (i < 10) { if (i == 4) { i++; continue; } System.out.println(i); i++; }
Java 陣列
Java陣列/Array
使用陣列可以在單個變數中儲存一組型別相同的值。
宣告陣列,使用型別字尾方括號定義陣列變數:
String[] vehicle;
上面例子中,聲明瞭一個字串陣列。
要把值插入到陣列中,可以使用以下方式:
String[] vehicle = {"自行車", "電動車", "汽車", "高鐵"};
要建立一個整數陣列,如下所示:
int[] myNum = {10, 20, 30, 40};
訪問陣列的元素
要訪問陣列元素,可使用索引號。
這個例子訪問vehicle中第一個元素的值:
示例
String[] vehicle = {"自行車", "電動車", "汽車", "高鐵"}; System.out.println(vehicle[0]); // 輸出 自行車
注意: 陣列索引以0開頭: [0]是第一個元素,[1]是第二個元素,以此類推。
更改陣列元素
要更改特定元素的值,可使用索引號:
示例
vehicle[0] = "飛機";
示例
String[] vehicle = {"自行車", "電動車", "汽車", "高鐵"}; vehicle[0] = "飛機"; System.out.println(vehicle[0]); // 現在輸出 飛機,而不是 自行車
陣列長度
要知道一個數組有多少個元素,可以使用length
屬性:
示例
String[] vehicle = {"自行車", "電動車", "汽車", "高鐵"}; System.out.println(vehicle.length); // 輸出 4
遍歷陣列
可以使用for迴圈遍歷陣列,使用length
屬性指定迴圈次數。
下面的示例,輸出vehicle陣列中的所有元素:
示例
String[] vehicle = {"自行車", "電動車", "汽車", "高鐵"}; for (int i = 0; i < vehicle.length; i++) { System.out.println(vehicle[i]); }
使用For-Each遍歷陣列
還有一個for-each
迴圈,專門用於遍歷陣列中的元素:
語法
for (型別 變數 : 陣列) { ... }
下面的例子,使用for-each
迴圈,輸出vehicle陣列中的所有元素:
示例
String[] vehicle = {"自行車", "電動車", "汽車", "高鐵"}; for (String i : vehicle) { System.out.println(i); }
上面的例子,可以這樣理解:對於字串陣列vehicle中的每個元素i,打印出它的值。
比較for
迴圈和for-each
迴圈,可以看到for-each
迴圈更容易編寫,不需要計數器(使用length
屬性),可讀性更好。
多維陣列
多維陣列是包含一個或多個數組的陣列。
要建立一個二維陣列,可以把陣列作為陣列元素:
示例
int[][] myNumbers = { {1, 2, 3, 4}, {5, 6, 7} };
myNumbers
現在是一個二維陣列,包含了兩個陣列作為元素。
要訪問二維陣列myNumbers
中的元素,需指定兩個索引: 一個索引用於陣列,另一個索引用於陣列中的元素。
下面的例子訪問myNumbers
中,第二個陣列(1)中的第三個元素(2):
示例
int[][] myNumbers = { {1, 2, 3, 4}, {5, 6, 7} }; int x = myNumbers[1][2]; System.out.println(x); // 輸出 7
下面的例子,使用for
迴圈遍歷二維陣列中的元素:
示例
public class MyClass { public static void main(String[] args) { int[][] myNumbers = { {1, 2, 3, 4}, {5, 6, 7} }; for (int i = 0; i < myNumbers.length; ++i) { for(int j = 0; j < myNumbers[i].length; ++j) { System.out.println(myNumbers[i][j]); } } } }
Java 異常
執行Java程式碼時,可能會發生各種錯誤: 程式設計師寫程式碼時犯的錯誤、使用者非法輸入造成的錯誤,或其他不可預見的錯誤。
當發生錯誤時,Java通常會停止程式執行,並生成錯誤訊息。用技術方面的話說: Java將丟擲異常/exception(丟擲錯誤)。
Java try catch
try
語句可以對一個程式碼塊,在其執行時,進行錯誤檢測。
catch
語句定義了,當try塊中發生錯誤時,要執行的程式碼塊,。
try
與catch
關鍵字成對出現:
語法
try { // 要嘗試的程式碼塊 } catch(Exception e) { // 處理錯誤的程式碼塊 }
考慮下面例子
這將生成一個錯誤,因為myNumbers[10]
不存在。
public class MyClass { public static void main(String[ ] args) { int[] myNumbers = {1, 2, 3}; System.out.println(myNumbers[10]); // error! } }
輸出
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at MyClass.main(MyClass.java:4)
如果發生錯誤,可以用try…catch
捕捉錯誤,然後執行錯誤處理程式碼:
示例
public class MyClass { public static void main(String[ ] args) { try { int[] myNumbers = {1, 2, 3}; System.out.println(myNumbers[10]); } catch (Exception e) { System.out.println("出錯了"); } } }
輸出
出錯了
Finally
不管try
塊中有沒有報錯,在try...catch
之後,finally
語句中的程式碼塊將總是會執行:
示例
public class MyClass { public static void main(String[] args) { try { int[] myNumbers = {1, 2, 3}; System.out.println(myNumbers[10]); } catch (Exception e) { System.out.println("出錯了"); } finally { System.out.println("'try catch'結束了"); } } }
輸出將為:
出錯了
'try catch'結束了
throw 關鍵字
throw
語句讓你可以建立自定義錯誤。
throw
語句與異常型別一起使用。Java中有很多異常型別:ArithmeticException
,ClassNotFoundException
,ArrayIndexOutOfBoundsException
,SecurityException
, 等等.
異常型別通常與自定義方法一起使用。如果不理解下面的例子,不必擔心,下一章中會了解更多。
示例
如果年齡小於18歲,丟擲異常(列印“拒絕訪問”);如年齡在18歲或以上,列印“允許訪問”:
public class MyClass { static void checkAge(int age) { if (age < 18) { throw new ArithmeticException("拒絕訪問 - 低於18歲"); } else { System.out.println("允許訪問 - 年齡合格"); } } public static void main(String[] args) { checkAge(15); // 年齡設定為15 (低於18...) } }
輸出將為:
Exception in thread "main" java.lang.ArithmeticException: 拒絕訪問 - 低於18歲 at MyClass.checkAge(MyClass.java:4) at MyClass.main(MyClass.java:12)
如果你的年齡是20歲,你不會有例外:
示例
checkAge(20);
輸出將為:
允許訪問 - 年齡合格
Java 方法
方法是一段程式碼,只在呼叫時執行。
可以將資料(稱為引數)傳遞到方法中。
方法用於執行某些操作,方法也被稱為函式。
為什麼使用方法?重用程式碼: 定義程式碼一次,可以使用多次。
建立方法
方法必須在類中宣告。宣告時,方法名後面跟著括號()。Java提供了一些預定義的方法,比如System.out.println()
。
下面的例子定義自己的方法,執行某些操作:
示例
在MyClass中建立一個方法:
public class MyClass { static void myMethod() { // 要執行的程式碼 } }
myMethod()
是方法的名稱static
意味著方法屬於MyClass類,而不是MyClass類的物件。在本教程的後面,你將學習更多物件、物件方法等相關知識。void
表示該方法沒有返回值。在本章後面,你將學習更多關於返回值的知識
呼叫方法
要呼叫Java中的方法,寫下方法的名稱,後跟圓括號()
和分號;
在下面的例子中,呼叫myMethod()
方法列印文字:
示例
在main
內部,呼叫myMethod()
方法:
public class MyClass { static void myMethod() { System.out.println("我被執行了!"); } public static void main(String[] args) { myMethod(); } } // 輸出 "我被執行了!"
方法可以被呼叫多次:
示例
public class MyClass { static void myMethod() { System.out.println("我被執行了!"); } public static void main(String[] args) { myMethod(); myMethod(); myMethod(); } } // 我被執行了! // 我被執行了! // 我被執行了!
方法引數
資料可以作為引數傳遞給方法。在方法中引數充當變數。
引數在方法名後面的圓括號中指定。你可以新增任意數量的引數,只需用逗號分隔即可。
下面的示例中,myMethod
方法將一個名為fname
的字串作為引數。當方法被呼叫時,向方法傳遞一個名字,這個名字在方法中用於列印全名:
示例
public class MyClass { static void myMethod(String fname) { System.out.println("張" + fname); } public static void main(String[] args) { myMethod("三豐"); myMethod("翠山"); myMethod("無忌"); } } // 張三丰 // 張翠山 // 張無忌
返回值
上面例子中,使用的void
關鍵字,表示方法沒有返回值。如果想讓方法返回一個值,可以使用一個基本型別(如int
,char
等)來代替void
,並在方法中使用return
關鍵字:
示例
public class MyClass { static int myMethod(int x) { return 5 + x; } public static void main(String[] args) { System.out.println(myMethod(3)); } } // 輸出 8 (5 + 3)
下面這個例子,返回一個方法的兩個引數之和:
示例
public class MyClass { static int myMethod(int x, int y) { return x + y; } public static void main(String[] args) { System.out.println(myMethod(5, 3)); } } // 輸出 8 (5 + 3)
還可以將結果儲存在一個變數中(推薦):
示例
public class MyClass { static int myMethod(int x, int y) { return x + y; } public static void main(String[] args) { int z = myMethod(5, 3); // 結果儲存到一個變數 System.out.println(z); } } // Outputs 8 (5 + 3)
一個帶有If…Else的方法
方法中使用if...else
很平常:
示例
public class MyClass { // 建立checkAge()方法,方法有一個整型引數:age static void checkAge(int age) { // 如果年齡小於18歲,列印“拒絕訪問” if (age < 18) { System.out.println("拒絕訪問 - 年齡太小!"); // 如年齡大於18歲,列印“允許訪問” } else { System.out.println("允許訪問 - 年齡合格!"); } } public static void main(String[] args) { checkAge(20); // 呼叫checkAge方法,並向它傳遞年齡為20的值 } } // 輸出 "允許訪問 - 年齡合格!"
出錯了'try catch'結束了