前提
JDKをインストール、PATH通し済み
環境 windows
準備
- Javaファイルを作成し、ローカルの適当な場所に置く
※下記にあるソースをテキストファイルにコピペし、拡張子を.java
に変更すればOKです - コマンドプロンプト開き、ファイルを置いたディレクトに移動(cd)、
(もしくはファイルを置いたディレクトをエクスプローラーで開き、パス入力箇所でcmd
)
準備は完了です。
次に実行ですが、今回は2パターン試します。
実行
①ファイルをコンパイルし、クラス名を指定して実行
はじめにJavaファイルのコンパイル処理と実行を分けて行う方法です。
コマンドプロンプトでJavac ファイル名.java
を実行します。
これでコンパイル成功です。
エクスプローラーから確認するとjavaファイルで実装したクラス名(Sampleクラス)の名前のファイルが生成されているのが分かります。
ソースコードに問題がなければ正常に結果が出力されます。
このパターンではコンパイルされたClassファイルをjava
コマンドで実行しています。
②ファイル名で実行する(単一ファイルのみ可能)
※Java SE 11以降のみ
こちらではjavac
コマンドによるコンパイルを行わず、
そのままコマンドでjava ファイル名.java
を実行します
こちらもソースコードに問題がなければ正常に結果が出力されます。
このパターンでは、パターン①のようなClassファイルは生成せずに、
デバイスのメモリ上でコンパイルが行われそのまま実行されます。
上記の中でエラーがでた場合でもエラー文を注意深く読めば、ほぼほぼ解決できると思います。
よくあるのは
- エンコードエラー
- importがなく呼び出せないものがある ex.Listなど
基本はコンパイルした時点でエラーを出してくれます。英語が難しくても翻訳したり、そのまま検索すれば解決できるものが多いです!
今回利用したテストファイル
例)listの5文字以上の文字列の要素を数えるプログラム
import java.util.List;
class Sample{
public static void main(String[] args){
System.out.println("Hello world!");
List<String> strList = List.of("abcde", "あいうえ", "アイウエオ", "あい");
/*
リストから5文字以上の文字列の要素を数える
*/
int cntFive = 0;
// for
for (int i = 0; i < strList.size(); i++) {
if (strList.get(i).length() > 4) {
cntFive++;
}
}
System.out.println("5文字以上の要素の数:" + cntFive);
cntFive = 0; // 初期化
// 拡張for文
for (var str: strList) {
if (str.length() > 4) {
cntFive++;
}
}
System.out.println("5文字以上の要素の数:" + cntFive);
// stream利用
cntFive = (int) strList.stream().filter(s -> s.length() > 4).count();
System.out.println("5文字以上の要素の数:" + cntFive);
}
}
■補足
javacコマンド
Javaプログラムが書かれているソースファイル(.javaファイル)を読み込んで、クラスファイル(.classファイル)を生成するツールです。
ソースファイルからクラスファイルを生成することを、コンパイルするといいます。
つまり、javacコマンドはJavaプログラムのソースファイルをコンパイルするツールです。このようなツールのことを一般にコンパイラと呼びます。Java言語のCompiler(コンパイラ)なので、javacという名前が付いています。
Javaプログラムにはクラスが必須
Javaは「オブジェクト」に「振舞い(メソッド)」や「属性(メンバ変数)」を持たせて操作します。
そのオブジェクトのひな形または設計図となるのが「クラス」です。
クラスなしに処理(振舞)を書いても、どれについての振舞なの..?となってしまいます。
逆に「人間」というクラス(インスタンスすればオブジェクト)があれば、「歩く」「食べる」など振る舞いを定義することができます。
今回でいうとSampleClass
というクラスがあり、リストの中身を調査して数える
という振る舞いを実装しているイメージです。
参考:
単一ファイルのJavaプログラムを実行できるjava
コマンド
単一ファイルのソースコードプログラムの起動は、JDK 11リリースで導入された新機能の1つです。この機能により、javaインタープリタを使用してJavaソースコードファイルを直接実行できます。ソースコードはメモリ上でコンパイルされ、インタープリタによって実行されます。ディスク上に.classファイルは生成されません。
ただし、この機能は単一のソースファイルにあるコードに限定されます。同じ実行でコンパイルするソースファイルを追加することはできません。
この制限を回避するには、すべてのクラスを同じファイルで定義する必要がありますが、ファイル内のクラスの数に制限はありません。同じソースファイルにある限り、すべてパブリッククラスであるかどうかは関係ありません。
ソースファイルで宣言された最初のクラスが選択され、メインクラスとして使用されます。mainメソッドをその最初のクラス内に配置する必要があります。順序が重要です。
参考:
関連記事
作成次第載せます...zz
更新メモ
@shiracamus (しらかみゅ) さんにコメントでご指摘いただき修正いたしました。
・javacによるコンパイル無しでも実行できる
・コンパイル後はclass名で実行可能