対象:C言語経験者 / 目標:VSCodeでJavaを書いて動かせるようにします
| やること | 確認 |
|---|---|
| JDKのインストール | |
| VSCodeのインストール・拡張機能 | |
| 作業フォルダの準備 | |
| HelloWorld.java を書く | |
ターミナルを開く → javac → java で実行 | |
| 2本目(Calculation)を同じ手順で実行 | |
引数付きで実行(java Args Hello) |
Javaを動かすまでの手順はC言語と少し違います。理由から理解しておきましょう。
ソース(.c)実行ファイル(.exe)ソース(.java)バイトコード(.class)| 用語 | 意味 | C言語で言うと |
|---|---|---|
javac | コンパイラ。.javaを.classに変換 | gcc |
java | JVMで.classを実行 | 生成した.exeを実行 |
.class | バイトコード(中間コード) | .exeに相当(ただしOS専用ではない) |
| JVM | Java仮想マシン。.classを動かす | なし(Cには不要) |
| JDK | javac + java + 開発ツール一式 | gccに相当 |
環境構築(STEP 1〜3)が終わったあとは、毎回この4ステップで Java を実行します。
javac でjava でjavac と java コマンドで動かします。試験(問5・問6)でも java Q5 11.25 のようにコマンドラインで実行する形式が出題されるため、最初から本物の手順に慣れておきます。
ブラウザで https://adoptium.net/ を開く
「Latest LTS Release」からダウンロード
ダウンロードした .msi ファイルを実行
途中の「カスタム セットアップ」画面で以下を確認・変更:
| 項目 | 設定 |
|---|---|
| Add to PATH | ✅ 「ローカル ハード ドライブにインストール」 |
| Set JAVA_HOME variable | ✅ 「ローカル ハード ドライブにすべてインストール」 |
コマンドプロンプトを新規で開いて(インストール前に開いていたものは閉じる)実行:
java -version javac -version
https://code.visualstudio.com/ から「Download for Windows」
Extension Pack for Java と入力フォルダ名で番号管理します。こうするとエクスプローラーで順番に並ぶ。
java-lessons/
├── 00_HelloWorld/
│ └── HelloWorld.java
├── 01_Calculation/
│ └── Calculation.java
├── 02_xxx/
...
java-lessons フォルダを選択00_HelloWorld フォルダ名にカーソルを合わせるHelloWorld.java の中の public class は必ず HelloWorld
VSCodeが自動で内容を書いてくることがあります。全部消して以下だけを入力します。
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Ctrl+S で保存。エディタのタブ名の横に表示されていた ●(未保存マーク)が × に変わったら保存OK。
#include <stdio.h>
int main(void) {
printf("Hello, World!\n");
return 0;
}
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
| C言語 | Java | 違い |
|---|---|---|
#include | 不要(基本は自動) | よく使うものは最初から使える |
int main(void) | public static void main(String[] args) | クラスの中に書く。argsはコマンドライン引数 |
printf("...\n") | System.out.println("...") | printlnは自動で改行されます |
return 0; | 不要 | voidなので返り値なし |
作業フォルダ(00_HelloWorld)を右クリックして「統合ターミナルで開く」 を選ぶ。これでターミナルが「今いる場所=そのフォルダ」の状態で開けます。
00_HelloWorld フォルダ名を右クリックcd コマンドで作業フォルダに移動する必要があります。
Javaは「人間が書いたコード」をそのまま動かせない。一度バイトコードに変換してから実行する 2段階です。
STEP 5 で開いたターミナルで、次の2行を順番に入力します。
Hello, World! と表示されれば成功javac HelloWorld.java | java HelloWorld | |
|---|---|---|
| 役割 | ソースをバイトコードに変換 | バイトコードを JVM 上で実行 |
| 入力 | .java を付ける | 拡張子を付けない(クラス名のみ) |
| 出力 | HelloWorld.class が生成される | System.out.println の内容が表示される |
| 成功時の表示 | 無言(何も表示されない) | プログラムの出力 |
javac には .java を付ける、② java には .class も .java も付けない。これを覚えるだけでミスの大半は防げる。
左のエクスプローラーを見てみましょう。00_HelloWorld フォルダに何が増えているか?
HelloWorld.class が生成されているはず。
これがバイトコード(.classファイル)。javac が作った。java コマンドはこのファイルを JVM で実行している。
C言語でいう .exe に相当するが、OS専用ではなくどのOSのJVMでも動く。
同じ流れで Calculation も動かしてみましょう。
01_Calculation フォルダに Calculation.java を作成して、次のコードを書く。
public class Calculation {
public static void main(String[] args) {
int a = 10;
int b = 3;
System.out.println("足し算: " + (a + b));
System.out.println("引き算: " + (a - b));
System.out.println("掛け算: " + (a * b));
System.out.println("割り算: " + (a / b)); // 整数除算(小数切り捨て)
System.out.println("あまり: " + (a % b));
}
}
01_Calculation フォルダを右クリック →「統合ターミナルで開く」→ 次の2コマンドを実行。
a / b の結果はなぜ 3.333... ではなく 3 なのか?
int(整数型)同士の割り算は、小数点以下が切り捨てられます(整数除算)。
小数が必要な場合は double 型を使います。
double a = 10; double b = 3; System.out.println(a / b); // → 3.3333333333333335
これはC言語と同じルール。
試験の後半(問5・問6)では、プログラムに引数を渡して実行する問題が頻出します。java クラス名 の後ろにスペース区切りで値を書くと、プログラムの args 配列で受け取れる。
02_Args フォルダに Args.java を作成。
public class Args {
public static void main(String[] args) {
System.out.println("引数の数: " + args.length);
System.out.println("1番目の引数: " + args[0]);
}
}
java Q5 11.25 のように引数付きで実行する問題が出る。args[0] で受け取る」を覚えるだけでOK。引数の数値への変換(Integer.parseInt や Double.parseDouble)は後の単元で学びます。
| 書き方 | 結果 | 原因 |
|---|---|---|
javac HelloWorld.java |
OK | 正しい |
javac HelloWorld |
NG | .java の拡張子忘れ |
java HelloWorld |
OK | 正しい |
java HelloWorld.class |
NG | .class を付けてはいけない |
java helloworld |
NG | 大文字小文字が違う |
| 別フォルダで実行 | NG | .class が見つからない/cd で移動が必要 |
| エラー内容 | 原因 | 対処 |
|---|---|---|
'javac' は内部コマンドまたは外部コマンド...として認識されていません | JDKのPATH未設定 | PCを再起動、または JDK のインストール時に「Add to PATH」を有効にして再インストール |
class XXX is public, should be declared in a file named XXX.java | ファイル名とクラス名の不一致 | 両方を同じ名前(大文字小文字も)に統一 |
エラー: メイン・クラスXXXを検出およびロードできませんでした | javac せずにいきなり java を実行している/別フォルダから実行している | 先に javac。同じフォルダにいるか dir(または ls)で確認 |
package xxx does not exist のような表示 | VSCodeが自動で先頭に package ... 行を追加した | 1行目の package ...; を削除して保存し直す |
| コードを直したのにエラーが消えない | 保存忘れ/VSCodeの Language Server のキャッシュ不整合 | Ctrl+S で保存を確認。それでも直らない場合は Ctrl+Shift+P →「Java: Clean Java Language Server Workspace」を実行 |
pwd や dir で確認)
javac と java の説明として正しいものはどれか。
javac は .java ソースを .class(バイトコード)に変換するコンパイラ。java は JVM 上でその .class を実行するコマンド。C言語の gcc に相当するのが javac、生成した実行ファイルの実行に相当するのが java。
.class ファイルの説明として最も適切なものはどれか。
.class ファイルは javac によって生成されるバイトコード(中間コード)。OS 専用の実行ファイルではなく、どの OS の JVM でも実行可能。これが「Write Once, Run Anywhere」の仕組み。
Java のファイル名とクラス名の関係として正しいものはどれか。
HelloWorld.java の中の public クラスは必ず HelloWorld である必要があります。helloworld のような大文字小文字違いもエラー。これを守らないと class XXX is public, should be declared in a file named XXX.java のエラーが出ます。
Calculation のコードで int a = 10; int b = 3; として a / b を出力した結果として正しいものはどれか。
10 / 3.0)。
Args.java を java Args Hello として実行したとき、args[0] の中身として正しいものはどれか。
java クラス名 引数1 引数2 ... の形式で実行したとき、args[0] には最初の引数が文字列として入る。クラス名は args には含まれない(ここがC言語の argv[0] がプログラム名なのと異なる)。試験問5・問6ではこの仕様が頻出。
| 確認事項 | 確認 |
|---|---|
java -version と javac -version がコマンドラインで表示される | |
| VSCodeにExtension Pack for Javaが入っている | |
| フォルダを右クリックで「統合ターミナルで開く」ができる | |
javac HelloWorld.java → HelloWorld.class が生成された | |
java HelloWorld で「Hello, World!」が表示された | |
| Calculation も同じ手順で実行できた | |
java Args Hello で引数付き実行ができた |
この単元以降の実習も、すべて「ファイル作成 → 保存 → ターミナルで javac → java」の流れで進めます。