他のページを開けます。

JAVA #1技術の基礎メモ 

<since 2001/12/12>
ページ内の選択表です。

<目次>  

1. Java言語の特徴は何ですか?(2003/10)  2.Javaの実行方法 3.コメント文
4.プログラムの作成手順(2002/3/22) 5.クラス名とファイル名の関連(2003/10)
6.複数のクラス定義と .class ファイルの関係 7.Java言語で扱う型
8.アプレットの作成手順(2002/3/30)
9.Javaアプリケーション(2002/4/4) 10.基本データ型の型変換(2002/7/7)

11.文字列 12.配列 13.右シフト演算子
14.System.out.println(”Hellow Java World!”);
15.final指定による定数定義
16.メソッドのオーバーロード 17.コンストラクタ 18.static変数
19.staticメソッド 20.staticイニシャライザー

21.変数とメソッドのアクセス制御(2002/8/15) 22.継承 23.サブクラスの定義
24.スーパークラスのメソッドのオーバーライド 25.オーバーライドを制限するには
26.変数の適用範囲(2002/8/16) 27.クラスの修飾子 28.キーワード this
29.キーワード super 30.abstractメソッド

31.インターフェース 32.パッケージ(2002/8/19) 33.JDKが提供する代表的なコアパッケージ
34.予約語(2002/9/7) 35.用語解説
36.アプレット:イメージデータの表示 37.Appletクラス(2002/9/8)
38.Javaアプレットの特徴および制限(2002/10/2)
39.WebブラウザのAppletに対する動作 40.データ型の基本(プリミティブ型と参照型)

41.実行の繰り返しを中断するには 42.3項演算子(条件分岐のための演算子)とは?
43.Javaプログラムの基本構成
44.CIW Sun Certified Programmer for Java 2試験学習カリキュラム(2002/11/3)
45.CIW オブジェクト指向分析とデザイン学習カリキュラム
46.画面への標準出力 47.アプレットにパラメータを渡すには(2002/11/4)
48.Mathクラス 49.instanceof演算子 50.グラフィックス表示手法(ダブルバッファリング)

51.標準入出力(2002/11/5) 52.FILEクラス 53.基本データ型 ラップクラス
54.GUIのクラスの種類 55.AWTパッケージ
56.Swingパッケージ 57.スレッドの処理 58.スレッドの状態変化
59.内部クラス(inner class) 60.GUIコンポーネントを使うプログラムの実行終了手順

61.JButtonにアイコンイメージの表示 62.サーブレット(2003/1/9)
63.JSP(JavaServer Pages) 64.JavaBeans 65.JSP、サーブレット、JavaBeans比較
66.Frame クラスについて 67.メニューの作成 68.Java.lang.Objectクラス(2003/1/27)
69.javax.* 70.JSPの動作原理(2003/1/28)

71.JSP 学習支援サイト紹介 72.クラスパス(2003/3/4)
73.Java VMがクラスファイルを検索する仕組み
74.クラス修飾子とファイル名の関係(2003/3/15) 75.abstractクラス
76.クラスからサブクラスを派生させたくない場合は? 77.内部クラス(2003/3/16)
78.フィールド宣言 79.クラス変数とインスタンス変数と局所変数
80.javacコンパイラ・オプション(-deprecation )

81.時計、挨拶、在庫管理 簡易なプログラム サンプル(2003/3/18) 82.メソッド宣言
83.バブルソート サンプル(2003/3/19) 84.this,super 使用例 85.TEXT FILE Input sample
86.JTextAreaクラスの作成とファイル入出力 サンプル・ソース
87.フィボナッチ数列プログラム・ソース
88.推奨されていないAPIのケースについて(03/04/01) 89.パスワード入力の例
90.Choiceクラスと選択操作例(03/04/02)

91.コンパイル エラー例(変数名をミス x->X) 92.ダブルバッファー
93.ファイル操作クラスMAP(03/04/06)
94.マウスイベントの処理でのコンパイルエラー例
95.ちょっとしたサンプルコードをDOSプロンプトから作りたい(03/04/10)
96.J2EEスキルを習得するための前提条件
97.Javaアプレットはどのように実行されますか?(030619)
98.javadoc - Java API ドキュメンテーションジェネレータとは?
99.オブジェクト指向の特徴は?(030621)
100.the API specification for the Java 2 Platform, Standard Edition, version 1.3.1.

101.メインメソッド(030622) 102.Java Code Conventions(030623) 103.Vectorクラス
104.Gregoriancalendarクラス 105. -verbose 指定したJAVAコンパイル例
106.javapコマンド クラスファイルから情報を取得 107.
108. 109.What is a Server-Side Include(SSI)?
110.

111.Javaの例外処理(030624) 112.Java のバージョンを知りたいのですが?
113.How does the API support all these kinds of programs? 114.Javaの歴史
115.オブジェクトのメンバーへのアクセス(030630)
116.メソッド宣言の記述方法 117.ソケット通信(030911) 118.JavaFAQ サイト紹介(030916)
119.オブジェクト指向プログラミング 120.


1. Java言語の特徴は何ですか?

(1) コンピュータに依存しない。プラットフォーム非依存。
java_platform_concept
  ★Javaは、プログラム開発環境と実行環境の両方を提供しており、
   プラットフォームに依存しないシステムとしている。
   ・プログラム開発環境:JavaAPI(パッケージ)
   ・実行環境:Java仮想マシン(Java Virtual Machine)
  ★複数のプラットフォームをサポート   
   ・Javaで作成したプログラムは、UNIX,Mac,WindowsXなど
    さまざまな環境の上で実行できます。
   ・作成したプログラムコードは、アーキテクチャーに依存しない。
  ★Javaの理念:WORA(Write Once,Run Anywhere)

(2) オブジェクト指向のプログラミング言語   Javaの最大の特徴は本格的なオブジェクト指向言語であること。   つまり、Javaを用いることにより、オブジェクト指向技術の利点を享受できる。   オブジェクト指向では、プログラムを構成する部品をクラスという形で記述する。   プログラム部品がクラスとして独立することで、プログラムの拡張性、再利用性が高い。 (3) 分散型   ・ローカルおよびネットワーク経由で実行可能なプログラムが作成できる。   ・ネットワーク用のライブラリを用意している。 (4)文法がシンプル。言語仕様が簡潔。   JavaはC++から、構造体、共用体、多次元配列、ポインタ、   プリプロセッサなどを除き簡略化している (5)強靭(robust)   ・Javaは、プログラムが正しく動作するように何段階ものチェックを行うので、    問題が起こりにくい。   ・コンパイル時および実行時にきびしいエラーチェックがおこなわれる。 (6)豊富なパッケージ ライブラリー  GUI機能、ネットワーク機能など、プログラム開発に有用な部品郡がJavaAPIとして  提供されている。 (7)マルチスレッド   複数のスレッドを使うことで、並列的に複数のタスクを実行させることが出来ます。 OS機能と呼べるものを言語仕様・標準ライブラリーで提供している。 (8)メモリー管理が自動化されている   使い終わったメモリー領域を開放するガベージコレクタが組み込まれている。   プログラムの中で、データ用にメモリを割り当てたり、解放しなくてよい。   システム開発で致命的なバグとなるメモリ破壊やメモリリークが発生しないという安全性が考慮されている。 (9)JAVA言語で作成されるプログラムの種類   ★アプリケーション(application)     HTMLファイルを経由せずに、OS上で直接実行されます。     ただし、JVM java.exeが必要です。     Javaアプリケーションでは、最初にmain()メソッドが実行される。   ★アプレット(applet)     アプレットとはHTMLファイルを介して実行するjavaプログラムです。     Web頁にくみこまれ、Java対応のWebブラウザあるいはJava Plug_in上で     動作するプログラムです。   ★サーブレット     Java対応のWebサーバー上で動作するJavaプログラムで、     クライアントからの要求に応答する仕事をします。 (10)キャッチフレーズ   The Java programming language is a high-level language    that can be characterized by all of the following buzzwords:      Simple, Architecture neutral,Object oriented      Portable,Distributed, High performance      Interpreted, Multithreaded,Robust, Dynamic,Secure
[目次へ]

2.Javaの実行方法

Javaは、可搬性を保ちネットワーク環境で動作できるように、
コンパイラーとインタプリタの二つの方法を用います。

(1)ソースプログラムをJavaコンパイラーでバイトコードに翻訳する。
(2)バイトコードをJava仮想マシーン(インタプリタ)が解釈し実行する。
   仮想マシーンは、各種のコンピュータに用意されている。

(備考)Javaはコンパイラ型に近い言語である。
    ソースプログラムをコンピュータが処理し易い形に変換してから実行する実行形式を
    コンパイラー型という。
  
[目次へ]

3. コメント文

【コメント文の書き方】
 (1)//からその行の最後までをコメントとする。(1行)
 (2)/*から*/までをコメントとする。(複数行)
 (3)/**  ドキュメントコメント
        複数行可能  */
備考:(3)はソースプログラムからドキュメントを作成する場合に使います。 
    JDKに含まれているjavadocコマンドは、このコメントを利用してプログラムの
    ドキュメントを生成します。
[目次へ][JAVADOCへ]

4.プログラムの作成手順

(1)テキストエディターでソースプログラムを作成します。
   ファイルの拡張子は 	.java です。
   
(2)ソースファイルをコンパイルして、バイトコードに変換します。
   コンパイルは javac コマンドを使用します。
   コンパイルが正常に終了すると、バイトコードのファイルが
    クラス名.class  という名前で生成されます。

(3)生成したバイトコードをバイトコードインタープリターで実行します。
   生成したバイトコードはどのプラットホームでも実行できます。

     classファイルを実行するJava Virtual Machineは、
   java.exeという名で提供されています。
   
<DOS プロンプト画面からコマンド操作>
   >edit  Name.java  ソースファイルの編集 (1)
   >notepad Name.java メモ帳によるソースファイルの編集 (1)

   >javac Name.java  Javaコンパイル (2)
   >java  Name       Javaインタープリタ実行 (3)

   >appletviewer Name.html アプレットの実行

   >dir /B           ファイル名一覧表示

   >java           javaコマンドのオプション一覧表示
   >java −classpath d:¥dir1¥dir2 My_Class  クラスパスを指定
   >java −version   バージョン情報を表示
   >javac           javacコマンドのオプション一覧表示
   >javac −deprecation Name.java 推奨されないAPI参照ソース位置出力
   >javac -nowarn                   警告を発生させない
   >javac -verbose                  コンパイラの動作についてメッセージを出力する
[目次へ]

5.クラス名とファイル名の関連

ソースファイルの拡張子は .java です。
1つのソースファイルはpublicがついたクラスを1つだけ定義できます。
ファイル名とクラス名は大文字/小文字の区別も含めて正確に一致してしてなくてはならない。
publicは、このクラスが他のクラスから自由にアクセス可能であることを示します。
Javaでは、ソースファイルとpublicクラスの名称は厳密に1対1対応させます。
publicクラスでなければ、1つのソースファイルに複数定義可能です。
[目次へ]

6.複数のクラス定義と .class ファイルの関係

Javaのソースファイルは1つまたは複数のクラス定義で構成されますが、
ソースファイル名はそれらのクラスのうちのどれかと一致していなくてはいけません。

一つのファイルに複数のクラスを定義した場合は、 javacコンパイラーにより
複数のclassファイルが生成されます。
Javaのバイト・コードは、すべてクラスごとに独立したファイルとして生成されます。

それぞれのモジュールは必要になった時にダイナミックにロードされます。 
[目次へ]

7.Java言語で扱う型

次の4種類の型があります。
各データ型の表現ビット数は厳密に決まっている。
char型は16ビット。Javaは文字コード体系としてUnicodeを採用している。
文字型であるchar型は、整数型と同じように加算や減算等の演算ができる。

