Javaの開発に使用するIDE(統合開発環境)は Visual Studio Code を使用します。

まだVisula Studio Codeの準備ができていない方は以下のページを参考にダウンロードしてください。

Visual Studio Codeの準備

または、Java開発に必要な拡張機能やツールがセットになったJava用のVisual Studio Codeを以下からダウンロードすることができます。

Java in Visual Studio Code

Javaの開発に便利な拡張機能(Extensions)をVisual Studio Codeにインストールします。

Java用のVisual Studio Codeをダウンロードされた方は既にインストール済みかもしれません。

Java Extension Pack

JavaExtensionPack Install

この Java Extension Pack(Java拡張パック )には、Javaの開発に便利な以下の拡張機能が含まれています。

Language Support for Java(TM) by Red Hat

Language Support for Java(TM) by Red Hat(Red HatによるJava言語サポート)には、Javaコードのハイライト(色付)、MavenやGradleなどのプロジェクトサポートが含まれています。

  • Visual Studio CodeはJava11以降のメジャーバージョンで動作します。

Debugger for Java

Debugger for Java(Java用のデバッガー)は、Visual Studio CodeでJavaをデバッグするための拡張機能です。

Java Test Runner

Java Test Runner(Javaテストランナー)を使えば、Javaのテストケースを実行およびデバッグすることができます。JUnit4、5、TestNGなどのテストフレームワークをサポートします。

Maven for Java

Maven は Javaのプロジェクト管理ツールです。pom.xmlファイルに外部で管理されている機能(JARライブラリ)とバージョンを記述すれば簡単にダウンロードして使用できます。 Maven for Javaは、Mavenを使用しやすくするための拡張機能です。

Project Manager for Java

Project Manager for Java(Java用プロジェクトマネージャー)は、Javaプロジェクトのエクスプローラ機能(左側のパネル)を追加します。

Visual Studio IntelliCode

Visual Studio IntelliCode は、TypeScript / JavaScript や Python、Javaのコード補完機能です。

Javaファイルを作成して実行

拡張機能のインストールが終わったら、Visual Studio Codeのコマンドパレットを開いて「Java: Getting Started」を入力し選択します。

コマンドパレットの開き方

【Win】Ctrl + Shift + P または F1
【Mac】⌘ + Shift + P または F1

Configure Java Runtimeタブが開いている場合

Configure Java Runtime

このタブが上部に表示されている場合、Visual Studio Code に JDK(Java開発キット)のインストール先のパスを設定できていません

そのため、設定ファイルにJDKがインストールされているパスを設定する必要があります

青文字の「User Setting」をクリックしてください。

Java Home User Settings

Edit in settings.json をクリックして設定ファイルを編集します。

設定する箇所は2箇所です。

  • java.configuration.runtimes
    この設定を行うことでプロジェクトを別の JDK でコンパイルできるようになります。
  • java.home
    (必須)ここに有効なJDK11のパスを設定します。
設定例
{
    "window.zoomLevel": 1,
    "editor.minimap.enabled": false,
    "git.autofetch": true,
    "java.configuration.runtimes": [
        {
            "name": "JavaSE-11",
            "path": "/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home",
            "default": true
        }
    ],
    "java.semanticHighlighting.enabled": true,
    "java.home": "/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home"
}
                
  • このパスには binフォルダ を含む親フォルダのパスを指定しなければなりません。

パスを設定したら保存して、再起動してください。

JDK Requirements · redhat-developer/vscode-java Wiki

JDKのパスが分からない場合

JDKのパスが分からない場合は、環境変数を確認してみましょう。

Macの場合はターミナルで実行
$ env | grep JAVA
JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
                
Windowsの場合はコマンドプロンプトで実行
>set | findstr JAVA
JAVA_HOME=C:¥Program Files¥Java¥jdk-11.0.8+10¥bin
                

上記の例は環境変数 JAVA_HOME に JDK のパスを設定している場合の例です。

JAVA_HOMEに設定していない場合は 上記コマンドの JAVA_HOMEPATH に置き換えて確認してみてください。

