1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java基礎】ローカルでJavaファイルを動かす

Last updated at Posted at 2024-03-09

前提

JDKをインストール、PATH通し済み
環境 windows

準備

  1. Javaファイルを作成し、ローカルの適当な場所に置く
    ※下記にあるソースをテキストファイルにコピペし、拡張子を.javaに変更すればOKです
  2. コマンドプロンプト開き、ファイルを置いたディレクトに移動(cd)、
    (もしくはファイルを置いたディレクトをエクスプローラーで開き、パス入力箇所でcmd
cmd.png cmd開く.png

準備は完了です。
次に実行ですが、今回は2パターン試します。

実行

①ファイルをコンパイルし、クラス名を指定して実行

はじめにJavaファイルのコンパイル処理と実行を分けて行う方法です。

コマンドプロンプトでJavac ファイル名.javaを実行します。

javac実行.png

これでコンパイル成功です。
エクスプローラーから確認するとjavaファイルで実装したクラス名(Sampleクラス)の名前のファイルが生成されているのが分かります。

コンパイルされたファイルが生成.png

次にjava クラス名をコマンドで実行します。
Class名で実行した結果.png

ソースコードに問題がなければ正常に結果が出力されます。
このパターンではコンパイルされたClassファイルをjavaコマンドで実行しています。

②ファイル名で実行する(単一ファイルのみ可能)

※Java SE 11以降のみ

こちらではjavacコマンドによるコンパイルを行わず、
そのままコマンドでjava ファイル名.javaを実行します

java実行後.png

こちらもソースコードに問題がなければ正常に結果が出力されます。

このパターンでは、パターン①のようなClassファイルは生成せずに、
デバイスのメモリ上でコンパイルが行われそのまま実行されます。
 
 
上記の中でエラーがでた場合でもエラー文を注意深く読めば、ほぼほぼ解決できると思います。
よくあるのは

  • エンコードエラー
  • importがなく呼び出せないものがある ex.Listなど

基本はコンパイルした時点でエラーを出してくれます。英語が難しくても翻訳したり、そのまま検索すれば解決できるものが多いです!


今回利用したテストファイル

例)listの5文字以上の文字列の要素を数えるプログラム

list_test.java
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名で実行可能

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?