はじめてのJAVAアプリケーション

ここは、JAVAアプリケーションの基礎を学ぶページです。

はじめに

ようこそ、ここへ!!

ここは、はじめてJAVAアプリケーションを勉強しようとしている人のためのページです。

ここの管理人はです。よろしくお願い致します。

私は、Javaは苦手ですが、みなさんと一緒に学びたく本ページを開設しました。

本ページは、基本的なJavaの言語仕様を知っている人向けになっています。 しかし、知らなくても感じはつかめると思いますが。時間があれば、以下でJavaの雰囲気をつかんで、本ページへ戻ってきてください。

本ページは、はじめに『Javaとは』から始まって、『DOSやWINDOWSアプリケーション』、『Javaコーディング規約』まで、わかりやすく解説していく予定です。

では、参ります。

インデックス

コンテンツ

◆Javaとは

Javaとは、いわゆる一つのプログラム言語です。

そして、オブジェクト指向型です。また、一度書いたJavaプログラムは、どこでも動作することが出来ます(Write Once, Run Anywhere)。

オブジェクト指向型と云う事は、プログラムが部品化されていると云う事です。

どこでも動作すると云う事は、特定のOSに左右されず、いろいろなところで動作すると云う事です。

この2つの特性を備えているJavaでは、部品を寄せ集め、動作させたいところに、簡単にシステムを構築することが出来るわけです。

そう、今、サーバーサイドのシステムは、Javaの一人勝ち状態になりつつあるみたいです。

ですので、そんな人気のJavaを一緒に学んで参りましょう!

◆Javaの特長

Javaの特長は、以下の5つだと云われています。

オブジェクト指向
とりあえず、『オブジェクト指向 WITH JAVA』を参照してください。
Write Once, Run Anywhere
それは、どこのPCやPCもどきでもプログラムの変更なしに動作することが保証されたプログラム言語なのです。 つまり、Javaでプログラムを一度書くと、JavaVMがインストールされてるどこのプラットホームやOS上なら、どこでも動作することが保障されている言語なのです。 これは、C言語やPerlでもある程度までは、そうなのですが、結局実現されなかったものです。ですので、これだけでもJavaは、凄いわけです。
例外処理機能
通常のプログラム言語では、異常時に割り込みが発生して、システムがエラーを出します。 しかし、Javaでは、それを横取りすることが可能(不可能なケースもある)です。これを例外処理機能といいます。 また、エラー時など意識的に割り込み(例外)を発生させて、メイン処理からエラー処理を追放することが出来、 メイン処理をスッキリさせることが可能です。
ガベージコレクション
通常のプログラム言語では、システム資源を確保して使用後は、開放しなくてはなりません。 しかし、Javaでは、自動的に開放してくれるのです。これをガベージコレクションといいます。 つまり、後処理を考えず(記述せず)にプログラムが出来、メイン処理をスッキリさせることが可能です。
マルチスレッド処理機能
通常のプログラム言語のマルチ処理は、システムでマルチプロセスとして実現します。 しかし、Javaはシングルプロセスでマルチプロセスと同様なことが実現出来るのです。 これをマルチスレッド処理といます。 つまり、マルチ処理でもシングルプロセスなので、システム資源を食わないようにようなシステムが実現できるわけです。

◆はじめての『ファイルI/O』アプリケーション

普通の言語でのファイルアクセスは、ほぼ間違えなく、以下の手順です。

  1. ファイルを直接にオープン
  2. ファイルアクセス(リード・ライト)
  3. ファイルクローズ

しかし、オブジェクト指向のJavaだとちょっと雰囲気が異なります。 ファイルを直接にオープンするのではなく、ストリームというオブジェクトを生成すると自動的にオープンされるのです。 そして、ストリームオブジェクトのメソッドを使ってファイルのI/Oやクローズを行います。 また、他の言語と違って、I/Oエラー等の処理を例外として処理でき、本来のI/O処理に専念ができます。

ストリームオブジェクトは、大きく分けて4種類あり、それぞれ、以下の通りです。

  1. バイト入力ストリーム
  2. バイト出力ストリーム
  3. キャラクタ入力ストリーム
  4. キャラクタ出力ストリーム

以下に、1と2を使用したプログラムを作成してみました。

プログラム仕様
> Fcp source-file-name destination-file-name

まぁ、UNIXでのcpコマンドのようなものです。

解説は、ソースのコメントを参照してください。

-------------------------------------------------------------------------------
import java.io.*;            // ファイルI/Oでは、必修