(1)基本データ型: 整数、浮動小数、文字、booleanを定義します。サイズにより複数種類あります。
          整数: byte(8bit) short(16bit) int(32bit) long(64bit)
          浮動小数:  float(32bit) double(64bit)
          文字:  char (16bit)
          boolean  boolean
(2)クラス型:  基本データ型とその振る舞いを組み合わせて、新たな型を定義します。
(3)配列型:   基本データ型やクラスの連続した集まりを扱うもので、
          独立した型をもっています。
(4)インターフェイス型: クラスの持つ振る舞いの種類を定義します。
[目次へ][データ型へ]

8.アプレットの作成手順

(1)ソースファイルのフォルダーを開いて、MS−DOSプロンプト画面を開く

   1)エクスプローラでソースファイルのフォルダーを開く
   2)「スタート」−「ファイル名を指定して実行」をクリックし、
     command と入力して、「OK」をクリックする。

(2)ソースプログラムの作成

   テキストエディターにて、My_applet.javaを作成

(3)コンパイル(DOS−プロンプト画面で実行)

  >javac My_applet.java

(4)HTML文書の作成
   テキストエディターにて、My_applet.htmlを作成

(5)アプレットの実行 (ブラウザーで実行)

   IEにて、My_applet.htmlを実行する

(6)アプレットの実行2  (DOS−プロンプト画面で実行)

  >appletviewer My_applet.java

   アプレットビューアは、ソースコードの先頭に記述したコメント内の
   HTMLを読み込んで実行される。

(7)アプレットのHTML構文

  構  文 <APPLET>...</APPLET> 
  属性仕様 
CODE=CDATA(クラス・ファイル) CODEBASE=URI(クラス・ファイルの基本URI) WIDTH=Length(アップレット幅) HEIGHT=Length(アップレット高さ) ARCHIVE=CDATA (アーカイブ・ファイル) OBJECT=CDATA (連続アップレット) NAME=CDATA (name for inter-applet communication) ALT=Text(代替テキスト) ALIGN=[ top | middle | bottom | left | right ] (アップレット配置) HSPACE=Pixels(水平方向の流れ) VSPACE=Pixels(垂直方向の流れ) 共通属性

WDG Web Sesign Group APPLET 仕様情報サイト

[目次へ][特徴へ]

9.Javaアプリケーション

Javaアプリケーションは、WWWブラウザー(IE)やappletviewerを使用しないで、
単独で動作できるプログラムです。

Javaアプリケーションには、以下のルールがあります。
 (1)javaコマンドを使用して実行する。
 (2)javaコマンドの引数として渡されるクラス定義には、main()メソッドが必要。
 (3)main()メソッドから、処理が開始される。

Javaアプリケーション作成上考慮する技術分野
 (1)アプリケーションへの引数の渡し方
 (2)フレーム クラスの利用
 (3)メニューの作成方法
 (4)ファイルダイヤログ クラスの利用
 (5)ダイヤログ クラスの利用

Javaアプリケーションの強制終了
 Windowsのクローズボタンで終了しない場合は、
 プログラムを起動したDOS画面で、 Ctrl + C を入力する。

Javaアプリケーション・コンソール/
 Javaは汎用のプログラミング言語なので、CやC++と同様、またperlやawkと同じように
 コンソールに対する入出力を行うことができます。 
 コマンドラインから使用するツールやCGIスクリプト、プリンタのフィルタといったプログラムもすべて
 Javaアプリケーションでコーディングすることができます。 
[目次へ]

10.基本データ型の型変換

Boolean以外は、基本データ型どうしは型変換できます。
異なるデータ型の変数を代入するようなとき、型変換は必要があれば自動的に行われる。
変換先の型のサイズが変換元の型のサイズより大きいときは、
符号拡張が行われ、その結果が代入される。
変換先の型のサイズが変換元の型のサイズより小さいときは、
明示的な型変換(キャスト)が必要です、その結果、変換後の値は変わってしまう場合がある。
  int i;
  short s;
  char  c;

  c=60000;
  i=c;      //暗黙の型変換(char−>int)  結果は60000
  s=(short)c;  //明示的型変換が必須  結果は−5536
  s=−10;
  i=s;        //暗黙の型変換(short−>int)符号拡張  結果はー10
[目次へ]

11.文字列、Stringクラス

文字列にはString型(クラス)を使用する。
String型は、+演算子をサポートしている。(特別事項)
String型は固定文字列を扱う。
プラグラムの中で””で囲まれた文字列は、String型として扱われる。
複数の文字列を+で連結できる。
数値型の文字列を+演算子で連結すると、数値は表示可能な文字列に変換される。

Stringクラスは、java.lang.Objectのサブクラスで、java.langパッケージ内で定義されている。
Stringクラスは、import文を使わなくても利用できます。
(java.langパッケージはimport文を使わなくてもよい。)

<Stringクラスの主用メソッド>
 (1)int kindex=str1.indexOf( ”keyword”);
     文字列内で、指定した文字の位置を返す
 (2)int klength=str1.length();
     文字列の長さを返す
 (3) String ksubstr=str1.substring(3,8);
     文字列内の指定した位置にある文字列を返す
[目次へ]

12.配列

配列は、同一のデータ型のオブジェクトが連続した集合を扱うための型です。
Java言語では、配列自身が単独のオブジェクトとして扱われる。
 ・配列の領域を確保するにはnewを使用する。
 ・配列の要素は、添字0から始まる。
 ・配列の長さは、 配列名.length 
 ・配列の添字のチェックは実行時に行われる。
[目次へ]

13.右シフト演算子

ANSI Cでは、符号付き整数に対する>>演算子の振る舞いの結果、最上位のビットが
どうなるのかは未定義でした。
Java言語では曖昧さを取り除くため、この演算子を>>演算子と>>>演算子の二つに
分け、それぞれの振る舞いを厳密に定めています。

>>演算子は、符号付きの数として演算する。
>>>演算子は、符号無しのビットシフトを行う。

 byte a =−3,b.c; 11111101(−3)
 b=a>>>1;        01111110(126)
 c=a>>1;         11111110(−2)

[目次へ]

14.System.out.println(”Hellow Java World!”);

実用上は、標準出力への文字列出力のこと。
正確には、「java.langパッケージの中の、Systemクラスの
Static変数outメンバがもつprintlnメソッドを、
引数”Hellow Java World!”で呼び出す」こと。

printlnメソッドの代わりにprintメソッドを使用すると改行されなくなる。
[目次へ]

15.final指定による定数定義

クラスの変数を定義する際に、finalを指定すると、
その変数の値をあとから変更できなくなります。
finalを指定した変数は、かならず初期化しておかなければならない。

  例:
    final int test = 100;
[目次へ]

16.メソッドのオーバーロード

メソッドは、1つのクラス内に同じ名前でいくつも定義することができます。
ただし、同じ名前のメソッドの引数の個数か型が異なっていなければなりません。

クラスを利用するときは、同じ名前で呼び出します。
どのメソッドが呼び出されるかは、引数の個数や、型で自動的に決まります。

この仕組みを、メソッドのオーバーロードと呼ぶ。
メソッドのオーバーロードを利用すると、引数を変えるだけで同じような機能を持った
メソッドをいくつも同じ名前で定義できるので、プログラムが読み易くなります。

なお、メソッドは、オーバーロードされているかどうかにかかわらず、
引数の個数と型をチェックして呼び出します。
[目次へ]

17.コンストラクタ

コンストラクタは、オブジェクトを生成したときに自動的に呼び出される
特別なメソッドです。
コンストラクタを定義しておけば、オブジェクトの初期化処理を実行できます。

コンストラクタに関するルール
 ・クラス名と同じ名前をもつメソッド
 ・返り値をもたない
 ・引数を受け取れる
 ・オーバーロードできる
 ・オブジェクトをnew演算子で生成する時に、引数を指定する。、 
[目次へ]

18.スタティック変数

クラス内の変数で、static指定付きで定義された変数。
static変数は、クラス自身に存在し、そのクラスから生成されたすべてから共有される。
クラス名.変数名 の記述方法でstatic変数にアクセスできる。

static変数は、クラスのオブジェクトを1つも生成していない状態でも存在する。
したがって、オブジェクトを生成せずにstatic変数にアクセスできる
[目次へ][クラス変数へ]

19.staticメソッド

スタティック変数と同様なことが、staticメソッドにも当てはまる。
staticメソッドはクラスメソッドとも称します。
クラスメソッドはクラスに属し、インスタンスメソッドはインスタンスに属します。

・クラス定義内で定義された通常のメソッドをインスタンスメソッドと呼ぶ。
 インスタンスメソッドは、そのクラスから生成されたオブジェクトそれぞれが所有する。
・staticメソッドは、クラス自身に存在するメソッドです。
・クラスはそれ自身オブジェクトでもあるので、メソッドも
 クラス名.メソッド名 のような方法で記述できる
・staticメソッドは、クラスのオブジェクトを生成していない状態でも存在しているので、
 オブジェクトを生成せずにstaticメソッドをアクセスすることが可能です。
・staticメソッドは、あるクラスから生成されたオブジェクトすべてから共有される。
 各オブジェクトは自分のメソッドとしてstaticメソッドを呼び出せる。

・クラスメソッドはインスタンス変数にアクセすできません。
・クラスメソッドはサブクラスに継承されません。

[目次へ][Mathクラス(実例)]

20.staticイニシャライザー

static指定を付けて定義されたブロックのことをstaticイニシャライザとよぶ。
staticイニシャライザは、それが定義されているクラスがロードされたときに自動的に
実行される。
つまり、クラスをオブジェクトとして考えると、コンストラクタにあたる機能をする。
staticイニシャライザは、一般に、static変数の初期化に使用する

<静的初期化子の書式>

  static { 文 }
[目次へ]

21.変数とメソッドのアクセス制御

オブジェクト指向の考え方では、クラス内の変数などオブジェクトのもっているデータを隠蔽し、
限られたメソッドのみを提供します。Java言語では、変数やメソッドにキーワード
private,public,protected を指定することにより、アクセス範囲を限定します。
それぞれのキーワードとアクセス制御の意味は下記の通りです。

public  どのオブジェクト、どのメソッドからでもアクセス可能
private それらが定義されたクラス内のメソッドのみアクセス可能
protected それらが定義されたクラス内のメソッド、そのクラスから派生したサブクラス、
      同一パッケージ内のクラスからアクセス可能。
[目次へ]

22.継承

継承とは、既存のクラスを元に新しいクラスを作成する仕組みのことです。

Javaのクラスの継承関係は単一継承です。
Javaのextends文は、直接継承するスーパークラスを一つしか指定できません。
[目次へ]

23.サブクラスの定義

オブジェクト指向プログラム言語では、新しいクラスを定義するときに、
既存のクラスを利用できます。
あるクラスが他のクラスの変数、メソッドを受け継ぐことを継承(インヘリタンス)という。
このとき、既にあるクラスをスーパークラス、新規に作成するクラスをサブクラスという。
サブクラスの定義では、クラス名の後にキーワード extends とスーパークラスの名前を続けて書きます。
[目次へ]

24.スーパークラスのメソッドのオーバーライド

サブクラスはスーパークラスのメソッドを受け継いでいるわけですが、
同名のメソッドをサブクラス内で定義しなおすことが可能です。
このことを、メソッドのオーバーライドと呼びます。

スーパークラスのメソッドをサブクラスでオーバーライドするのは、
スーパークラスの性質を受け継ぎながらメソッドの動作を変化させた新しいクラスを
作成するのが目的であり、引数の数、型および返り値はスーパークラスのそれと同じで
なければなりません。
オーバーライドにより、スーパークラスのメソッドは隠蔽されます。つまり、オーバーライド
されているメソッドが呼び出されたときは、必ずサブクラスのメソッドが呼び出される。