チュートリアルを試してみよう

コマンドパレットから「Java: Getting Started」を実行すると、Javaを作成して実行するまでのチュートリアルが表示されます。

このチュートリアルに沿って、Javaを作成し実行するまでを試してみましょう。

フォルダを開く

Java Getting Started 001

Javaのプロジェクト用のフォルダを開きます。

フォルダが無い場合は新しく作成した後、同様の手順で開くことができます。

ファイルを作成する

Java Getting Started 002

ファイル QuickStart.java を作成します。

Javaを実行するためには class を定義する必要があります。

ファイルの中で (classの)”c” と入力すると、拡張機能により補完候補が選択できるようになりますので、2番目の □class を選択してください。

すると以下のように出力されると思います。

  • ファイル名は Java ファイル内で定義する class 名と同じで、先頭が大文字のスネークケースになります。
  • Javaファイルの拡張子は .java です。

/**
 * QuickStart
 */
public class QuickStart {
    
}
                
  • コード補完を使えばコードの入力が早くなり、また入力ミスが起きにくくなります。
Java Getting Started 003

この中で更に(mainの) “m” と入力すると、補完候補が選択できるので、1番目の □main を選択してください。

ここで定義するメソッド public static void main(String[] args) {} は Java の実行時に最初に呼び出されます。Javaを開発するときに必ず一つだけ必要になり、入力ミスがあったりメソッドが無い場合はエラーとなり実行されません。

現在、以下のような状態です。


/**
 * QuickStart
 */
public class QuickStart {
    public static void main(String[] args) {
        
    }
}
                
  • public static void main(String[] args) {}はJava実行時に最初に呼び出される必須となるメソッドです。
Java Getting Started 004

この中で (System.out.printlnの)”sys” と入力し、2番目の□sysout を選択します。

以下のように、出力された丸括弧の中に "Hello World"と入力してください。


/**
 * QuickStart
 */
public class QuickStart {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
                

System.out.println("Hello World"); はJavaScriptの console.log("Hello World"); と同じ様な機能です。

Javaでは コンソールではなくターミナルに Hello World が出力されます。

Visual Studio CodeでJavaを実行する

作成した QuickStartクラスの main メソッドを実行してみましょう。

実行には、普通の実行(Run)デバッグ実行(Debug)があります。

デバッグ実行は、ブレイクポイント(Breakpoint)を調査したい行番号の横に配置することで、その時の変数の値やシステムの状態を確認することができる実行方法です。

実行のショートカットキー

Run: Ctrl + d
Debug: F5

どちらかを実行して、Visual Studio Codeの下部に表示されるターミナル(TERMINAL)Hello World と出力されたら成功です。

  • 開発時はデバッグ実行を多用します。

デバッグ実行で変数の中身を確認する

Java Getting Started 005

QuickStart.java ファイルを以下のように修正してデバッグ実行を試してみましょう

デバッグ実行で変数の中身が確認できることを試してみます。

以下のコードは、変数 test"Hello World" を代入してターミナルに変数testの中身を出力しています。(変数はこれからの基礎で学習します)


/**
 * QuickStart
 */
public class QuickStart {
    public static void main(String[] args) {
        String test = "Hello World";
        System.out.println(test);
    }
}
                

Visual Studio Code の行番号 7 の左横にマウスのカーソルを合わせることで ブレイクポイントを配置することができます。

カーソルが  に変更する箇所でクリックすると赤い丸が行番号の横に配置されます。この赤い丸がブレイクポイントとなります。

ブレイクポイントが配置できたらデバッグ実行(F5)してみましょう。

Visual Studio Code 左側の 再生と昆虫(バグ)のマークを押すと、ブレイクポイントで止まっている時点で変数の中身がどうなっているかを確認することができます。

次のブレイクポイントに進めるには更に F5 キーを押します。(一つしかブレイクポイントがなければ最後まで実行し、終了します)

Javaの実行時に何が起こっているか

簡単に説明すると以下のとおりです。

Java を実行すると、
まず .java ファイルが コンパイルされ、
Javaバイトコード.class ファイルが生成されます。
この間にエラーがあればコンパイルエラーが発生します。
.class ファイルを JVM(Java仮想マシン)で実行し、
もし実行時にエラーがあれば 実行時エラー が発生します。
なければ、プログラム通りの処理を実行します。

そもそもコンピュータは0と1しか読めない

Computer understand only Binary(コンピュータは2進数しか理解できない)

コンピュータは、人間が書いたコードをそのまま実行できるわけではありません。

コンピュータは 0 と 1 しか読めないのです。

JavaScript も Java も、Python も Ruby も PHP も Go も実行される時には この 0 と 1 の 機械語(ネイティブコード)に変換されています。

言語ごとに異なるのは、いつどのタイミングで 変換 しているかです。