class Fcp {
   public static void main( String args[]) {
     FileInputStream f_in;   //ファイルから読み込むバイトストリームの宣言
     FileOutputStream f_out; //ファイルに書き出すバイトストリームの宣言
     int b;                  //読み込んだバイトを格納するエリアの宣言

     if(args.length != 2){   //引数チェック
        System.err.println("Fcp source-file-name destination-file-name");
        System.exit(1);     //プログラム終了
     }

     try{
        f_in = new FileInputStream(args[0]);  //読み込みのバイトストリームオブジェクト作成
        f_out = new FileOutputStream(args[1]);//書き出しのバイトストリームオブジェクト作成
        try{
           while((b=f_in.read()) != -1) {     //1バイト単位で入力
                f_out.write((byte)b);         //1バイト単位で出力
           }
        } catch (IOException e) {             //入出力例外
          System.err.println("IO error");
        } finally {
          f_in.close();                       //入力バイトストリームのクローズ
          f_out.close();                      //出力バイトストリームのクローズ
        }
     } catch (FileNotFoundException e) {      //ファイル不在例外
       System.err.println("Opening error : Input File not found");
     } catch (IOException e) {                //入出力例外
       System.err.println("Openning/Closeing error");
     }
   }
}

◆はじめての『WINDOWS』アプリケーション

アプレットやサーブレットは、結構あるのですが、今回、はじめて、 WINDOWSでのメニュー付アプリケーションを作成してみました。 説明は、ソースのコメントを参照してください。

フレームは、ウインドウと読み替えた方が、わかりやすいかもです。 ソースは、カット&ペーストでそのまま動きます。しかし、コンパイルは必要です。

import java.awt.*;                       //awtとは、Abstract Window Toolkit の略です。
import java.awt.event.*;
                                         //フレームを継承しアクションリスナーを実装する
public class MyWin extends Frame implements ActionListener {

    public static void main(String args[]) {
        MyWin m = new MyWin();           //フレームオブジェクト作成(コンストラクタ起動)
        m.start();                       //フレーム(ウィンドウ)の作成スタート
    }
    public MyWin() {                     //コンストラクタ
        super("Hollo!!");                //タイトルバーのタイトル
        MenuBar mb = new MenuBar();      //メニューバーオブジェクト作成
        Menu fileMenu;                   //メニュークラス変数
        MenuItem quit;                   //プルダウンメニューの項目クラス変数
        fileMenu = new Menu("ファイル"); //メニュー名設定してメニューオブジェクト作成
        quit = new MenuItem("閉じる...");//項目設定してプルダウンメニューオブジェクト作成
        fileMenu.add(quit);              //項目設定をメニューオブジェクトへ登録
        mb.add(fileMenu);                //メニューオブジェクトをメニューバーオブジェクトへ登録
        setMenuBar(mb);                  //メニューバーオブジェクトをフレームオブジェクトへ登録
        quit.addActionListener(this);    //本オブジェクトをリスナー登録
        setLayout(new BorderLayout());   //フレームをボーダーレイアウトに設定
        Label message = new Label("Hello!! Geniuss");//ラベルオブジェクト作成
        add("North",message);            //ラベルオブジェクトをフレームオブジェクトへ登録

    }
    public void start() {
        setSize(100, 200);               //フレームのサイズを設定
        setVisible(true);                //フレームの表示
    }                                    //プルダウンメニューがクリックされると呼ばれる
    public void actionPerformed(ActionEvent evt) {
        if ("閉じる...".equals(evt.getActionCommand())) {
            System.exit(0);              //プログラム終了
        } 
    }
}
MyWinコンストラクタ処理の主な流れ
  1. メニュー項目オブジェクトをメニューオブジェクトに登録。
  2. メニューオブジェクトをメニューバーオブジェクトに登録。
  3. メニューバーオブジェクトをフレームオブジェクト(ウィンドウ)に登録。
リスナー登録とイベント処理の主な流れ

リスナー登録をすることにより、メニュー項目がクリックされたら、 actionPerformed()メソッドが呼ばれます。

そして、今回の場合、メニュー項目をイベントソースといいます。 イベントソースがクリックされイベントが発生すると、イベントオブジェクト(ActionEvent evt)が作成されます。

つぎに、イベントオブジェクトから、イベントリスナーへイベントが通知され、 イベントリスナーに予め自分(quit.addActionListener(this))を登録していたので、 イベントリスナーより、自分のイベント処理用メソッドactionPerformed()が起動されます。

上記は、少し難しく感じるかも知れませんが…、 昔、VC++でなく、単なるC言語で、はじめてウィンドウズアプリを 組んだときと比べて、数10倍、簡単になっている感じがします。

◆Javaコーディング規約

Javaでは、暗黙のコーディング規約あり、クラス名は大文字始まりとか、メソッドは小文字の動詞始まりとか決まっています。(文法的には決まっていない)

このような規約は、Javaのスローガン "Write Once, Run Anywhere" の精神にのっとり、是非、守っていきたいと思います。

どこぞの会社でcobolでのコーディング規則をJavaに適用して撃沈したという噂を聞きました。

Javaコーディング規約のリンクメモです。

◆Javaの歴史

ここで、Java の歴史をちょっとお話しします。

サンマイクロシステムズ社のジェームス ゴスリングという人が、オーク言語(UNIXのAWKとは別物)を開発し、同社のキム ポーレーゼという若い美人(本当にカワイイ)がオークからJavaに改名し、Javaブームの火付け役になりました。

