|
|
Javaプログラム作成手順 |
H.Kamifuji . |
これからJavaのプログラムを作成する方法を学習していきますが、実際に正しい記述が出来たのかどうかはサンプルを作成して実際に動かしてみると分かりやすいです。よってここではJavaのプログラムの作成方法から実際に実行するまでの手順を解説していきます。 プログラムの内容はまた別のページで確認しますので、ここでは手順だけを見てください。 なお、Javaのプログラムをコンパイルしたり実行したりするにはJDKが必要となります。JDKのインストールは事前に行っておいて下さい。(JDKのインストールについては「Javaダウンロードとインストール(Windows版)」または、「Javaダウンロードとインストール(Linux版)」を参照して下さい)。 当ページでは、Linux CentOS7 の Gnome で動作テストしています。 現在(2021/08)では、JDK-16.0.2 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2021/11)では、JDK-17.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2023/04)では、JDK-20.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2024/10)では、JDK-23 にアップされています。一部、上位互換について、見直しを行っていきます。 |
プログラムを実際に作成する前に、これから作成するプログラムを保存するディレクトリを用意しておきます。好きなところに保存して頂いて構いません。今回はCドライブの中に「jsample」と言うディレクトリを作成しました。 ![]() 当ページでは、Linux CentOS7 の Gnome で動作テストしているので、~/ドキュメント に 「JSample」と言うディレクトリを作成しました。 ![]() このディレクトリの中に必要に応じてさらにディレクトリを作ってから作成したプログラムを保存します。 テキストエディタJavaのプログラムはテキスト形式で記述していきます。その為、プログラムを記述するにはテキストエディタと呼ばれるものを使用します。Windowsであればテキストエディタとしてメモ帳がインストールされています。[スタート] >> [すべてのプログラム] >> [アクセサリ] >> [メモ帳]でメモ帳を起動することが出来ます。 ![]() ただしメモ帳はあまり高機能なものではありません。そこで、フリーソフトやシェアウェアとして提供されているもう少し高機能なテキストエディタを使うと便利です。ここではいくつかのテキストエディタをご紹介しておきます。 ● EmEditor 有料版のProfessionalがあります。4,800 円/1年間 または、18,000 円/永久 高い!使いたくない小生は。 ● 秀まるエディタ シェアウェアのみ。 ● TeraPad フリーのみ。 ● GVim フリーのみ。UNIX 系と行き来する方は、vi の利用を推奨します。 既に使われているものがあればそれを使って下さい。また簡単なプログラムであればメモ帳でも十分ですので使いやすいものを使用して下さい。 |
ではテキストエディタを使ってJava言語を使ったプログラムを記述してみます。この段階ではプログラムの中身は気にしなくて構いません。 ではお使いのテキストエディタを起動して次のように入力して下さい。 class sample{ public static void main(String args[]){ System.out.println("こんにちは"); } }大文字と小文字も区別されますので注意して入力して下さい。また半角文字で書かれている文字は半角文字のまま入力する必要があります。実際に入力すると次のようになります。 ![]() 左側に行番号が表示されていますが、これは使っているテキストエディタが自動で表示しているものですので実際に入力するのは先ほど記述した部分だけです。 ファイルの保存では作成したプログラムを保存します。保存するファイル名は何でもいいわけではなく、今回は「sample.java」とする必要があります。class sample{ public static void main(String args[]){ System.out.println("こんにちは"); } }1行目の class の右側の部分がクラス名と呼ばれるものです。詳しくは後のページで解説しますので意味については気にしないで下さい。この時、保存するファイル名は次のようにする必要があります。 クラス名.javaファイル名は「クラス名」+「.」+「java」となります。クラス名が「sample」であればファイル名は「sample.java」となるわけです。では保存します。 ![]() 今回は保存用として用意した「c:\jsample\」ディレクトリの中にさらに「before」ディレクトリを作ってから保存しました。なお保存する時の文字コードはWindowsの場合であれば「Shift_JIS」で結構です。 Linux では、「utf-8」で保存して下さい。 |
プログラムを記述し保存したら次はコンパイルと呼ばれる作業によってクラスファイルを作成します。ここで簡単にコンパイルというものについて説明を行っておきます。 コンパイルとはよく使われているプログラム言語にPerl/Ruby/PHP/Python/JavaScriptなどがあります。これらは一般的にはスクリプト言語と呼ばれるものです。どのようなプログラム言語で作成されたプログラムも、いざ実行される時にはコンピュータが理解できる形式に変換されてから実行されます。PHPなどのスクリプト言語では、実行する時に自動的にプログラムが変換されて実行が行われます。 それに対してC言語やJavaなどでは、まず作成したプログラムを事前にコンピュータが理解できる形式に変換しておきます。そして実行する時には、事前に変換された実行ファイルを使って実行します。この事前に人間が書いたプログラムからコンピュータが理解できる形式に変換する作業をコンパイルといいます。 一見するとスクリプト言語の方が手間もかからず便利なように思えますが、スクリプト言語の場合は実行する時までプログラムが間違っている部分があるのかどうか分かりません。実行してみて初めてエラーの箇所が分かります。またスクリプト言語の場合は、実行する時に自動的にコンパイルが行われているだけでコンパイルがされていないわけではありません。それに対してJavaなどはコンパイルの時点でエラーがあった場合には分かります。またスクリプト言語では実行する時にコンパイルが行われますので実行するまでに時間がかかる場合があります。それに対してJavaなどはコンパイルが終わって実行形式になったファイルを使いますので無駄な時間はかかりません。 実際にはスクリプト言語にも色々あり、コンパイルがいつ行われるのかも様々です。またスクリプト言語で無い方が優秀なプログラム言語というわけでもありません。ここではコンパイルというものが人間が記述したソースコードからコンピュータが理解できる形式への変換作業であることと、Javaではコンパイルを事前に行っておく必要があることだけ覚えておいて下さい。 コンパイルの方法ではコンパイルを行います。コンパイルを行うには統合開発環境のEclipseなどを使う方法もありますが、ここではJDKに付属しているツールを使ってコンパイルを行います。まずコマンドプロンプトを起動します。[スタート] >> [すべてのプログラム] >> [アクセサリ] >> [コマンドプロンプト]でコマンドプロンプトを起動することが出来ます。 ![]() ※コマンドプロンプトの詳しい使い方については「コマンドプロンプトの使い方」を参照して下さい。 プログラムが保存されているディレクトリに移動します。 ![]() 以上の2つ操作は、Command Prompt Hereを利用すればエクスローラから簡単に所望のディレクトリで起動できます。 Linux の Gnome では、下記のように右クリックして、ポップアップメニューから端末を開きます。 ![]() コンパイルを行います。コンパイルを行うには次のように入力して下さい。 javac ファイル名「javac」の後に半角スペースを1文字あけてから保存したファイル名を入力します。今回の場合ならば「javac sample.java」です。 ![]() リターンキーを押すとコンパイルが行われます。コンパイルに無事成功した場合は次のように表示されます。 ![]() ではファイルを保存したディレクトリを見てください。 ![]() プログラムを保存した「sample.java」に加えて新しく「sample.class」と言う名前のファイルが作成されています。これがコンパイルによって作成されたコンピュータが理解できる形式の実行ファイルです。Javaではこれをクラスファイルと呼んでいます。これでプログラムを実行する準備が整いました。 なお作成されたファイルはコマンドプロンプト上でも「dir」と実行して頂くと確認できます。 ![]() Linux では、端末で下記のように実行します。 ![]() |
プログラムを保存し、コンパイルによってクラスファイルを作成したらプログラムを実行できる状態となります。ではプログラムを実行してみましょう。 コンパイルの場合と同じくコマンドプロンプトを起動します([スタート] >> [すべてのプログラム] >> [アクセサリ] >> [コマンドプロンプト]でコマンドプロンプトを起動することが出来ます)。そして実行ファイルが保存されているディレクトリに移動します。 ![]() Javaで記述されたプログラムを実行するには次のように入力して下さい。 java クラスファイル名「java」の後に半角スペースを1文字あけてからコンパイルによって作成されたクラスファイル名を入力します。この時実行ファイル名の拡張子の部分である「.class」は除いて入力して下さい。クラスファイル名が「sample.class」なら「sample」となります。今回の場合ならば「java sample」となります。 ![]() リターンキーを押すとプログラムの実行が行われます。 ![]() 今回のプログラムは標準出力へ「こんにちは」を出力するものでしたので、プログラムがエラーなく実行されて画面に「こんにちは」が表示されています。 Linux Gnome での実行状況は、下記の通りです。 [xxxxxxxx@dddddddddd JSample]$ java Sample こんにちは [xxxxxxxx@dddddddddd JSample]$ここまでがプログラムの作成から実行までの簡単な流れです。 |
プログラムを実行した時、思ったとおりに実行できればいいのですが、プログラムの記述ミスがあったりするとエラーが発生します。エラーが発生する可能性があるのはコンパイルをした時とプログラムを実行した時の2つがあります。ここではわざとエラーを発生させてみてどのように表示されるのか確認します。 コンパイルエラーコンパイルの時点でエラーとなった場合は、プログラムの中にJavaの文法に合っていない記述が含まれていることを表しています。例として次のようなプログラムを作成します。 class errtest{ public static void main(String args[]){ System.out.println(こんにちは"); } }3行目が本来「("こんにちは");」とすべきところ「(こんにちは");」と「こ」の前のダブルクオーテーションを記述し忘れたとします。このプログラムを「errtest.java」として保存しコンパイルしてみます。 ![]() このようにプログラムの中に文法上の間違いがある場合はコンパイル時にエラーとして表示されます。エラーの時にはどの部分が間違っているのかヒントとなる情報が表示されますので、エラーを修正して再度コンパイルして下さい。 なおコンパイルが成功しないと実行ファイルは作成されません。その為、全てのエラーが無くなるまでプログラムを実行することはできません。 Linux Gnome での実行状況は、下記の通りです。 [xxxxxxxx@dddddddddd JSample]$ vi errtest.java [xxxxxxxx@dddddddddd JSample]$ javac errtest.java errtest.java:3: エラー: 文字列リテラルが閉じられていません System.out.println(こんにちは"); ^ エラー1個 [xxxxxxxx@dddddddddd JSample]$ 実行時エラーコンパイルは問題無かったがプログラムの実行時にエラーとなる場合があります。このような実行時エラーはプログラムは文法的には間違っていないが使い方に問題がある場合に発生します。2つほど例をあげて確認してみます。まずプログラムを学習し始める時にによく発生するエラーがファイル名が間違っている場合です。 class errtest2{ public static void main(String args[]){ System.out.println("こんにちは"); } }上記のようなプログラムを記述し「errtest.java」として保存してみます。 「プログラムの記述と保存」でも記述した通り、プログラムのファイル名は「クラス名.java」である必要があります。今回の場合は「errtest2.java」としなければいけませんでしたが「errtest.java」としてしまいました。 ではまずコンパイルを行います。 ![]() コンパイルはエラーがなく無事終了しました。次に作成された実行ファイルを使ってプログラムを実行してみます。 ![]() いざプログラムを実行すると次のエラーが発生します。 Exception in thread "main" java.lang.NoClassDefFoundErrorこのエラーは必要としているクラスが見つからない場合に発生するエラーです。実行時に指定したクラス名が「errtest」なのにプログラムの中に「errtest」ではなく「errtest2」しか見つからなかったためエラーとなっています。この場合にはプログラムの中で記述したクラス名とファイル名が見比べてみて下さい(他の原因でこのエラーが発生する場合もあります)。 Linux Gnome での実行状況は、下記の通りです。 [xxxxxxxx@dddddddddd JSample]$ vi errtest1.java [xxxxxxxx@dddddddddd JSample]$ javac errtest1.java [xxxxxxxx@dddddddddd JSample]$ java errtest1 エラー: メイン・クラスerrtest1が見つからなかったかロードできませんでした [xxxxxxxx@dddddddddd JSample]$ もう一つ例をあげてみます。プログラム自身は少し難しくなりますので、ここでは参考程度に見ておいて下さい。 class errtest{ public static void main(String args[]){ String[] name = new String[2]; name[0] = "山田さん"; name[1] = "林さん"; for (int i = 0; i < 3; i++){ System.out.println(name[i]); } } }上記を「errtest.java」として保存します。まずコンパイルを行います。 ![]() コンパイルはエラーがなく無事終了しました。次に作成された実行ファイルを使ってプログラムを実行してみます。 ![]() 今回はプログラムが一部実行されています。「山田さん」「林さん」という文字列が表示されたあと、その次の処理でエラーが発生しプログラムが強制終了しています。このようにプログラムが実行はされたが、その途中でエラーのため終了してしまう場合もあります。 Linux Gnome での実行状況は、下記の通りです。 [xxxxxxxx@dddddddddd JSample]$ vi errtest3.java [xxxxxxxx@dddddddddd JSample]$ javac errtest3.java [xxxxxxxx@dddddddddd JSample]$ java errtest3 山田さん 林さん Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at errtest3.main(errtest3.java:8) [xxxxxxxx@dddddddddd JSample]$ここまで見てきたようにコンパイルの時点でエラーとなる場合とプログラムの実行の時点でエラーが発生する場合があります。どちらの場合であってもエラーメッセージには何らかの参考になる情報が表示されていますので、再度プログラムを見直して問題箇所を修正するようにして下さい。 |
|
|