跳转至

Java 速成

關於 Java

Java 是一種廣泛使用的計算機編程語言,擁有 跨平台面向對象泛型編程 的特性,廣泛應用於企業級 Web 應用開發和移動應用開發。

環境安裝

參見 JDK

基本語法

主函數

Java 類似 C/C++ 語言,需要一個函數(在面向對象中,這被稱為方法)作為程序執行的入口點。

Java 的主函數的格式是固定的,形如:

1
2
3
4
5
class Test {
    public static void main(String[] args) {
        // 程序的代碼
    }
}

一個打包的 Java 程序(名稱一般是 *.jar)中可以有很多個類似的函數,但是當運行這個程序的時候,只有其中一個函數會被運行,這是定義在 JarManifest 文件中的,在 OI 比賽中一般用不到關於它的知識。

註釋

和 C/C++ 一樣,Java 使用 ///* */ 分別註釋單行和多行。

基本數據類型

類型名 意義
boolean 布爾類型
byte 字節類型
char 字符型
double 雙精度浮點
float 單精度浮點
int 整型
long 長整型
short 短整型
null

聲明變量

1
2
3
4
int a = 12; // 設置 a 為整數類型,並給 a 賦值為 12
String str = "Hello, OI-wiki"; // 聲明字符串變量 str
char ch = 'W';
double PI = 3.1415926;

final 關鍵字

final 含義是這是最終的、不可更改的結果,被 final 修飾的變量只能被賦值一次,賦值後不再改變。

1
final double PI = 3.1415926;

數組

1
2
3
// 有十個元素的整數類型數組
// 其語法格式為 數據類型[] 變量名 = new 數據類型[數組大小]
int[] ary = new int[10];

字符串

  • 字符串是 Java 一個內置的類。
1
2
3
4
5
6
// 最為簡單的構造一個字符串變量的方法如下
String a = "Hello";

// 還可以使用字符數組構造一個字符串變量
char[] stringArray = { 'H', 'e', 'l', 'l', 'o' };
String s = new String(stringArray);

包和導入包

Java 中的類(Class)都被放在一個個包(package)裏面。在一個包裏面不允許有同名的類。在類的第一行通常要説明這個類是屬於哪個包的。例如:

1
package org.oi-wiki.tutorial;

包的命名規範一般是:項目所有者的頂級域.項目所有者的二級域.項目名稱

通過 import 關鍵字來導入不在本類所屬的包下面的類。例如下面要用到的 Scanner

1
import java.util.Scanner;

如果想要導入某包下面所有的類,只需要把這個語句最後的分號前的類名換成 *

輸入

可以通過 Scanner 類來處理命令行輸入。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
package org.oiwiki.tutorial;

import java.util.Scanner;

class Test {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in); // System.in 是輸入流
        int a = scan.nextInt();
        double b = scan.nextDouble();
        String c = scan.nextLine();
    }
}

輸出

可以對變量進行格式化輸出。

符號 意義
%f 浮點類型
%s 字符串類型
%d 整數類型
%c 字符類型
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class Test {
    public static void main(String[] args) {
        int a = 12;
        char b = 'A';
        double s = 3.14;
        String str = "Hello world";
        System.out.printf("%f\n", s);
        System.out.printf("%d\n", a);
        System.out.printf("%c\n", b);
        System.out.printf("%s\n", str);
    }
}

控制語句

Java 的流程控制語句與 C++ 是基本相同的。

選擇

  • if
1
2
3
4
5
6
7
class Test {
    public static void main(String[] args) {
        if ( /* 判斷條件 */ ){
            // 條件成立時執行這裏面的代碼
        }
    }
}
  • if...else
1
2
3
4
5
6
7
8
9
class Test {
    public static void main(String[] args) {
        if ( /* 判斷條件 */ ) {
            // 條件成立時執行這裏面的代碼
        } else {
            // 條件不成立時執行這裏面的代碼
        }
    }
}
  • if...else if...else
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class Test {
    public static void main(String[] args) {
        if ( /* 判斷條件 */ ) {
            //判斷條件成立執行這裏面的代碼
        } else if ( /* 判斷條件2 */ ) {
            // 判斷條件2成立執行這裏面的代碼
        } else {
          // 上述條件都不成立執行這裏面的代碼
        }
    }
}
  • switch...case
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
class Test {
    public static void main(String[] args) {
        switch ( /* 表達式 */ ){
          case /* 值 1 */:
              // 當表達式取得的值符合值 1 執行此段代碼
              break; // 如果不加上 break 語句,會讓程序按順序往下執行直到 break
          case /* 值 2 */:
              // 當表達式取得的值符合值 2 執行此段代碼
              break;
          default:
              // 當表達式不符合上面列舉的值的時候執行這裏面的代碼
        }
    }
}

循環

  • for

for 關鍵字有兩種使用方法,其中第一種是普通的 for 循環,形式如下:

1
2
3
4
5
6
7
class Test {
    public static void main(String[] args) {
        for ( /* 初始化 */; /* 循環的判斷條件 */; /* 每次循環後執行的步驟 */ ) {
            // 當循環的條件成立執行循環體內代碼
        }
    }
}

第二種是類似 C++ 的 foreach 使用方法,用於循環數組或者集合中的數據,相當於把上一種方式中的循環變量隱藏起來了,形式如下:

1
2
3
4
5
6
7
class Test {
    public static void main(String[] args) {
        for ( /* 元素類型X */ /* 元素名Y */ : /* 集合Z */ ) {
            // 這個語句塊的每一次循環時,元素Y分別是集合Z中的一個元素。
        }
    }
}
  • while
1
2
3
4
5
6
7
class Test {
    public static void main(String[] args) {
        while ( /* 判定條件 */ ) {
            // 條件成立時執行循環體內代碼
        }
    }
}
  • do...while
1
2
3
4
5
6
7
class Test {
    public static void main(String[] args) {
        do {
          // 需要執行的代碼
        } while ( /* 循環判斷條件 */ );
    }
}

注意事項

類名與文件名一致

創建 Java 源程序需要類名和文件名一致才能編譯通過,否則編譯器會提示找不到類。通常該文件名會在具體 OJ 中指定。

例:

Add.java

1
2
3
4
5
class Add {
    public static void main(String[] args) {
        // ...
    }
}

在該文件中需使用 Add 為類名方可編譯通過。