  • コンピュータは電気信号のON/OFF(1/0)しか読めません。
  • 1と0だけで表現する数を 2進数 と言い バイナリ(binary) と言われたりします。

インタプリタ型言語とコンパイラ型言語

インタプリタ型言語

プログラムの実行時に1行ずつ機械語に変換していく言語をインタプリタ型言語といいます。

実行時に変換処理が加わるので実行速度は遅くなりますが、開発時にコンパイル処理が不要なのでコンパイラ型言語よりも開発しやすいと思う方も多いです。

  • PHP、Ruby、Python、はインタプリタ型言語です。

コンパイラ型言語

プログラム実行時には、すでに機械語に変換(コンパイル)済みのファイルを実行します。

このように、実行前にコンパイルを済ましている言語のことをコンパイラ型言語といいます。

実行時に機械語に変換する必要がないため実行速度は早くなります。
開発時にもコンパイル処理が必要なので、この時間(マシンの性能やコード量により数秒から数分)が億劫に感じる方も多いですが、コンパイル時に文法ミスやエラーを精査してくれるため、インタプリタ言語と比べてミスが少なくなります。

  • Java、C、C++、Go、はコンパイラ型言語です。

Javaはコンパイラ型言語

Compile Java(Javaのコンパイル)

Javaはコンパイラ型言語なので、プログラムを実行するためには事前に コンパイル が必要です。

Javaは、JVM(Java Virtual Machine: Java仮想マシン)があればどのデバイスでも実行できるという大きな特徴があります。これは、このJVMが複数あるOSの差を吸収してくれているためです。

つまり、このJVMで実行できるコードにコンパイルすれば、どのデバイスでも実行可能ということになります。

Javaは当然、このJVMが実行可能な Javaバイトコード(中間コード) にコンパイルします。

コンパイル後には新しく拡張子が .class というファイルが生成され、JVMはこの .class ファイルを実行します。

  • Javaは Javaバイトコード(中間コード)にコンパイルします。
  • Javaバイトコード JVM(Java仮想マシン) で実行することができます。

エラーの種類

コンパイルエラー

構文の誤りなどでコンパイルの時に出力されるエラーを コンパイルエラー と言います。
実行前にエラーとなっている箇所を教えてくれるので、ここはコンパイル型言語の強みになります。

実行時エラー

実行時に 出力されるエラーを 実行時エラー と言います。

例えば、計算した結果が大きすぎて変数に格納できない場合や、何もない(Null)を参照しようとすると 実行エラー になります。Javaでは実行時エラーがあると Exception(エクセプション: 例外)が発生します。

この例外を処理することで、実行時エラーが起きた場合の処理をプログラムすることができます。

課題

Visual Studio Codeに拡張機能をインストールしましょう。

チュートリアルを試して実行してみましょう。

ブレイクポイントを配置してデバッグ実行を試してみましょう。
どのように実行されのるかを確認してください。

.java ファイルを コンパイル すると どんなファイルが生成されますか?

  • 拡張子は?
  • 内容は?

コンピュータが読める文字とはなんですか?

2文字を答えてください。

エラーについて教えてください。

  • コンパイルエラーはどんな時に発生するエラーですか?
  • 実行時エラーとはどんな時に発生するエラーですか?

コンパイラ型言語とインタプリタ型言語の違いを教えてください。