スーパークラスで定義済みのメソッドと同じシグニチャで、
異なった機能を持つメソッドをサブクラスで定義し直すことをオーバーライドという。

スーパークラスのメソッド定義において、サブクラスでオーバーライドを禁止するには、
修飾子finalをつけます。
[目次へ]

25.オーバーライドを制限するには

サブクラスにオーバーライドされては困るようなメソッドには、スーパークラスのメソッドの
定義で、final指定を付けます。こうしておくと、サブクラスはそのメソッドをオーバー
ライドできません。
 final void functiona(){
[目次へ]

26.変数の適用範囲

変数を定義するときには、その変数がどの範囲まで効果が及ぶのか、
変数を参照するときには、どこで定義されている変数なのかを押さえて
プログラム作成していかねばなりません。このルールのことを
変数のスコープルールと呼びます。

以下は、Java言語で変数を参照するときのスコープルールです。
プログラム中の変数はこの順番で探されて、最初に見つかった変数が参照されます。

(1)参照している場所と同じレベルのブロックを探す
(2)メソッド内でその外側のブロックを探す
(3)メソッドの属するクラス内の変数を探す
(4)スーパークラスの変数を探す
(5)ここまでで見つからなければ、コンパイル時にエラーにする
[目次へ]

27.クラスの修飾子

クラスを定義するときに修飾子を付けて、クラスの性質を制御できます。
クラスの修飾子には、public,abstract,final がある。
クラスの修飾子を省略すると、そのクラスは同一パッケージ内からのみアクセス可能。
public
importで指定されれば、他のクラスからアクセスできる。
abstract
abstractメソッドをもっている。
privateをもてない。
staticメソッドをもてない。
インスタンス化できない。
他のクラスのスーパークラスとして使用される。
final
他のクラスのスーパークラスになれない。
[目次へ]

28.キーワード this

使用するケース
(1)オブジェトを引数として他のメソッドを呼び出す
(2)メソッドのローカル変数と同じ名前のクラスの変数をアクセスする
(3)コンストラクタ内で同じクラスの他のコンストラクタを呼び出す
[目次へ]|[サンプルへ]

29.キーワード super

使用するケース
(1)派生したクラスでメソッドをオーバーロードしている場合に、
   スーパークラスの同名のメソッドを呼び出す。
(2)コンストラクタ内でスーパークラスのコンストラクタを呼び出す。
[目次へ]

30.abstractメソッド 抽象クラス

メソッドの形態のみを定義したメソッドをabstractメソッドと呼ぶ。
abstractメソッドは返り値の型と引数を定義するだけで、メソッド本体は
定義しません。メソッド本体はサブクラスでオーバーライドして定義します。

Javaであらかじめ提供されているGraphicsクラス内のメソッドの多くは、
abstractメソッドとして定義されている

public abstract class Graphics { 
     :
 public abstract void drawLine(int x1,int y1,int x2 ,int y2);
     :
}

Javaで扱うクラスの中には、抽象クラスと呼ばれる少し特殊なクラスがあります。
Graphics クラスがこのケースです。
抽象クラスはプログラマがアプリケーションやアプレットから直接実体化することができません。
したがって、プログラムの中で、下記の記述はエラーとなります。
  Graphics g=new Graphics();

正しい使用方法は、Appletクラスのもつpaintメソッドの引数として与えられている
g という名前のGraphicsオブジェクトを利用します。
  public void paint(Graphics g){ 

abstract指定されたクラスは、これを継承したサブクラスを実行することで間接的に利用します。
abstract指定されたクラスは、直接使用できません。
abstract指定されたクラスは、別名「抽象クラス」と呼ばれる
[目次へ]

31.インターフェース


Javaでは多重継承の概念は取り入れられていません。
これを解決するためにインターフェースという機能をサポートしています。
クラスの定義では、複数のインターフェースをインプリメントできます。

インターフェースは、オブジェクトの機能や操作のみを抽象化したものです。
メソッドでなく、抽象メソッドを持ちます。
抽象メソッドとは、メソッドのシグニチャ(メソッド名、引数、返り値)だけを宣言したものです。

インターフェースとは、定数とメソッドの宣言だけを集めたものです。
宣言だけで実際のメソッド本体などは実装しません。あるクラスを作ろうとした場合に、
「インターフェースをインプリメントする」と、そのクラスはインターフェースで宣言したメソッドを
必ず実装しなければならなくなります。

インターフェースとは、一連のメソッドの形態のみを定義したものです。
インターフェースはクラスではないので、メソッドの処理本体は定義しません。
メソッドの処理本体はインターフェースには定義せず、インターフェースを使用する
クラスの方で定義します。

「インターフェースのポイント」
 ・クラスに共通の外部仕様(機能)を抽象化したものをインターフェースと呼ぶ
 ・インターフェースはinterfaceによって定義し、抽象メソッドという実体に無いメソッドをもつ。
 ・インターフェースを実装するには、すべての抽象メソッドの実体を定義する。
 ・インターフェースでは定数を定義できる。
 ・インターフェースにより、複数のクラスに共通の性質(機能)を与えることが出きる。
 
 ・定数のみで、変数を受け継ぐことは出来ない
 ・メソッドの実体は書けない。
  (実体は、インターフェースをインプリメントしたクラスに書く)
 ・インターフェースによる継承は、クラス階層とは無関係です。
 ・複数のインターフェースをインプリメントできるので、インターフェスはJavaでサポート
  されていない多重継承を補完した働きをしている。
 ・インターフェースは機能を表します。しかし、具体的な機能を決めるものではなく、
  このような機能があることを明示するためのものです。したがって、
  インターフェースはJavaのポリモーフィズムを実現する1つの手段であるといえます。

<インターフェース用途>
 ・定数を定義する
 ・複数のクラスに、共通の性質を与える。
[目次へ][インターフェース]

32.パッケージ

パッケージは複数のクラスをグループ化し、グループ毎に名前空間を分離する働きをもっている。
同じ名前のクラスでもパッケージが違えば別のクラスとして扱われる。

[パッケージの作成]
 自分で作成したクラス郡をパッケージにまとめるには、下記のようにpackageに自分のクラスの属する
 名前空間を指定します。名前空間はピリオドで区切って階層化できます。
 パッケージ宣言によって各クラスはどのパッケージに属しているかを決める。
 Javaにおいては、パッケージはディレクトリーと関係しています。
   package  lib;  // パッケージ宣言文:クラスファイルをlibフォルダーに格納する。
      public class  Test {
        クラス定義
      }

[コンパイル時にパッケージ作りクラスファイルを格納して、そのまま実行する手順」
  上記のように、ソースに package lib; を指定した場合は、Test.classという
  ファイルは、libディレクトリーに出力されることを意味します。
    >javac −d . Test.java のようにコンパイルすると、
  カレントディレクトリーの下にパッケージ名と同じ名前のデレクトリーが作成され、そこにクラスファイルが
  格納されます。

  なお、コンパイルが終了したら、そのまま下記でクラスファイルを実行します。
    >java lib.Test
   
[パッケージのロード]
  外部のパッケージから使用するには、明示的にパッケージをロードします。
    
   import lib.Test;
      public class My_class{
      Testクラスを利用する。
      }

[パッケージとディレクトリの関係]
  Javaプログラムのパッケージ構成は、ディレクトリであらわされる
  パッケージの名前と保存場所のディレクトリ名は同じでなければならない。

[匿名パッケージ]
  パケージを指定しないで定義したクラス。

[完全修飾クラス名](Fully Qurified Class Name=FQCN)
  パッケージ名をつけたクラス名
  javabasic.packageA.PackageTest  Test = new javabasic.packageA.PackageTest(); 
   
   別のパッケージに所属するクラスを指定するのに、いちいち完全修飾クラス名を
 指定するのは面倒です。そこでクラスをインポートしておくと、パッケージ名の
  指定を省略できるのです。

 インポートする際に、*(ワイルドカード)を使えます。
  import javabasic.packageA.*; 

  
  
[目次へ]

33.JDKが提供する代表的なコアパッケージ

JavaではSUNなどJavaの開発者が提供するクラスを利用しながら自分なりのプログラムを構築していく。
既に作成されている複数のクラスはグループ化され、このグループの中だけでクラスの名前が有効である。
これをパッケージという。従って自分のプログラムでSUNが提供するクラスを使用したい場合は、
プログラムの初めに、該当するパッケージをimportする必要がある。

  1. java.applet : アプレットを作成するときに必要

  2. java.awt : GUI作成用

  3. java.awt.image : イメージクラスを処理する

  4. java.awt.color : 色に関係するクラス

  5. java.awt.font : 文字のフォント関連のクラスやインターフェース

  6. java.awt.event : AWTコンポーネントによって発生する各種のイベントを
    処理するためのクラスやインターフェース

  7. java.io : 入出力のクラス

  8. java.lang : java言語の為の基本動作のためのクラス

  9. java.net : ネットワーク機能

  10. java.math : 任意精度の整数、実数演算のための部品

  11. java.util : 乱数、ハッシュテーブル、ベクトル、Dateなど、汎用的な部品

  12. java.sql : 関係型データベースにアクセスする為の部品

  13. java.text : テキスト、日付、数値など、地域毎に異なる表記を、それに依存しない形で扱うための部品

  14. java.securityとそのサブパッケージ : セキュリティ管理用のための部品

  15. java.rmiとそのサブパッケージ : ネットワークを介してオブジェクトにアクセスするための部品

パッケージ内の全てのクラスをロードするための指定   import java.awt.*; パッケージの名前の例 パッケージ名は、その名前には、おもに小文字が用いられれている。 Javaで文字列を扱うStringクラスは、正式にはjava.lang.Stringクラスで、 java.langがパッケージ名となります。
[目次へ]

34.予約語、識別子

Java言語の予約語一覧
Java言語では、上記のキーワードを文法で使用します。 識別子としては使用できません。 識別子:  識別子は変数やラベル、クラス名、メソッド名、インターフェース名に使用する名前です。  長さの制限はありません。  識別子における規則は以下のとおりです。   ★1:1文字目は、英字、アンダースコア、ドル記号のいずれか。   ★2:2文字目以降は、数字を用いることができる。 
[目次へ]

35.用語解説

Javaの用語 一覧
Java プログラミング関連での、用語を簡単に解説してます。
[目次へ]

36.アプレット:イメージデータの表示

Graphicsクラスには、イメージ(2次元画像データ)を扱うメソッドが用意されている。
<Imageデータの表示手順>
 (1)イメージの取得
 (2)イメージデータの表示
  サンプル Java プログラム
[目次へ]

37.Appletクラス

Appletクラスの階層
 java.lang.Object −>Java(アプレット、アプリケーション)のクラスの総元締め
    java.awt.Component
      java.awt.Container
        java.awt.Panel
          java.applet.applet

アプレットのクラスにはpublicを指定しなければなりません。
   public class My_class extends Applet {   } 
    (上記は、Appletクラスをextends(継承)して、My_class クラスを作成します。)

アプレットに関する基本メソッド
メソッド名メソッドの形式いつ呼び出されるか
initpublic void init() { }ブラウザがアプレットを読み込んだとき
startpublic void start() { }アプレットの実行が開始されるとき
paintpublic void paint(Graphics g) { }アプレットが開始するとき
stoppublic void stop() { }アプレットが終了するとき
destroypublic void destroy() { }アプレットがアンロードされたとき
<Javaアプレットのプログラミングについて> ★アプレットを作るときは、既存の Applet クラスを使う。 ★既存のアプレットクラスは、完全なアプレットだが何もしない。 ★独自の処理は、既存のアプレットに追加して実現する。 ★アプレットの動作を表すものとしてメソッドがある。 ☆アプレットの中に動いているものがある場合は、startメソッドの中でそれをスタートさせ、  stopメソッドの中でそれを停止させる必要がある。(アニメーション アプリ対応。) ☆startメソッドはアプレットを開始するときと、他のぺーじから再度戻ってきたときに呼ばれる。 ☆stopは、アプレットが停止するときと、他のページに移動する場合に呼ばれる。 ★paint メソッドは、そのアプレットの描画処理を行う。 ★標準のメソッドの動作以上の動作を望むときは、そのメソッドをオーバーライドする。 ★描画は Graphics クラスを使って行う。 ★g.drawString メソッドで、位置を指定して文字列を描画できる。 ★init メソッドはアプレットの初期化。最初に1回だけ行いたい処理を書く。 ★Color クラスはJavaで色を扱う。   13種類の色があらかじめ定数として準備してあり、Color.white のように使える。    それで足りないときは、new Color(R,G,B) として任意の色を作ることができる。 ★アプレットの背景は setBackground メソッドで色を指定して変更できる。 ★グラフィックスの描画色は g.setColor メソッドで変更する。 ★アプレットのサイズを得るには size メソッドを使う。 ★幅と高さはディメンジョンと呼ばれ、Dimension クラスで表現する。 ★グラフィックスクラス Graphics には、図形描画のための多くのメソッドがある。 ★Math.random メソッドは0以上1未満のランダムな実数値を返す。   ある範囲のランダムな整数値がほしい場合は、random の値を何倍かして整数に型変換する。
[目次へ]

38.Javaアプレットの特徴および制限

(1)アプレットはHTMLのAppletタグによって指定され、Webブラウザ上で実行される。
(2)アップレットにはメインメソッドが必要ない
(3)アプレットにはセキュリティ上機能に制限がつけられている。
   <制限1>原則として、クライアントマシン上のファイル(ローカルファイル)
        に対する読み書きができない。
   <制限2>アプレットをダウンロードしたサーバー以外のマシンとは
        ソケット通信ができない。これは知らないうちに他のサーバーに対して、
        データを送れれないための制限。
   <制限3>他のアプリケーションソフトを起動したりすることはできないようになっている。

(4)Javaアプレットの実行(その1)
   ・HTMLファイルを使ってWEBブラウザ上で実行させる。
   ・classファイルとHTMLファイルをサーバー上に置き、
    WebブラウザでHTMLを表示します。

(5)Javaアプレットの実行(その2)
   ・アプレットをappletviewerを使って実行する場合は、
    DOSプロンプト上で、下記のようにコマンド入力します。

    >appletviewer MyApplet.html
(6)活用分野
    Javaアプレットを使うことにより、HTMLで記述された静的なWebページでは実現できない動的な表現が可能となる。
    また、Webブラウザのみで利用することができるネットワークゲームやチャットを開発することもできる。
(7)使用環境設定
    企業内のクライアントサーバシステムでJavaアプレットを利用すれば、
    社員のコンピュータにはWebブラウザを入れるだけでシステムを利用できるようになり、
    アプリケーションソフトの配備や管理にかかるコストを節減することができる。
[目次へ][作成手順へ]

39.WebブラウザのAppletに対する動作

(1)クライアントのWebブラウザが、URLに指定されたWebサーバー上のHTMLファイルの
   内容を取ってきて表示する。
(2)HTMLファイル上で、Javaアプレットを実行する指定(Appletタグ)が存在する
   場合は、Webブラウザはサーバー上のバイトコード(クラスファイル)を、クライアント側に
   転送する。
(3)Webブラウザ内のJVM(Java仮想マシン)が、転送されたバイトコードを実行する。
[目次へ]

40.データ型の基本(プリミティブ型と参照型)

プログラムで扱われる数値や文字列などのデータは種類ごとに分類されます。
プログラムにおいては、これらのデータの種類を、データ型と表現している。
データ型は、大きくプリミティブ型と参照型に分けられます。

<プリミティブ型>
 プリミティブ型とは、Javaの基本的なデータ型です。
 プリミティブ型には、整数型、浮動小数点型、論理型(boolean型)などがある

  整数型:byte型 short型 int型 long型 char型
  浮動小数点型:float型 double型

<参照型>
 データの保存場所を指定、あるいは利用することを参照という。
 参照型変数は主に3種類(クラス型、インターフェース型、配列型>)ある

[目次へ][データ型へ]

41.実行の繰り返しを中断するには

while,do,forによる繰り返し処理を何らかの条件により、
中断するためには、break,continue,return,throw
のキーワードを利用します。

break:   ループを終了して、ループ外に抜ける。

continue:ループを中断し、次のループを実行する。

return:  ループのあるメソッドそのものを抜けて、メソッドの呼び出し元に戻る。

throw:   例外を発生させて、例外処理を定義している場所に処理を移す。
[目次へ]

42. 3項演算子(条件分岐のための演算子)とは?

Javaには、条件分岐のための特別な演算子として、3項演算子というものがあります。
<3項演算子の書式>
   <値>?<文1>:<文2>
    <値>は、論理型(boolean型)の変数や定数であり、真の場合は<文1>が実行され、
    偽の場合は<文2>が実行されます。
    <文1>と<文2>の実行結果は、同じ型を返さなくてはならない。
    3項演算子の実行結果として<文1>または<文2>の実行結果が返されます。
[目次へ]

43.Javaプログラムの基本構成

(1)一つの「Javaプログラム」は一つ以上の「パッケージ」から構成されています。
(2)一つの「パッケージ」は一つ以上の「クラス」から構成されています。
(3)一つの「クラス」は、複数の「属性(変数)」と、複数の「メソッド(関数)」で構成されています。
(4)一つの「メソッド」は、複数の「文」から構成されています。

<注記>
  Javaでは、クラス内の変数のことを「属性」「フィールド」と呼ぶ。
  関数のことを「メソッド」と呼ぶ。
  クラスや変数を定義することを「宣言する」という。
[目次へ]

44.CIW Sun Certified Programmer for Java 2試験学習カリキュラム

CIWJavaプログラミングシリーズでは、サン・マイクロシステムズ社の
Sun Certified Programmer for Java 2試験(試験番号 310-025)合格を目指します。

<Javaプログラミング基礎 > 
  ●Javaランタイム環境           ●レイアウトマネージャ
  ●データのタイプ、変数、オペレータ    ●Javaのグラフィックス
  ●コントロール・ステートメント(制御文) ●デリゲーション・モデル
  ●メソッド                ●インナークラス
  ●配列                  ●アプレット
  ●クラスとオブジェクト          ●例外
  ●クラスの継承              ●スレッド作成とスレッド関数
  ●コンストラクタ             ●同期
  ●インターフェースと抽象クラス      ●ストリームとシリアライゼーション
  ●パッケージとアクセス修飾子       ●ネットワーキング 
  ●Swingコンポーネント

<上記のURL>
--> CIWJavaプログラミングシリーズ 学習内容
[目次へ]

45.CIW オブジェクト指向分析とデザイン学習カリキュラム

<オブジェクト指向分析とデザイン>  
  ●ソフトウェアエンジニアリング   ●インターフェースデザインとプロトタイプ
  ●オブジェクトパラダイムの理解   ●分析ワークフロー
  ●クラス継承とポリモフィズム    ●分析モデリング
  ●ソフトウェア開発ライフサイクル  ●デザインワークフロー
  ●融合ソフトウェア開発プロセス   ●クラスダイアグラム
  ●UML               ●シークエンス ダイアグラム
  ●CASE               ●Statechartダイアグラム
  ●要求 ワークフロー        ●デザイン クオリティについて
  ●ユースケース モデリング     ●ワークフローの実行
  ●アクティビティ ダイアグラム   ●ワークフロー試験 

<上記のURL>
-->CIW オブジェクト指向分析とデザイン学習カリキュラム
[目次へ]

46.画面への標準出力

System.out.print()
System.out.println()は標準出力のストリームで使われるメソッドです。

System.err.print()
System.err.println()は標準エラー出力のストリームで使われるメソッドです。

DOSプロンプトで、出力をファイルへリダイレクトすると、
[目次へ]

47.アプレットにパラメータを渡すには

<HTML文書内でのパラメータ指定方法>
HTML文書内でアプレットへ渡すパラメータを指定するには、下記のサンプルのように
<param>タグを記述します。
なお、<param>タグに終わりの指定はありません。

<applet code=”MyClass.class” width=100 height=50>
<param name=myimage value=”myimage.gif”>
<param name=ptime value=200>
</applet>

<パラメータを参照するには>
 渡されたパラメータをアプレットで参照するには、AppletクラスのgetParameter()
 メソッドを使用します。

 String pv;
 pv=getParameter(”myimage”);
  この例は、パラメータ名myimageの値を参照し、返り値とするものです。
[目次へ]

48.Mathクラス

Mathクラスは、Javaの数学ライブラリィです。
Mathクラスの変数とメソッドは、staticになっているので、
オブジェクトとしてインスタンス化する必要はありません。

Javaには、「関数」というものがなく、その変わりメソッドが使われます。
例えば、C言語では、三角関数を計算するのにsin(x)やcos(x)などの関数を使いますが、
Javaの場合は、あるクラスのメソッドとういう形になります。
具体的には、sin(x)の場合は、
  java.lang.Math.sin(x) という形で提供されます。

このように、一般的な関数に相当するものは、オブジェクトの実体にはよらないで、
Javaでは、staticメソッドとして提供されます。

Mathクラスは、サブクラスが作れない、finalクラスです。
[目次へ][staticメソッドへ]

49.instanceof演算子

前に書かれているオブジェクトが後ろに書かれているクラスのインスタンスなら
trueを返します。
if(e.target instanceof Button){
 }
[目次へ]

50.グラフィックス表示手法(ダブルバッファリング)

黒の背景色に文字をスクロールさせて表示させる場合、
(1)領域を背景色で塗りつぶす
(2)文字を描く
という手順になりますが、この操作を画面上なめらかにする必要があります。

ダブルバッファリングは、どこか見えない場所で描画を完成させてから、画面に転送し、
舞台裏を隠して、しかも画面のちらつきを押さえる手法です。具体的には、下記の手順となります。
(1)空のImageオブジェクトを作成します。
(2)Imageオブジェクトに対して、グラフィックスを描き完成させます。
(3)最終的に、Imageオブジェクトを画面に描くことで表示します。
[目次へ] [同じ項目へ]

51.標準入出力

・標準入力
 Systemクラスないにinというstatic変数が用意されてます。
 inはInputStreamクラスのインスタンスになっています。
 標準入力には、InputStreamクラスのメソッドを使用します
    int c;
  	c=System.in.read();

・標準出力
 Systemクラスないにoutというstatic変数が用意されてます。
 outはPrintStreamクラスのインスタンスになっています。
 標準出力には、PrintStreamクラスのメソッドを使用します
    System.out.println(”TEST”);

・標準エラー出力
 Systemクラスないにerrというstatic変数が用意されてます。
 errはPrintStreamクラスのインスタンスになっています。
 メソッドは標準出力とおなじものをつかいます。
    System.err.println(”TEST”);
[目次へ]

52.FILEクラス

特定のファイルに関する情報を獲得するには、FILEクラスを使用します。
ファイルもディレクトリも共にFILEクラスのオブジェクトとして扱う。
<FILE クラスのメソッド>
  String.getName()      ファイル名を返す
  String.getPath()      パス名を返す
  String.getAbsolutePath()  ファイル名をパス付きで返す
  String.getParent()     親ディレクトリを返す
  boolean exists()      ファイルの存在確認
  boolean canWrite()      ファイルが書き込み可能かどうか確認
  boolean canRead()      ファイルが読み込み可能かどうか確認
  boolean isFile()      通常ファイルかどうか確認
  boolean isDirectory()      ディレクトリかどうか確認
  boolean isAbsolute()      ファイルが絶対パス名かどうか確認
  long length()      ファイルのサイズを返す

  
[目次へ]

53.基本データ型 ラップクラス

<ラップクラスとは>
 ラップクラスは、基本データ型の値をデータとして持つクラスです。
 ラップクラスには、Boolean Byte Character Integer Short 
 Long Float Double があります。
 データをくるみこんだクラスという意味で、wrapped classと呼ばれます。
 いずれも、Numberクラスのサブクラスで、finalクラスです。
 (ラップクラスのサブクラスを作ることは出来ません。)

<ラップクラスのオブジェクト作成>

  double d=123.45;
  Double dobj=Double(d);

または、
  Double dobj=new Double(”123.45”);

<ラップクラスのメソッド >
  Double オブジェクト dobjの値をfloatに変換するには、

  float f =dobj.floatValue();


[目次へ]

54.GUIクラスの種類

Javaでは、提供するクラスやインターフェースをパッケージというグループにまとめています。
GUIに関連したパッケージには、AWT(Abstract Window Toolkit)パッケージと
Swingパッケージがあり、ボタンやメニューなどのGUI部品(コンポーネント)、イメージの表示、
マウスやキーボードからの入力(イベント)を処理する機能を持つクラスが提供されている。

GUI (Graphical User Interface) とは,
グラフィックスを使ってユーザとコンピュータの対話を行う部分の総称であり,
ウィンドウやマウスでの操作など最近のコンピュータシステムでは常備されている. 
[目次へ]

55.AWTパッケージ

Abstract Window Toolkitの略称です。
多くのシステムでは,GUI部品を利用してオブジェクト指向でGUIが構成されている. 
Javaでは,AWT (Abstract Window Toolkit) で,GUIを構成するためのGUI部品を提供している. 
Javaの初期のバージョンからあるGUIツールです。
コンポーネントのほか、GUIの基本となる描画、配置、イベント処理を
行うためのクラス郡です。

主なGUIの部品は以下の通りである.

  1. Button : ボタン

  2. Canvas : 描画できる領域

  3. Checkbox : チェックマークを付けられる

  4. Choice : プルダウン形式で項目が選択できる

  5. Label : 文字列を表示

  6. List : 項目選択が出来るスクロールバーつきの一覧

  7. ScrollBar : スクロールバー

  8. TextArea : 複数行のテキストを入出力できる

  9. TextField : 一行のテキストを入出力できる

  10. Menu : メニュー

  11. PopupMenu : ポップアップメニュー

[目次へ]

56.Swingパッケージ

AWTを拡張する形で開発された新しいツールキットです。
SwingはAWTの機能を元に作られているので、Swingパッケージを
使う場合も、AWTは必要です。
Swingパッケージは、Java2からコアパッケージの一部となっています。
Jで始まる名前のクラスがSwingコンポーネントです。

[目次へ]

57.スレッドの処理

下記の2つの方法があります。
(1)Threadクラスのサブクラスを定義して、runメソッドを再定義し、
   Threadがおこなう処理をかく。

(2)Runnableインターフェースをインプリメントしたクラスを定義し、
   runメソッドにスレッドが行う処理をかく。
[目次へ]

58.スレッドの状態変化

スレッドが作られて、実行され、終了するまでの状態
(1)新しいスレッド・オブジェクトが作られた状態

(2)実行状態へ
   Threadオブジェクトに対して、startメソッドを実行すると、
   runメソッドがよばれ、startメソッドは終了します。
   これで、スレッドは実行状態となる。

(3)停止状態へ
   次のことが起こると、スレッドは停止状態になります。

   ・sleepメソッドが実行された時
   ・objectクラスのwaitメソッドが実行された時
   ・ファイルなどの入出力を待たされているとき

(4)スレッドの終了
   runメソッドが終了するとスレッドも終了します。
[目次へ]

59.内部クラス(inner class)

クラス本体部にメンバーとして、クラス定義を入れ子(ネスト)の形で定義できます。
これを内部クラスと呼びます。区別するために、内部クラスを含む外側のクラスのことを、
包含クラス(enclosing class)と呼びます。


[目次へ]

60.GUIコンポーネントを使うプログラムの実行終了手順

(1)Windowを閉じます
(2)MS−DOSプロンプトから、Ctrl+c を入力します。

(「Window」を閉じる操作だけでは、プログラムは終了しません。
[目次へ]

61.JButtonにアイコンイメージの表示

JButtonやJLabelなどの、Swingコンポーネントには、文字列以外に
アイコンを貼りつけることが出来ます。
アイコンは、gifまたはjpeg形式のファイルです。

JButtonにアイコンを表示するには下記のようにします。

(1)イメージファイルを指定して、ImageIconオブジェクトを作ります。
   ImageIcon iconx;
   iconx=new ImageIcon(”file.gif”);

(2)JButtonコンストラクターにわたす
   JButton b1;
   b1=new JButton(”タイトル”,iconx); 
[目次へ]

62.サーブレット

サーブレットは、「サーバサイドで動作するアプレット(小さなアプリケーション部品)」です。
かつては、ブラウザ上で動作するアプレットがHTMLのシンプルなページを支援したものですが、
サーブレットはそうしたビジュアルな表現を実現するものではありません。
サーバサイドで動作し(必要に応じてデータベースやテキストファイルを検索、更新し)、
その処理結果を(一般的には)HTMLとして返すのがサーブレットの役割です。
サーブレットでは、クラスの実行結果がクライアントに返されます
サーブレットは、Javaのクラス構文をベースとした「本格的な」プログラムです。

PerlやASP、PHPのようなスクリプト言語とは異なり、ソースコードをそのままサーバ上に
アップロードするだけではサーブレットは動きません。
サーバ上にはコンパイルされた後の「.class」ファイルを配置します。

また、このことはJSPの必要性を促す重要なポイントの1つです。

<サンプルプログラムリスト HelloWorld.java> 
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {
  public void doGet(HttpServletRequest request,
     HttpServletResponse response)
    throws ServletException,IOException {
    response.setContentType("text/html;charset=Shift_JIS");
    PrintWriter out=response.getWriter();
    out.println("<html><head>");
    out.println("<title>Hello, World!!</title>");
    out.println("</head><body>");
    out.println("<p>Hello,World!!</p>");
    out.println("</body></html>");
  }
}  


[目次へ]

63.JSP(JavaServer Pages)

JSPの特徴
・コンパイルを必要としません。(実行エンジン側で自動コンパイルされる。)
・開発も容易、メンテナンス性・パフォーマンスにも優れている。
・JSPでは、HTMLに埋め込まれた断片的なJavaコードが動的に処理されます

サーブレットが、その都度、「xxx.java」ファイルをjavacコマンドでコンパイル、「.class」ファイルを
生成しなければならないのに対し、JSPは「xxx.jsp」ファイルをそのままWebサーバに配置すれば、
それだけで動作してしまいます。

つまり、実行エンジン(Tomcat)がJSPファイルを自動的にサーブレットへと変換し、
コンパイルを行ったうえで実行します。
また、コンパイルした結果はそのまま一時ファイルとして保持され、2回目以降の実行に使用されますので、
パフォーマンス上はサーブレットと同等のレベルを保障します。

JSPは、コードをHTMLのどこにでも埋め込めるというその利点を得た代わりに、
HTMLとスクリプトレット(<%〜%>で囲まれたコード部分)とが錯綜(さくそう)しやすいく
それによる可読性の低下というデメリットを持っています。

サンプルプログラム  HelloWorld.jsp 

<html>
<head>
<title>Hello, World!!</title>
</head>
<body>
<% out.println("<p>Hello,World!!</p>"); %>
</body>
</html> 
[目次へ]

64.JavaBeans

JavaBeansは、サーブレットやJSPから呼び出されることを前提とした再利用可能な部品です

部品化の技術としては、広義では、このほかJSPで使用することのできる「カスタムタグ」や、
リクエスト・レスポンスデータを処理する「フィルタ」、アプリケーションやセッションの開始・終了を
制御する「リスナ(Listener)」などが用意されています。

サーブレット・JSPがいずれも「サーバサイドでの用途」を前提とした技術であるのに対し、
JavaBeansは必ずしも「サーバサイド用途」に限られた技術ではありません。

JavaBeansは再利用することを目的とし、汎用的なロジックを実装したJavaクラスです。
それ自体が直接にクライアントから呼び出されることはありません。

サーブレット、あるいはJSPから呼び出されることによって、データベースへの検索や更新、
ファイル処理などのあらかじめ定められた「比較的、汎用的な」ビジネスロジックの処理を行い、
必要に応じて処理結果を返す、それは部品です。

<シンプルなJavaBeansクラスの例 BeanHello.java> 
(機能:JSPやサーブレットから呼び出され、パラメータとして渡された人名に対して、
「Hello,佐藤君」のようなメッセージを返す)

package beanPackage;
import java.io.*;

public class BeanHello implements Serializable {
  static public String getHello(String strVal) {
    return "<p>Hello, " + strVal + "</p>";
  }
} 

 このJavaBeansは、例えば、JSPからであれば、

<%
BeanHello objHlo=new BeanHello();
out.println(objHlo.getHello("佐藤"));
%> 

のように呼び出すことが可能です。
[目次へ]

65.JSP、サーブレット、JavaBeans比較

サーバサイドJavaを構成するJSP、サーブレット、JavaBeans 3者間には強い補完関係にあります。
つまり、コンテンツ、入出力のユーザーインターフェイス、一般的にいうならばプレゼンテーション層を構成する部分は
JSPで、ユーザーからの入力を受け取り、また、処理をJavaBeansなりJSPなりに振り向ける制御の部分はサーブレットで、
そして、データベースアクセスのようなより汎用的なロジックをつかさどる部分はJavaBeansで、というように、
それぞれの特性に基づき、使い分けます。

これにより、静的なコンテンツ部分の変更があった場合にはJSPのみを修正することができますし、
ユーザー入力データの処理方法が変更となった場合はサーブレットのみで修正を完結することができます。

この方法を、View、Control、Modelの3つの頭文字を取ってMVC技法と呼ぶこともあります。
MVC技法の目的とは「変更が生じたときの影響範囲を局所化し」「コードの可読性を高める」ことです。

このシステムデザインの考え方は、システム開発、改訂を継続的に行うために必須の要素です。

  
言語 MVCの分類 利用局面 形態 クライアントからの呼び出し コンパイル 初心者に
JSP View 静的なコンテンツ中心 HTMLベース 可能 不要 易しい
サーブレット Control データの入出力処理中心 クラスベース 可能 必要 やや難しい
JavaBeans Model 汎用的なビジネスロジック クラスベース 不可 必要 やや難しい
JSP、サーブレット、JavaBeans 比較

                ( 62-65の内容は右記による:基礎から学ぶサーブレット/JSP(1) 山田祥寛 2003/1 )
[目次へ]

66.Frame クラスについて

フレームはAWTを用いたウインドウアプリケーションの基本となる部分で、タイトルや枠から構成されています。
また、フレームはメニューを持つこともできます。
フレームを作成する場合は、Frameクラスを使用します。

<フレームのイベント処理>
 フレームを使用したアプリケーションでは、ウインドウマネージャ(X−Windows の場合)あるいは、
 システムメニュー(Windowsの場合)からの終了をデフォルトでは受けつけず、システムメニューからは
 終了させることができません。
 また、Windowsの閉じるボタンも効きません。
 正しく、終了させるためには、アプリケーションからウインドウを破棄のイベントを判断して、
 Systemクラスのexit()メソッドでプログラムを終了させます。
[目次へ]

67.メニューの作成

AWTでメニューを持つアプリケーションを作成するには、下記のクラスを用います。
メニューはファイルシステムのように階層化されています。

・MenuItemクラス  または、CheckboxMenuItemクラス −> メニュー項目(ファイルに相当)
・Menuクラス −>フォルダーに相当
・MenuBarクラス −>TOPレベル

<メニューの作成手順>
(1)メニューの作成・メニュー項目の追加
(2)メニューバーを作成してメニューを追加
(3)メニューバーのセット

<メニューのイベント処理>
 生成したばかりのメニューは、メニューを選択しても何も起こりません。
 通常は、メニューが選択されたらダイアログを出すなど、なんらかの処理を容易します。
 メニュー項目を選択したときのイベント処理は、action()メソッドで判断できます。
[目次へ]

68.Java.lang.Objectクラス

Java言語では、クラス定義の際、extendsキーワードを使って、明示的に継承するクラスを
示さなかった場合、自動的に、Java.lang.Objectクラスを継承します。
つまり、Java言語のすべてのクラスはObjectクラスのサブクラスであると言えます。

[目次へ]

69.javax.*

javax.*で始まるパッケージは準標準というべきパッケージで、
Option Packageと呼ばれます。
利用するには、インストールが必要となります。
JSP/サーブレット関係のクラスは、このOption Packageの形で提供されます
これらは、通常、Webアプリケーションサーバー付属してます。
[目次へ]

70.JSPの動作原理

[手順]

   @ブラウザからURLにより要求します。
      例示 http://java_xyz.com/Sample.jsp

   AWebサーバは拡張子によりJSPページと判断します。

   BJSPページを実行します。JSPページはコンパイルされサーブレットとして実行されます。
      例示ではSample.jspが呼び出され実行される

   CJSPページの実行結果はHTMLに編集され出力されます。

   DブラウザでHTMLを受け取り表示します。

    JSPを実行させるにはWebサーバにサーブレットエンジンが必要です。
    フリーソフトとしてApacheプロジェクトの開発しているTomcatがあります。

[JSPの特徴]
  
  ・サーブレットへの自動変換 
  ・HTML  コンテンツとロジックの分離 
  ・サーブレットの深い知識がいらない 
  ・簡単に書ける 
  ・ユーザがコンパイルしなくて良い 
  
[目次へ]

71.JSP 学習支援サイト紹介

JSP超入門コース http://www.ae.wakwak.com/~minen/jsp_index.htm

Java Document Archvies (from Sun)(by 琉球大学)

JavaTM Platform 1.1.1 Core API

Java House Mailing List: (->HyperThreads Archive)

Java LINK

うさのJavaScript講座

ITPro Special Developer's Forum for J2EE

日本語でJava

メールマガジン:JavaScript&Javaで目指そう!基本情報技術者試験(略称=Jマガ)第2期目次

Welcome to Suehiro's Homepage
 ここは日本総合ビジネス専門学校等で,情報処理技術者試験対策,Javaを教えている斎藤末広(ジャン)のページです。
いっしょに勉強しましょう。

JavaFAQ : Java に関するよくある質問とその回答集

Programming on Java

IT用語辞典

Java in the Box  Java 2 Platform, Standard Edition, 1.4 で取り入れられた新機能を紹介します。   まだ全容がつかめない J2SE 1.5 コードネーム Tiger をいち早く紹介。

目指せプログラマー Java入門あり

The Jakarta Project ドキュメントの索引(下記参照)

これは、Tomcat 4 Servlet/JSPコンテナのためのドキュメント群へのトップレベルのエントリーポイントです。 Tomcat 4は、Javaソフトウェアのための Servlet 2.3と JavaServer Pages 1.2仕様を実装していて、 WebアプリケーションとWebサービスを開発し、配備するために便利なプラットフォームになるような多くの追加機能を含んでいます。

メールマガジン名: JavaScript&Javaで目指そう!基本情報技術者試験

[目次へ]

72.クラスパス

クラスパスとは、Javaアプリケーションを実行するときに、Java Virtual Machine(Java VM)が
どの“場所”からクラスファイルを読み込めばよいかを、指定するためのものです。 

◆クラスパスの指定方法 

 Java VMにクラスパスを指定するには、Java VMを実行するときに、次のように入力します。

   java  -classpath  <場所> <実行するクラス名> 

実例:
java -classpath C:\test\classes;C:\tmp WordProcessor  

 Java VMは、まず、ディレクトリC:\test\classesを検索し、
もし見つからなければ、次にディレクトリC:\tmpを検索します。
クラスパスを検索した結果、クラスファイルWordProcessor.classが見つかれば、それを実行します。
クラスパスに複数の“場所”を指定するには、“場所”の間を記号“;”(セミコロン)で区切ります。

◆クラスパスに指定できるクラスファイルの“場所” 

Java VMはクラスパスに指定された“場所”から、クラスファイルを検索しようとします。
“場所”には、前節で説明したように、ディレクトリを指定できます。

Java VMでは、ディレクトリ以外にも、ZIPファイルとJARファイルの2種類のファイルを
特別なファイルを“場所”として指定できます。

 ZIPファイルとは、複数のファイルを、1つのファイルにまとめたものです。
Java VMはZIPファイル中のクラスファイルを、読み込むことができます。

JARファイルとは、基本的にはZIPファイルと同じく、複数のファイルを1つのファイルにまとめたものです。
ちなみに、JARとはJava ARchiveの略です(JARファイルには単にファイルをまとめるだけでなく、
ほかにもいろいろな機能があります)。

クラスパスにZIPファイルやJARファイルを指定するには、単にそのファイル名を指定します。
例えば、クラスパスにディレクトリC:\tmpとJARファイルC:\libraries\Library.jarを指定して実行するには、
下記のように入力します。 

java -classpath C:\tmp;C:\libraries\Library.jar <実行するクラス名> 
[目次へ]

73.Java VMがクラスファイルを検索する仕組み

 Java VMは次の順序で、クラスを3段階に分けて検索します。
1.ブートクラスパスを検索する 2.エクステンション(拡張)ディレクトリ中のJARファイルを検索する 3.“クラスパス”を検索する
1. ブートクラスパスを検索する  最初にJava VMがクラスを検索するのが、ブートクラスパスです。 ブートクラスパスには例えば、java.lang.Objectやjava.net.URLClassLoaderやjava.io.OutputStreamなどの、 システム標準クラスライブラリのクラスが含まれます。 2. エクステンション(拡張)ディレクトリ中のJARファイルを検索する  ブートクラスパス中にクラスを発見できなかった場合、 Java VMは次にエクステンションディレクトリ中のJARファイルを検索します。 Javaでは、標準クラスライブラリ以外に、クラスライブラリをシステムに追加するための仕組みが存在します。 これをインストールエクステンションメカニズムと呼びます。 このインストールエクステンションメカニズムで追加するクラスライブラリのJARファイルを置くディレクトリが、 エクステンションディレクトリです。 3. “クラスパス”を検索する  ブートクラスパスにもエクステンションディレクトリにもクラスファイルが存在しなかった場合、 “クラスパス”を検索します。通常のJavaアプリケーションのクラスはこの段階でJava VMに読み込まれます。
[目次へ]

74.クラス修飾子とファイル名の関係

クラス修飾子としてpublicを指定した場合は、ファイル名はクラス名に.javaの
拡張子をつけたものにする必要があります。
public指定されたクラスは、他のパッケージから自由にアクセスできる。
[目次へ][mainメソッドを含むクラスへ]

75.abstractクラス

 クラス修飾子「abstract]
(1)abstract指定されたクラスは「抽象クラス」と呼ばれる。
(2)abstract指定されたクラスは直接使用できない。
(3)abstract指定されたクラスは、これを継承したサブクラスを実行することで、
   間接的に利用される。

 例えば、あるクラスを作成したが、きわめて抽象的なクラスであるので、このクラスを
 利用する場合には、具体的な用途に合わせて、機能を追加させて利用して欲しい場合に
 そのクラスをabstract指定する。
 この、抽象クラスを利用してプログラムを作成する場合は、このクラスを継承した、
 サブクラスにより具体的な機能を追加して使う。

[目次へ]

76.クラスからサブクラスを派生させたくない場合は?

クラス修飾子のfinalを指定する。

これにより、
(1)派生を許さないクラスとなる
(2)クラスの定義(オーバーライド)を変えられなくなる。
[目次へ]

77.内部クラス

(1)内部クラス(インナクラス)は、クラス内で定義されているstaticではないクラス。
(2)内部クラスは、マウスイベントを処理するためのアダプタクラスを定義するために
   用いられることが多い。
(3)内部クラスはコンパイルされると、$がついたバイトコードになる。
   (単純にいえば、ファイル名の中に$が識別子としてはいるということ。)
[目次へ]

78.フィールド宣言

(1)Javaではクラスの中の変数をフィールドと呼ぶ。
(2)フィールド宣言文は、フィールド修飾子、型、変数名宣言から構成される。
   public String s1;
(3)フィールド修飾子のうち、public,protected,privateを
   アクセス修飾子と呼ぶ。
(4)staticでそのクラス内で共通の値を持つ変数を作れる。
(5)変数をfinal指定すると定数扱いとなる。
[目次へ]

79.クラス変数とインスタンス変数と局所変数

<クラス変数>
 クラス固有の状態を表す変数
 クラスがロードされたときに、クラスに1つの領域がとられる。
 クラス変数はnewでオブジェクト(インスタンス)を新たに作成する必要ない。
 
 クラス宣言内での変数宣言時にstaticキーワードを使用した場合、
 その変数はクラス変数として宣言されたことになります。
 また、インターフェース内の変数はstatic指定しなくてもクラス変数
 として扱われます。

<インスタンス変数>
  インスタンス(個々のオブジェクト)の状態を保持する変数
  インスタンスが生成されるときに作られ、オブジェクト毎に別々な領域をもつ。
  インスタンス変数は、クラス変数と異なり、オブジェクト毎に固有の値をもつ変数である。
  
  クラス宣言内での変数宣言時にstaticキーワードを使わない場合に、
  その変数はインスタンス変数として宣言されたことになります。

<局所変数>
  局所変数はブロック内 { }  、又はfor文の中で宣言された変数です。
  局所変数はブロック内 { }  、又はfor文の中でのみ有効な変数です。
  一時的な変数で、ブロック内またはfor文内の処理が終わったら保持していた  
  値は消滅します。

  別な観点から言えば、同じメソッド内において、ブロックが独立されておれば、
  同じ名前の変数(局所変数)を何度でも定義できます。
  

[目次へ][static変数へ]

80.javacコンパイラ・オプション(-deprecation )

すでに使われなくなったクラスやメソッドを使っている場合、
詳しい警告メッセージを表示します。

<実行例>
D:\tokei>javac ClockApplet.java
注: ClockApplet.java は推奨されない API を使用またはオーバーライドしています。
注: 詳細については、-deprecation オプションを指定して再コンパイルしてください。

D:\tokei>javac -deprecation ClockApplet.java
ClockApplet.java:10: 警告: java.awt.Component の size() は推奨されません。
    Dimension d=size();
                ^
警告 1 個
[目次へ]

81.時計、挨拶、在庫管理 簡易なプログラム サンプル

Java 簡易在庫管理システム ソースファイル

時計アプレット 秒針のみ簡易作画 ソース表示 実行表示

あいさつ プログラム ソース(イベント処理)

[目次へ]

82.メソッド宣言

[アクセスレベル][修飾子]戻り値のデータ型 メソッド名(引数リスト) 
  [throws 例外クラス名[,例外クラス名 、、、]]{  }

・アクセスレベル  public,private,protectedを指定
・修飾子      static,final,abstract,synchronizedを指定
・戻り値のデータ型 基本データ型あるいは参照データ型を指定
・メソッド名    任意のメソッド名
・引数リスト    メソッドに渡すデータの型と並び
・throws   メソッドが投げる例外クラス名

[目次へ]

83.バブルソート サンプル

バブルソート 昇順 プログラム サンプル

[目次へ]

84.this,super 使用例

簡単なサンプル・プログラム・ソース

[目次へ][thisへ][superへ]

85.TEXT FILE Input sample

テキストファイルの読み込みサンプル・ソース 

[目次へ]

86.JTextAreaクラスの作成とファイル入出力 サンプル・ソース

テキストファイルからの入力・編集・出力プログラム例

[目次へ]

87.フィボナッチ数列を求める

フィボナッチ数列プログラム・ソース

<実行結果例> D:\fibonacci>java Fibonacci 8 fib(3) = 2 fib(4) = 3 fib(5) = 5 fib(6) = 8 fib(7) = 13 fib(8) = 21 Fibonacci 8 = 21
[目次へ]

88.推奨されていないAPIのケースについて

<コンパイル段階の警告情報>
D:\text_030401>javac -deprecation TextFTest.java

TextFTest.java:27: 警告: java.awt.Component の action(java.awt.Event,java.lang.Object) は推奨されません。
        public boolean action(Event e,Object o) {
                       ^
警告 1 個

<API 調査結果>
 boolean action(Event evt, Object what) 
          推奨されていません。 JDK バージョン 1.1 以降は、このコンポーネントをアクションイベントを
     トリガーするコンポーネントの ActionListener として登録する必要があります。 
 ーーー>次の 89を参照ください。
[目次へ]

89.パスワード入力の例

タイプ中の文字列が他人の目にふれるのを防ぐために、
入力した文字を、下記の関数で、特別な文字に置き換えて表示します。

 setEchoChar('@');

サンプルプログラムのソース

サンプルプログラムのソース(ActionListenerに変更)

[目次へ]

90.Choiceクラスと選択操作例


プログラムソース
[目次へ]

91.コンパイルのエラー例(変数名をミス x->X)


D:\test>javac Threadgreenpea.java
Threadgreenpea.java:31: シンボルを解釈処理できません。
シンボル: 変数 X
位置    : Threadgreenpea の クラス
    if(X+20>d.width || x<0)
       ^
[目次へ]

92.ダブルバッファー

アニメーションのちらつきを防止するために、ダブルバファがあります。
SWINGのコンポーネントは描画時にダブルバファーを使っています。
描画内容をいったん、表示されない別のGraphicsオブジェクト
(オフスクリーンバファとよぶ)にかき、その後バファの内容を画面に一度にコピーします。
こうすると、コンポーネントが順に重なって描かれた最終的な結果だけが、
画面上に描画されるので、効率がよくなります。


プログラムソース

[目次へ] [同じ項目へ]

93.ファイル操作クラスMAP

FileReaderファイルから文字データを読み込む簡易クラス
文字のエンコーディングとバイトバッファのサイズはデフォルト値が指定されている。
サンプルソース
FileWriterファイルに文字データを書き出す簡易クラス
文字のエンコーディングとバイトバッファのサイズはデフォルト値が指定されている。
サンプルソース
BufferedWriter文字を書き出す際にバッファリングを行う。同上
InputStreamReaderバイトストリームからデータを読み込んで、それを指定された文字エンコーディングに従って文字データに変換するためのクラス。キーボードから1行入力例
BufferedReaderバッファリングによって、文字型出力ストリームにデータを効率よく書き出すためのクラス。 同上
FileOutputStreamファイルシステムのファイルに対して
データを出力するためのバイトストリームクラス
バイナリデータ出力・入力例
FileInputStreamファイルシステムのファイルから
データを入力するためのバイトストリームクラス
バイナリデータ出力・入力例
RandomAccessFileファイルシステムのファイルに対して
データを入出力するためのランダムアクセスクラス
ランダムアクセスで更新
[目次へ]

94.マウスイベントの処理でのコンパイルエラー例

MouseListenerインターフェースを使う場合
インターフェースを実装するクラスでは、複数定義されているメソッドすべて定義する必要があります。
未定義メソッドがあるとコンパイルエラーとなる。

マウスリスナーインターフェースのサンプルソース

  D:\>javac MyMouseEvent.java   MyMouseEvent.java:49: MyMouseListenerFrame.MyMouseListener は abstract として宣   言する必要があります。mouseReleased(java.awt.event.MouseEvent) を MyMouseListene   rFrame.MyMouseListener で定義しません。  class MyMouseListener implements MouseListener {  ^   エラー 1 個
[目次へ]

95.ちょっとしたサンプルコードをDOSプロンプトから作りたい。

<ソースファイルの作成>
・プロンプトから、下記をキーインする。   >COPY CON file.java    終了は、 Ctrl + Z
<ソースファイルの編集>
・>startコマンドで起動できるように、エクスプローラで設定する。   「エクスプローラ」−>表示ー>オプションー>ファイルタイプ −>java ファイルを    「編集」して、「アクション」で使用するエディターを設定する。
<ソースファイルの新規作成・編集例>
C:\My Documents>copy con Test.java import java.applet.Applet; import java.awt.*; ^Z 1 個のファイルをコピーしました. C:\My Documents>start test.java
<その他 便利な機能>
・エクスプローラからカレントディレクトリーを直接開く。 ・プロンプト画面の文字列のコピー&ペースト ・DOSKEY機能(コマンド履歴の利用)
[目次へ]

96.J2EEスキルを習得するための前提条件

<J2EEスキルを習得するための前提条件(必須) = Java基礎(基本的なJavaプログラミング)>
オブジェクト指向の概念 カプセル化、継承、ポリモフィズムなど Java言語の文法、基本データ型、クラス、インターフェイスパッケージ Javaプログラムの作成方法、Javaプログラムの動かし方 クラスの作成、コンパイルの仕方、動作原理(JavaVM)、起動方法 java.langパッケージ Stringクラス、Integerクラスなどの基本データクラス java.utilパッケージ Hashtableクラス、Vectorクラス、Collectionインターフェイスなど java.ioパッケージ 標準入出力、ファイル入出力
<必須ではないが、知っておいた方が良い項目>
スレッド間での排他制御(シンクロナイズド)
<J2EEスキルの習得を前提とした場合、直接必要とはならない項目>
GUIアプリケーションを作成するために必要な知識 AWT、Swingなど
<直接利用することはめったにないが、知っておいて損にはならない項目>
スレッドの生成、スレッドの制御 java.netパッケージ
[目次へ]

97.Javaアプレットはどのように実行されますか?

☆ JavaアプレットはWebブラウザに内蔵されているJVM(Java仮想機械)
  によって実行されます。
☆ 異なる環境の上でも、Javaソースプログラムを一旦コンパイルしたバイトコードを
  実行します。

<Webブラウザの動作>
(1)クライアント上のWebブラウザが、URL指定されたWebサーバー上の、
   HTMLファイルの内容を取得して表示する。
(2)そのHTMLファイル内にAPPLETタグがあった場合、
   Webブラウザはサーバー上のJavaバイトコード(クラスファイル)を、
   クライアント側に転送する。
(3)クライアント側のWebブラウザ内のJVMが、転送されてきたバイトコードを
   実行する。
[目次へ]

98.javadoc - Java API ドキュメンテーションジェネレータとは?


Java ソースファイルから API ドキュメンテーションの HTML ページを生成します。 
DOS−コマンドプロンプトから実行します。

javadoc [ options ] [ packagenames ] [ sourcefiles ] [ @files ]

引数の順は任意です。

SUN の関連WEBサイトをここから見れます。

<上記サイトからのハイライト>
JavadocTM は、一連の Java ソースファイルの宣言およびドキュメンテーションコメントを解析し、
デフォルトでは public クラスと protected クラス、内部クラス、インタフェース、コンストラクタ、メソッド、
およびフィールドについて説明した一連の HTML ページを生成します。 

Javadoc は、パッケージ全体、個々のソースファイル、またはその両方に対して実行できます。
javadoc をパッケージ全体に対して実行する場合は、一連のパッケージ名を javadoc に引数として渡します。
個々のクラスに対して javadoc を実行する場合は、一連のソース (.java) ファイル名を渡します。

Javadoc は、実行するたびに 1 つのドキュメントを作成します。 追加生成することはできません。
 つまり、Javadoc の以前の実行結果を修正したり、「直接」組み込んだりすることはできません。
ただし、以前の実行結果にリンクすることはできます。 

実装上の理由から、Javadoc は実行に java コンパイラを必要とし、java コンパイラに依存しています。
Javadoc は javac の一部を呼び出して、宣言をコンパイルし、メンバの実装は無視します。
Javadoc は、クラス階層を含むクラスの豊富な内部表現、および「使用」関係を構築し、そこから HTML を生成します。
Javadoc は、ソースコードのドキュメンテーションコメントから、ユーザの提供するドキュメンテーションも取得します。

<サンプル実行例 : コメントは、/**   */ で指定します>
D:\Lesson11>type Lesson11c.java
import java.applet.Applet;
import java.awt.*;
/** include Button Label Checkbox */
public class Lesson11c extends Applet{

        Button myBtn;
        Label myLbl;
        Checkbox myChk;
/**  init */
        public void init(){
                add(myBtn = new Button(" 私はボタン "));
        add(myLbl = new Label(" 私はラベル "));
        add(myChk = new Checkbox("私はチェックボックス", true));


        }
}

D:\Lesson11>javadoc Lesson11c.java
ソースファイル Lesson11c.java を読み込んでいます...
Javadoc 情報を構築しています...
全パッケージとクラスの階層ツリーを作成しています...
全パッケージとクラスのインデックスを作成しています...
overview-tree.html の生成
index-all.html の生成
deprecated-list.html の生成
全クラスのインデックスを作成しています...
allclasses-frame.html の生成
index.html の生成
packages.html の生成
Lesson11c.html の生成
serialized-form.html の生成
package-list の生成
help-doc.html の生成
stylesheet.css の生成

[目次へ][コメントへ]

99.オブジェクト指向の特徴は?

<オブジェクト>
(1)オブジェクトは「情報の塊」をあらわす。
   オブジェクトは、「意味のある単位にまとめられた情報と処理の実態」
(2)Javaでは、オブジェクトを「インスタンス」と呼ぶことが多い。
(3)オブジェクトにどんな情報が含まれているかを表現するものが「クラス」である。
(4)オブジェクト指向言語のおけるプログラミングの基本は、
   「情報の塊「クラス」を最初に決めて、その後で処理を考える」
   
<クラス、メソッド、隠蔽>
(1)オブジェクト指向では、クラスを定義していくことでプログラミングを行う。
(2)クラスとは、データとデータ操作関数をひとまとめにして定義したものである。
   (カプセル化という)
(3)データ操作の関数をメソッドという。
(4)データの操作はメソッドを介して行うので、外部からの不正な操作は出来ない。
   これを隠蔽という。

<継承、スーパークラス、サブクラス>
(1)例えばラジカセを考える。
   ラジカセはラジオにカセットテープの録音・再生機能を付加したものである。
   つまり、ラジカセは既存のラジオの性質を受け継ぎつつ、新機能を付加してラジカセとしている。
   このように、既存の性質を受け継ぐことを継承という。
(2)このとき、ラジオはスーパークラス、ラジカセはサブクラスといいます。
   オブジェクト指向によるシステム開発はこのように、もとのクラスにない機能を追加する
   という形で行われる。

<カプセル化>
(1)クラス内の変数を、外部から操作されないように遮蔽する仕組みをカプセル化という。
(2)カプセル化することで、効率の高いプログラミングが実現できる
(3)どこまでクラス内を見せるかを設定できる

<派生と継承>
(1)あるクラスを親として他のクラスがつくられることを派生という。
(2)派生によって作られた子クラスが、元の親クラスの変数やメソッドを
   受け継ぐことを継承という。
(3)子クラスのメソッドの定義によって、継承されている親クラスのメソッドの定義を
   かえることを、メソッドのオーバーライドという。
   Javaでは、親クラスと子クラスで同じ名前のメソッドが定義されていた場合、
   子クラスのメソッドが実行されます。

<ポリモルフィズム(多態性)>
(1)ポリモルフィズム(多態性)によって、同じメソッドでも、
   クラスによって動作が違ってくる場合がある。
(2)Javaではメソッドのオーバーライドを利用してポリモルフィズム(多態性)を
   実現している。

[目次へ]

100.the API specification for the Java 2 Platform, Standard Edition, version 1.3.1.

JavaTM 2 Platform, Standard Edition, v 1.3.1
API Specification
This document is the API specification for the Java 2 Platform, Standard Edition, version 1.3.1. 

[目次へ]

101.メインメソッド

(1)メインメソッドは、public static voidで、メソッド名はmainで書く。
(2)メインメソッドの引数は、文字列の配列で、java実行時の引数が格納される。
[目次へ]

102.Java Code Conventions

Java Code Conventions
[目次へ]

103.Vectorクラス

(1)Vectorクラスは、複数の参照型オブジェクトをまとめて扱うことができる。
(2)Vectorクラスは、参照型データしか要素として持てない。
(3)Vectorクラスは、要素の数をあらかじめ決めておかなくて良い。
[目次へ]

104.GregorianCalendarクラス

(1)GregorianCalendarクラスの派生関係
    java.lang.Object
          java.util.Calendar
              java.util.GregorianCalendar

(2)getメソッドで現在の日付を取得できる
(3)getメソッドで取得する月の値は0から11までの値である。

<GregorianCalendarクラスの利用例ソースプログラム、実行結果>
import java.util.GregorianCalendar;
import java.util.Calendar;

public class MyGregorian {
    public static void main(String[] args) {
        // GregorianCalendara型のオブジェクトを宣言。
        GregorianCalendar gre = new GregorianCalendar();

        // GregorianCalencarオブジェクトから値(現在の年月日、時分秒)を取得。
        int year = gre.get(Calendar.YEAR);
        int month = gre.get(Calendar.MONTH)+1; //<--- 月の場合は、+1する必要がある。
        int day = gre.get(Calendar.DATE);
        int hour = gre.get(Calendar.HOUR);
        int minute = gre.get(Calendar.MINUTE);
        int second = gre.get(Calendar.SECOND);

        // 表示
        System.out.println("Year   : "+year);
        System.out.println("Month  : "+month);
        System.out.println("Day    : "+day);
        System.out.println("Hour   : "+hour);
        System.out.println("Minute : "+minute);
        System.out.println("Second : "+second);
    }
}

D:\java2sdk\>java MyGregorian
Year   : 2003
Month  : 6
Day    : 23
Hour   : 10
Minute : 25
Second : 54
[目次へ]

105.-verbose 指定したJAVAコンパイル例

コンパイラーがどのソースファイルをコンパイルしているか、
どのクラスファイルがロードされているかの情報を
コンパイラーとリンカーに表示させる。
<使用ソース>
class Sample008 {
	public static void main(String args[]) {
		System.out.println("Hello Java !");
	}
}

C:\javag500\008>javac -verbose Sample008.java
[Sample008.java を構文解析開始]
[190ms で構文解析完了]
[c:\j2sdk1.4.1_02\jre\lib\rt.jar(java/lang/Object.class) を読み込み中]
[c:\j2sdk1.4.1_02\jre\lib\rt.jar(java/lang/String.class) を読み込み中]
[Sample008 を確認中]
[c:\j2sdk1.4.1_02\jre\lib\rt.jar(java/lang/System.class) を読み込み中]
[c:\j2sdk1.4.1_02\jre\lib\rt.jar(java/io/PrintStream.class) を読み込み中]
[c:\j2sdk1.4.1_02\jre\lib\rt.jar(java/io/FilterOutputStream.class) を読み込み中]

[c:\j2sdk1.4.1_02\jre\lib\rt.jar(java/io/OutputStream.class) を読み込み中]
[Sample008.class を書き込み完了]
[合計 591ms]
[目次へ]

106.javapコマンド クラスファイルから情報を取得

逆アセンブルすることで、クラスファイルの情報を取得する。

C:\javag500\008>javap Sample008
Compiled from Sample008.java
class Sample008 extends java.lang.Object {
    Sample008();
    public static void main(java.lang.String[]);
}
[目次へ]

107.


[目次へ]

108.



[目次へ]

109.What is a Server-Side Include(SSI)?

It’s a Web page with an embedded servlet tag. When the Web page is accessed by a browser, 
the web server preprocesses the Web page by replacing the servlet tag in the Web page 
with the HTML outputed by that servlet. The format for the servlet tag is:

<SERVLET CODE=ServletName CODEBASE=http://server:port/dir
             initParam1=initValue1 initParam2=initValue2>
<PARAM NAME=param1 VALUE=value1>
<PARAM NAME=param2 VALUE=value2>
Text here is displayed by your browser if your Web server does not support SSI.
</SERVLET>

where CODE is the servlet class name or register servlet name, CODEBASE is the location of the servlet,
and PARAM is the request parameter.

The Web page containing the SSI must have a .shtml extension in order to be pre-processed by the Web server.
[目次へ]

110.


[目次へ]

111.Javaの例外処理

例外処理に関連するJava構文には、下記の3つがあります。
 ・try−catch文
 ・throw文
 ・throws文
<try−catch文>
 ・try−catch文は、例外をキャッチして処理したい場所で使用する。
<throw文>
 ・throw文は指定した例外を発生できる。
<throws文>
 ・throws文は、メソッド内で例外が発生した場合にメソッドの呼び出し元に
  例外処理を任せるための文です。
 ・複数の例外をカンマで区切って指定することができる。

[目次へ]

112.Java のバージョンを知りたいのですが?


下記の、javaコマンドで調べることができます。

     java -version
または
     java -fullversion

例えば、Windows 98、JDK 1.3の場合、次のように表示されます。
C:\>java -version
java version "1.3.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24)
Java HotSpot(TM) Client VM (build 1.3.1-b24, mixed mode)

C:\>java -fullversion
java full version "1.3.1-b24"

[目次へ]

113.How does the API support all these kinds of programs?

It does so with packages of software components that provide a wide range of functionality. 
Every full implementation of the Java platform gives you the following features: 
The essentials:
Objects, strings, threads, numbers, input and output,
data structures, system properties, date and time, and so on.
Applets:
The set of conventions used by applets.
Networking:
URLs, TCP (Transmission Control Protocol), UDP (User Datagram Protocol) sockets,
and IP (Internet Protocol) addresses.
Internationalization:
Help for writing programs that can be localized for users worldwide.
Programs can automatically adapt to specific locales and be displayed in the appropriate language.
Security:
Both low level and high level, including electronic signatures,
public and private key management, access control, and certificates.
Software components:
Known as JavaBeansTM, can plug into existing component architectures.
Object serialization:
Allows lightweight persistence and communication via Remote Method Invocation (RMI).
Java Database Connectivity (JDBCTM):
Provides uniform access to a wide range of relational databases.
Others:
The Java platform also has APIs for 2D and 3D graphics, accessibility, servers,
collaboration, telephony, speech, animation, and more.
[目次へ]

114.Javaの歴史

1991年頃……Sun Microsystems社内部で開発スタート 
1995/05 Java発表 Sun Developer's Conference 
1996/03 JDK 1.0.1 リリース 最初のJava 
1996/05  JDK 1.0.2 リリース 発展版 
1996/12  JDK 1.1 発表  実用的な発展版 
1997/02  JDK 1.1 リリース 文字変換、JavaBeans、新イベントモデル 
1998/12  Java2(JDK1.2)リリース Swing、 Java2D、 Accessibility、 Drag&Drop、 コレクション、 IMF など 
1999年夏……JDK1.3 
2000/07  Java2(JDK1.3)リリース J2ME、 J2SE、 J2EE ブランド化、HotSpot が標準 
2003年10月現在…1.4.2_01

JDK1.0…アプレットのための言語(WWWブラウザ上で動くプログラム) 
JDK1.1…アプリケーションへの応用の可能性 
Java2(JDK1.2〜)…アプリケーションへの適用、汎用プログラミング言語
[目次へ]

115.オブジェクトのメンバーへのアクセス

<ピリオド記号>
 生成されたオブジェクトを利用するためには、その内部のフィールドやメソッドのデータを指定する方法が必要になります。
そのために記号 "." (ピリオド)が重要な働きをします。 

Dimension big = new Dimension( 1000, 2000 );
Dimension small = new Dimension( 10, 20 );
int x = big.width;
int y = small.height;

Dimension は java.awt に含まれるクラスで、二次元のサイズを表します。
横幅の値を表す width と 縦方向の高さの値を表す height という名前の int型のフィールドを持っています。
Dimensionクラスのオブジェクトが記憶するサイズの情報を取り出すには、 big.widthのようにピリオドを使用します。 

 記号 "." はフィールドだけでなく、オブジェクトの他のメンバー(メッソド)にアクセスするためにも用いられます。 

Dimension big = new Dimension( 1000, 2000 );
Dimension small = new Dimension();
small.setSize( 10, 20 );
if( big.equals( small ) ) {
           :
           :
Dimensionクラスに定義された setSize()メソッドは、縦横のサイズを同時に設定します。
 equalsメソッドは、2つのサイズが等しいかどうかを判定します。 

[目次へ]

116.メソッド宣言の記述方法

メソッド宣言
[アクセスレベル][修飾子]戻り値のデータ型 メソッド名(引数のリスト)
           [throws 例外クラス名[,例外クラス名...]]
・アクセスレベル: public,private,protected
・修飾子: static,final,abstract,synchronized
・戻り値のデータ型: 基本データ型あるいは参照データ型
   void メソッドのreturnのない、値を戻さないメソッドに指定する。

・メソッド名: 任意のメソッド名
・引数リスト: メソッドに渡すデータの型と並び
・throws:  メソッドに投げる例外クラス名
[目次へ]

117.ソケット通信

Java では、ネットワークを介して他のホストに接続するとき、ソケットと呼ばれるものを使います。
ソケットというのは、もともと「受け口」という意味ですが、ネットワーク用語として使われるときは、
「接続の端点」という意味で使われます。

ネットワーク接続の両端にはソケットと呼ばれるデータの入出力口があり、
ソケットを介して2つのプログラム間でデータをやり取りします。

実際にデータを送ったり受け取ったりするにはストリームが使われます。

Java のソケットクラスには、そのソケットにデータを流し込むための出力ストリームや、
そのソケットからデータを読み出すための入力ストリームが備わっています。
したがってこれらのストリームにデータを入出力することによって、
ファイルやメモリを読み書きするのとまったく同じ方法で、ネットワーク通信を行うことが可能となります。
[目次へ]

118.JavaFAQ サイト紹介

JavaFAQ : Java に関するよくある質問とその回答集

[目次へ]

119.オブジェクト指向プログラミング

オブジェクト指向プログラミングでは、あらかじめ準備してあるクラスを使って、
それを機能拡張するような方法でプログラムを組んでいきます。
例えば、アプレットを作る場合はJavaの Applet クラスのメソッドをオーバーライドして、独自の動作をさせる。 
たとえば、
   描画を変えたいときは、paint メソッドをオーバーライド 
   ボタンが押されたときの動作のときは action メソッドをオーバーライド 
このようなクラスの機能拡張のことを、クラスを継承するといいます。
つまり、既存のクラスを継承して新しいクラスを作りながら、独自のプログラムを開発します。

このような方法は、あらかじめ優れたクラスが提供されればプログラムの開発は楽になりますが、
反面、既存のクラスがどのような機能を持っているかを把握することが重要になります。
paint というメソッドがあることを知らないと、paint をオーバーライドすることができません。

どんなクラスがあり、どんなメソッドがあるかは、Javaの API リファレンスに詳しく載っています。
必要に応じてこれを参照しつつ、Javaのクラスに慣れることが重要となります。

[目次へ]

120.


[目次へ]

やまびとTOPページへ