1. 程式人生 > 實用技巧 >Java從入門到實戰之(1)java基礎

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

在下面的例子中,數字10050是運算元,+是運算子:

示例

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

在下面的例子中,數字10050是運算元,+是運算子:

示例

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);

注意,在firstNamelastName之間,我們添加了一個空格。

還可以使用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資料型別,可以取值:truefalse

布林值

布林型別是用boolean關鍵字宣告的,只能取值:truefalse

示例

boolean isJavaFun = true;
boolean isFishTasty = false;
System.out.println(isJavaFun);     // 輸出 true
System.out.println(isFishTasty);   // 輸出 false

布林表示式

布林表示式是返回布林值truefalse的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的值進行比較。
  • 如果匹配,則執行相關聯的程式碼塊。
  • breakdefault關鍵字是可選的,本章稍後將對此進行描述

下面的例子,使用周工作日編號來計算周工作日名稱:

示例

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循序中使用breakcontinue:

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塊中發生錯誤時,要執行的程式碼塊,。

trycatch關鍵字成對出現:

語法

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'結束了