1991年にゴスリングは一般消費者向けのテレビ、ビデオを制御するセットトップボックスの開発にあたって、「市場で広く支持される為には、特定のハードやアーキテクチャーに依存しない言語を作り出すことが必要」と思いオーク言語を開発します。

しかし、オーク言語は時期尚早で陽の目をみず、1994年にポーレーゼはアンドリーセンの影響によってインターネットでこそオーク言語の活躍の場だと確信し、名前もJavaに改名して、アンドリーセンなどの支援もあり、一挙にJavaブームになりました。

このように、Javaの歴史は、比較的新しく1990年代からですが、オブジェクト指向の歴史は、結構古く、 1960年代後半に、『Simula』というシミュレータのための言語が源流とされています。 1970〜80年代に、『Simula』に『Lisp』と『Logo』の要素を加え『Smalltalk』が誕生しました。 実は、『Smalltalk』で作ったOS(ダイナブック)をジョブスが真似してMacが出来、Macをゲイツが真似して、今のWINDOWSが出来たとされています。

そう、オブジェクト指向がなかったら、MSはなかった!?

◆サーバーサイドJava

サーバーサイドJavaといったら、サーブレットと思ったあなた、すでに時代遅れになっています。 今は、EJB、JBoss、Strutsになっているみたいです。 これらを説明する前に、まず、それまでの長い道のりをお話ししましょうね。

当初、クライアント/サーバという、クライアントからサーバへアクセスするシステム方式がありました。 これは、クライアントのPCでVB等で作成したプログラムからサーバーのDBへ直接アクセスする方式です。 これには、いろいろと問題があり、現在、無くなりつつあります。

つぎに、インターネットが発達し、社内では、イントラネットでクライアント(ブラウザ) からの要求によりHTTPプロトコルで、HTMLのファイルをクライアントへ転送し、クライア ント側は、そのHTMLファイルをWEBページとして見ることが出来るWEBシステム方式がありました。

しかし、そのWEBページは、固定の情報しか見ることが出来ませんでした。 そこで、動的な情報のWEBページを見ることができる機能をWEBサーバが持ち始めました。 これをCGIと云います。

CGIのプログラムは、perl等の言語で比較的簡素に実現することが出来ました。 しかし、業務では、ビジネスロジックの実装やDBアクセス等が、かなり重い処理で、 perl等のプロセス起動型とか、随時DBコネクト型では、無駄なオーバーヘッドが問題になり 始めました。

そこで、登場してきたのが、Javaサーブレットです。 Javaサーブレットは、要求があるたびにプロセスを起動するCGIのようなものではなく、 何回要求されてもプロセスは一つのスレッド起動型で、オーバーヘッドが少なくなりました。 また、EJB(エンタープライズ・ジャバ・ビーンズ)というコンポーネントが、 DBコネクト状態をプールし、随時DBコネクトをすことがなく、オーバーヘッドが少なくなりました。

このように、時代はいつの間にか、VBやCGIでなく、サーバーサイドJAVAが主流になってきているのです。

もう一度整理すると、以下のように進化してきました。

  1. クライアント/サーバと云うVB等による2層構造のシステム。
  2. クライアント/WEBサーバ/DBサーバと云うCGIによる3層構造のシステム。
  3. クライアント/WEBサーバ/APサーバ/DBサーバと云うJavaによる4層構造のシステム。

APサーバ(アプリケーションサーバ)といえば、今は、J2EE対応のサーバを指します。 たまにMSのサーバを指すこともあるようですが……。

J2EEは、Java2 Platform Enterprise Editionの略で、サン・マイクロシステムズの提唱による 企業情報システム向けのJavaプラットフォームの規格です。

J2EEは、いろいろなサブシステムから構成されていますが、メインは、JSP、サーブレット、EJBの3つです。 JSPは、J2EEシステムで作成された情報をHTMLの中に埋め込んでWebブラウザへ出力することです。 サーブレットは、ユーザーからの入力にこたえて処理を行うとか、簡単なセッション管理とかの制御を行います。 EJBは、複雑なセッション管理やDBアクセス等を用いてビジネスロジック実装の部品(ビーンズ)になります。

ちなみに、今流行りのJBossは、J2EEを備えたフリーのアプリケーションサーバの一種類です。 JBossは、もともとEJBoss(EJBオープン・ソース・ソフトウェア)と云い、 EJBの商標とまぎらわしいので、現在のJBossという名前に変更されたようです。

また、ちなみに、今流行りのStruts(ストラッツ)は、フリーのアプリケーション・フレームワークの一種で、JSP、サーブレット、EJBをラッピングして使いやすくし、誰でも同じようなシステムを構築できるようにしたものです。

キーワードをもう一度整理すると以下の感じです。

尚、本コンテンツは、以下のページを参考にさせて頂きました。

おわりに

どうでしたか、わかりましたか、Javaアプリケーションの感じはつかめましたか……。 あせらず、徐々に学んで参ましょう。

とりあえず、本サイトには、以下のJava関連のページをご用意しています。よろしければ、どうぞ!