==========================================================================================================
Learn more about Java Programming : I-ichirow Suzuki
===========================================================================================================
1 Javaとは何か
Java の歴史
Java の特徴
Java の動作環境
2 Java言語の基本
アプリケーションとアプレットの違い
アプレットプログラムの構造
プログラムの作成・実行
Hello World!
フォントの変更
フォントカラーの変更
C 言語との比較
変数の使用
変数を用いた計算
インクリメント
変数のデクリメントとForループ
条件分岐 IF 文字列演算 文字列の結合は + でできる。
3 メソッド
メソッドの使用
メソッド
ifを用いたメソッドの使用例
メソッドの値を返す
メソッドの引数を使用して値を渡す
Javaにはポインタが無い!!
オーバーロード
メソッドのオーバーロード
いくつかの特殊なメソッド
ついでにHTML にアプレットを入れるために必要な属性
アプレットの引数
4 クラスとインスタンス
オブジェクト指向プログラミング
クラスの定義
学生クラスの定義
学生クラスに画面表示用の関数を作成
インスタンスを作る
オブジェクトに値を渡す
コンストラクタ
this キーワードを使う
継承
オーバーライド
5 グラフィックスとオーディオ
Graphics クラス
Font クラス Color クラス
Image クラス
play メソッドと AudioClip クラス
6 アニメーション
repaint メソッド
ちらつきの防止
7 イベント
イベントとは
マウスイベント
マウスモーションイベント
キーイベント
Adapter クラス
8 ユーザインターフェース
基本的な部品
レイアウト
チェックボックス
9 マルチスレッド
プロセスとスレッド
排他制御
待ち合わせ
///////////////////////////////////////////////////////////////////////////////////////////////////////////
1 Java とは何か
◆Java の歴史
1991年6月: Sun Microsystems が Oak インタープリタ(Java の前身)の開発に着手。当初の目的は消費者向け電子機器
の制御用。
1994年9月: WebRunner (HotJava の前身)が開発される。
1995年5月: SunWorld EXPO で発表される。
1996年1月: JDK 1.0版がリリースされる。
言語としてはきわめて新しい。(cf. Fortran 1957年、LISP 1962年、BASIC 1965年、Pascal 1971年、Prolog 1971年、C
1972年、Smalltalk 1972年、C++ 1982年)
◆Java の特徴
バイトコードインタプリタである。--- Java virtual machine のあるところならば、どこでも実行できる。ただし、
最近では Just-in-time Compiler により、機械語に変換しながら実行する方式が普及しつつある。
オブジェクト指向言語である。--- プログラムの開発、再利用が容易。 (ホントか?)
言語仕様が (C++ に比べて) シンプルである。
セキュリティ機能を持っている。--- ダウンロードしたプログラムを安心して使える。
マルチスレッド対応である。--- インタラクティブな処理がしやすい。ただし、ハードウェアや OS の機能に制限され
る。
まったく新しい機能を実現したわけではないが、WWW で必要とされる機能をバランス良く取り込んでいる。
会社で使う会計プログラムなどではCOBOL
科学技術分野の計算処理ではFORTRAN
オペレーティングシステムなどのシステムプログラムを作成する場合にはC/C++
ネットワーク環境に最適な言語はJava
Javaはスタンドアロンプログラムを作成する事も出来るし、WWWブラウザ向けのアプレットを作成する事も出来る
スタンドアロンのJavaプログラムはWWWブラウザ内部では実行できない。
JavaアプレットはMicrosoftInternetExplorerやNetScapeなどのWWWブラウザの内部で実行される
Javaアプレットは特定のデバイスに依存しない。このためWindows/Macintosh/UNIX上でも実行する事が出来る
最終的に生成されるプログラムコードは特定のCPUに依存する。JavaはブラウザのJavaVirtualMachineによってユーザー
プラットフォームのCPUが理解できるバイナリコードに変換される。
アプレットやスタンドアロンプログラムとしてJavaプログラムを作成する為にはJavaコンパイラと呼ばれる特別なプロ
グラムが必要である。
◆Java の動作環境
Java で書かれたプログラムは Java virtual machine (JVM) のあるところならば、どこでも動かすことが出来る。逆
に言うと、JVM がなければ、いくらマルチプラットフォームなJava でも動かすことは出来ない。JVM は Netscape な
どのブラウザにも内蔵されているし、単独のアプリケーションとしても利用できる。
Java のプログラムを作るためには、Java Development Kit (JDK) or Microsoft VisualJ++ が必要である。
◆アプリケーションとアプレットの違い
アプレットは HTML 文書の中から呼び出し、Web ブラウザが実行する Java プログラムである。Netscape などは、HTML
の中にアプレットが含まれていると自動的に実行するので、ネットサーフィンしていると、どこの馬の骨とも分から
ないアプレットをついうっかり実行してしまうことがある。そこで、そのアプレットが悪いことができないように機
能を制限してある。
ファイルアクセスは制限される。
ネットワーク経由で接続できるホストは、そのアプレットがあったホストだけ。
他のプログラムを実行したり、ライブラリをロードしたりすることはで きない。
◆アプレットプログラムの構造
実行が開始されるクラスは、java.applet.Applet クラスのサブクラスでなくてはいけない。ファイルの最初の方に imp
ort java.applet.Applet と書いて、アプレットクラスを使うことを指定する。そして、クラス定義のクラス名の後ろに
extends Applet と書くと java.applet.Applet クラスの持っている機能がこのクラスでも使えるようになる。サブク
ラスについて詳しくは次回以後に説明。
// ------------------------------------------------------------------------------------------
// まとめ
コンパイラ
コンパイラとはプログラミング言語で書かれたプログラムをコンピュータが解る機械語に翻訳し、実行出来る
形にするプログラムの事
インタプリタ
プログラミング言語で書かれたプログラムをコンピュータに解る機械語に通訳し、実行して行くプログラムの
事を言います。
中間言語
Javaはコンパイラ言語ですがJava仮想マシン(Java virtural machine)と言われる架空のCPUの機械語に翻訳
し、それをインタプリタで実行します。
遅い
Javaインタプリタは中間言語をいちいち解釈して実行する為、実行速度が遅くなります。C/C++プログラムよ
りも20倍あるいは100倍以上も遅い訳です。
アプリケーション
C/C++/アセンブリ言語等が作るOS上のコマンドとして実行出来る通常のプログラムに相当する物で、単体で動
かす事を目的にしているプログラムです。
Javaの場合は単体と言ってもJavaランタイム(Javaインタプリタ、JITコンパイラ)が必要です。
アプレット
アプレットは他のプログラムに埋め込んで使う小さなプログラムの事を言います。
HTMLに埋め込んで使う場合が多いです
MicrosoftVisualJ++は本来マルチプラットフォームを期待する事が出来るJavaではありません。あくまでWindowsOSの
上で動作するJavaを基本としています。マルチプラットフォームアプリケーション、又はアプレットを勉強したければJ
DKを使用する事をお勧めします。
1. www.sun.co.jp/java.jp/
で JDKをダウンロードしてインストール
2. Autoexec.batに
Path c:\windows;c:\windows\command;c:\JDK\BIN
と追加記述してPATHを通してください
3. デスクトップ等にフォルダを作成してその中に新規作成にて新規ファイルを作成。
フォルダ名 : Java(自分の好きなフォルダ名でよいです)
ファイル名 : hoe.java(拡張子がjavaであれば何でもよいです)
hoe.javaをテキストエディタで開いて以下のソースを記述して下さい
// hoe.java ---------------------------------------
class hoe
{
public static void main(String args[])
{
System.out.println("Hello Java") ;
} // End main() ;
} // End class
// End hoe.java ------------------------------------
4. フォルダを開いた状態でスタートボタンから「ファイル名を指定して実行」を選択して
command を入力して実行
5. コマンドプロンプトが c:\windows\デスクトップ\Java> になっている事を確認して
javac hoe.java (javac ソースファイル名) と入力してEnterキー <<コンパイルされます
6. エラーを修正 (デバッグ)
7. エラーがなくなったら コマンドプロンプトに java hoe と入力します。(java ファイル名) です
補足・・・
アプレットを作成する場合はHTMLファイルにAppletタグを挿入する必要があります。後ほど説明します
// -----------------------------------------------------------------------------------
作者より一言・・・
1.Javaはオブジェクト指向言語ですが条件判断すら出来ない「史上最低の言語HTML」を保管するためにオブ
ジェクト指向がいるかと言えば明らかに必要ありません。
2.インターネット用言語はBASIC程度の能力の言語(JavaScript, VBScript)で十分です
しかし、Javaでないと出来ない事もあるのも事実です。
3.アプリケーションソフトウェア開発と言う事ならば、はっきり言ってJavaは役立たずです。少なくとも即
戦力にはなりません。今の所ホームページ以外に使うには問題がありすぎます。
4.通常大きなプログラムを作成してもあまり気になりませんがネットワークを使用する事を目的としているJ
avaによって大きなプログラムを作成すれば読み込む度にその大きなプログラムファイルをダウンロードする
事になります。大きなプログラムは現実的ではありません。ファイルサイズは画像レベル同等で考えて下さい
5.今後のJava ?
JavaがOSに変わる物になる
C/C++に変わってプログラミング言語の王者となる
ホームページを強化する為に盛んに使われる
小さなアプレットを作る為に細々と生き残る
使われなくなる
最終 1996年のJava騒動はプログラミング言語市場における最も愚かしい馬鹿騒ぎと評価されるに違
いありません。たかだか家電用言語を転用した言語ですから・・
シェアの小さなOSの生き残りを賭けた短期決戦の捨てゴマでしかありません。
///////////////////////////////////////////////////////////////////////////////////////////////////////////
2 Java 言語の基本
◆プログラムの作成・実行
----------------------------------------------------------------------------------------
◆Hello World!
import java.awt.* ; // C/C++のincludeとおなじ
import java.applet.* ;
public class Applet1 extends Applet { // publicはブラウザがこのクラスにアクセス出来る様にする為の
// アクセス権限の指定
// Javaはヘッダーファイルが無い為Classから始まる
// Appletを作成するのでAppletと記述
// Appletクラスから派生したという意味でextendsを記述
// public クラス名 extends Applet
// Javaはブレス{}でコードをグループ化します。
public void paint(Graphics g) { // paint()関数のGraphicsクラスを使用 変数を g とする
// Javaでは関数をメソッドといいます。
g.drawString("HelloWorld", 5, 25) ;
// drawStringはC/C++のprintf/coutと同じ
// 表示したい文字列を""で囲みます。
// 2つ目3つ目の引数は文字を表示させる為の座標軸を表します。
}
} // End class
上記通り間違いなくタイプして下さい。たまに僕の記述が間違っている事もあります(笑)
行の終わりにはセミコロンが必要です。
出来たらビルドしてコンパイルしてください。クラスファイルが生成されます。
----------------------------------------------------------------------------------------
◆フォントの変更
import java.awt.* ; // C/C++のincludeとおなじ
import java.applet.* ;
public class Applet1 extends Applet { // publicはブラウザがこのクラスにアクセス出来る様にする為の
// アクセス権限の指定
// Javaはヘッダーファイルが無い為Classから始まる
// Appletを作成するのでAppletと記述
// Appletクラスから派生したという意味でextendsを記述
// public クラス名 extends Applet
// Javaはブレス{}でコードをグループ化します。
public void paint(Graphics g) { // paint()関数のGraphicsクラスを使用 変数を g とする
// Javaでは関数をメソッドといいます。
Font font = new Font("Serif", Font.BOLD, 24) ;
// Fontクラスからfontオブジェクトをnew演算子を使って作成し
// ます。フォント名を「セリフ,ボールド、24ポイント」に指定
g.setFont(font) ; // 変数gにフォントをセットします。
g.drawString("HelloWorld", 5, 25) ;
// drawStringはC/C++のprintf/coutと同じ
// 表示したい文字列を""で囲みます。
// 2つ目3つ目の引数は文字を表示させる為の座標軸を表します。
}
} // End class
--------------------------------------------------------------------------------
◆フォントカラーの変更
import java.applet.Applet;
import java.awt.*;
public class Applet1 extends Applet {
Font font = new Font("Times Roman", Font.BOLD, 36); // fontオブジェクトを作成しフォントを指定
public void paint(Graphics g) { // Graphicsクラスからg変数を作成
g.setFont(font); // g変数にフォントをセット
g.setColor(Color.red); // さらにフォントカラーを追加
g.drawString("こんにちは", 5, 50); // 表示
}
}
--------------------------------------------------------------------------------
◆C 言語との比較
コメント
/* ... */ に加えて、// ... も使える。
名前
英字、数字、_(アンダースコア)に加えて、$(ドル記号)、漢字などのユニコード文字も使える。
プリプロセッサ
Java にはプリプロセッサは無い。#include に相当するのは import 文。
変数の型
- 基本データ型 (boolean, byte, short, int, long, char, float, double)
- クラス型、インタフェース型
- 配列型
ポインタ型は Java には無い。クラス型がそれに対応する。
整数型は次のように対応する。
大きさ C Java
------------------------------------
8bit char byte
16bit short short, char
32bit long int
64bit long
------------------------------------
(注1) C の int はマシンによって 16bit または 32bit。
(注2)Java の整数は char を除いて符号付き。
C では真偽値は整数を使って表していた( 0 が偽で、それ以外が真)が、Java では真偽値型は整数型とは異なる。
プログラムの構成
C では関数定義の集合であったが、Java ではクラス定義の集合。クラス定義の中に変数宣言 とメソッド定義がある。
class クラス名 {
変数の型 変数名, ...
返り値の型 メソッド名 (引数の型 引数名, ... ) {
文 ...
}
...
}
pulbic はどこからでも呼び出せるという意味。 static は次回以後に説明。
C のプログラムを Java に書き換える最も安直な方法は、一つのクラスを作り、C の関数をすべて public static 付
きのメソッドとして定義し、それから細かい部分を直すやり方である。
制御構造
ループにラベルを付けて、break や continue でどのループから脱出したり、次の繰り返しに行ったりするかを指定で
きる。
局所変数宣言
ブロック(メソッド定義や for 文などのひとまとまりになっている部分)の中だけで有効な変数。C では先頭でまとめ
て宣言。Java では最初に使う場所で宣言すればよい。
仮引数
メソッド呼び出しの時に、値を受け取るための変数。メソッド名の後ろの括弧の中に型と変数名を組にして書く。
--------------------------------------------------------------------------------
◆変数の使用
import java.awt.* ;
import java.applet.* ;
public class Applet1 extends Applet { // アプレット用のサンプル
int age = 30 ;
String name = "Suzuki" ;
int Salary = "10000" ;
public void paint(Graphics g) {
g.drawString ("Age : " + age, 5, 15) ;
g.drawString ("Name : " + name, 5, 25) ;
g.drawString ("Salary : " + salary, 5, 35) ;
}
} // End class
--------------------------------------------------------------------------------
◆変数を用いた計算
import java.awt.* ;
import java.applet.* ;
public class Applet1 extends Applet { // アプレット用のサンプル
int salary = 10000 ;
public void paint(Graphics g) {
salary = salary - 5000 ; // 悲しい減給の算術計算
g.drawString ("Next Salary : " + salary, 5, 15) ;
}
} // End class
--------------------------------------------------------------------------------
◆インクリメント
import java.awt.* ;
import java.applet.* ;
public class Applet1 extends Applet { // アプレット用のサンプル
int age = 30 ;
public void paint(Graphics g) {
age++ ; // 悲しい年齢のインクリメント
g.drawString ("Age : " + age, 5, 15) ;
}
} // End class
--------------------------------------------------------------------------------
◆変数のデクリメントとForループ
import java.awt.* ;
import java.applet.* ;
public class Applet1 extends Applet {
for (int i = 10; i > 1; i--) { // forの中で変数を宣言 トリッキー!
g.drawString("Line Number : " + i, 5, i * 10) ;
}
}
} // End class
--------------------------------------------------------------------------------
◆条件分岐 IF 文字列演算 文字列の結合は + でできる。
import java.awt.* ;
import java.applet.* ;
public class Applet1 extends Applet {
int TestScore = 85 ;
public void paint(Graphics g) {
if( TestScore > 80 ) {
g.drawString("Your resault : " + TestScore + " OK", 5, 15) ;
} else {
g.drawString("Your resault : " + TestScore + " No One more Challange!", 5, 15) ;
}
}
} // End class
--------------------------------------------------------------------------------
############### 説明省略事項 ###############################
C/C++のBOOL型は Javaでは boolean です。
Not演算子 ! の使い方はC/C++と同じです。
&& 演算子 || 演算子 も C/C++と同じです。
if for switch while break continue もみ〜んな同じなので省略します(笑)
それなに? という方はC/C++のテキストに戻りましょう〜
例外処理
C では配列の範囲を越えてデータを書き込むと、他のデータが壊れてしまったり、エラーを出して止まったりするが、J
ava ではそのような例外的な事態を検知して、例外処理のためのルーチンを実行する仕組みが備わっている。
例外が起きる可能性がある場合は、try ... catch によって例外処理を定義するか、throws によってそのメソッドを
呼び出したプログラムへ例外を通知しなければならない。
try {
String line = d.readLine();
System.out.println("My name is " + line);
} catch (IOException x) {
// 例外処理
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
3 メソッド
◆メソッドの使用
メソッドとは・・・・関数です。
関数とは・・・自分で分岐させたりループさせたりして作成したオリジナル自動実行マクロのようなものです。
BASICではサブルーチンなどです。いろいろと用意しておいて必要に応じて呼び出すことによってさまざまな動作をさ
せる事が出来ます。当然もともと用意(定義)されている関数もあります。必要が無ければ当然書く必要はありません。
--------------------------------------------------------------------------------
◆メソッド
import java.awt.* ;
import java.applet.* ;
public class Applet1 extends Applet {
public void hoe1( Graphics g ) { // hoe1関数を用意
g.drawString("hoe1", 5, 15) ; // 呼び出されるとhoe1を表示
}
public void hoe2( Graphics g ) { // hoe1関数を用意
g.drawString("hoe2", 5, 25) ; // 呼び出されるとhoe2を表示
}
public void paint( Graphics g ) {
hoe1(g) ; // それぞれの関数を呼び出す
hoe2(g) ;
}
} // End class
--------------------------------------------------------------------------------
◆ifを用いたメソッドの使用例
import java.awt.* ;
import java.applet.* ;
public class Applet1 extends Applet {
int TestScore = 60 ; // 単純に君の点数は60点としよう
public void Ok( Graphics g ) { // hoe1関数を用意
g.drawString("良かった合格だ!", 5, 15) ; // 呼び出されるとhoe1を表示
}
public void No( Graphics g ) { // hoe1関数を用意
g.drawString("うひゃ〜だめだった・・", 5, 25) ; // 呼び出されるとhoe2を表示
}
public void paint( Graphics g ) {
if ( TestScore >= 80 ) {
Ok(g) ; // それぞれの関数を呼び出す
} else {
No(g) ;
}
}
} // End class
--------------------------------------------------------------------------------
◆メソッドの値を返す
import java.awt.* ;
import java.applet.* ;
public class Applet1 extends Applet {
public void paint ( Graphics g ) {
g.drawString("5 + 5 = " + AddValue(5, 5), 5, 15) ; //AddValueの引数5,5が下のAddValue()
g.drawString("5 + 15 = " + AddValue(5, 15), 5, 25) ; //に渡されます。
g.drawString("5 + 25 = " + AddValue(5, 25), 5, 35) ;
}
public int AddValue ( int x, int y ) { // 型がintになっている事に注目
// int型で値を返す事を意味
return ( x + y ) ; // 渡された値を処理してreturnで関数
} // 終了後値を返します。
} // End class
--------------------------------------------------------------------------------
◆メソッドの引数を使用して値を渡す
import java.awt.* ;
import java.applet.* ;
public class Applet1 extends Applet {
public void paint ( Graphics g ) {
ShowNumber(g, 100, 15) ; // Paintメソッドのそれぞれの引数に
ShowNumber(g, 9, 30) ; // 値を渡しています。
ShowNumber(g, 4431, 45) ; // 時間をかけて理解してください。
}
public void ShowNumber ( Graphics g, int value, int y) {
g.drawString("The number is : " + value , 5, y) ;
}
} // End class
--------------------------------------------------------------------------------
◆Javaにはポインタが無い!!
Javaのメソッドではクラスオブジェクトや配列による変数についてはその値を呼び出されたメソッド側で変更する事が
可能です。あなたがC/C++言語に精通しているならメソッドの内部で呼出もとの変数の内容を変更する為に、ポインタを
使った事があるでしょう。Javaのクラスオブジェクトや配列変数に対するこの機能は働きとしてはC++言語のポインタを
使った場合と良く似ています。ただし、Javaプログラミング言語では、ポインタはサポートされていません。通常の型で
宣言された変数についてはメソッド側で呼び出しもとの変数を内容を変更する事は出来ません。
◆オーバーロード
同じメソッド名でも、引数の数と型が違っていると、違うメソッドとして扱われる。コンストラクタも同じ。
--------------------------------------------------------------------------------
◆メソッドのオーバーロード
import java.awt.* ;
import java.applet.* ;
public class Applet1 extends Applet {
int AddValues(int a, int b) {
return (a + b) ;
}
int AddValues (int a, int b, int c ) {
return (a + b + c) ;
}
public void paint(Graphics g) {
g.drawString("1 + 2 = " + AddValues(1, 2), 5, 15) ;
g.drawString("1 + 2 + 3 = " + AddValues (1, 2, 3), 5, 30) ;
}
} // End class
--------------------------------------------------------------------------------
◆いくつかの特殊なメソッド
init --- アプレットがブラウザに読み込まれたときに呼 び出される。
public void init() {
// アプレットが起動した直後に呼び出されます。
// 通常変数(フィールド)などの初期化を行います。
}
start --- ブラウザがアプレットを含むページを表示する ときに呼び出される。
stop --- ブラウザが別のページを表示するときに呼び出 される。アニメーションなどを行なうときは、ここで実
行を停めるように設 定しておかないと、CPU やメモリを浪費し続ける。
Thread someThread = null ;
public void start() {
inf (someThread == null) {
someThread = new Thread (this) ;
someThread.start() ;
}
}
public void stop() {
if (someThread != null) {
someThread.stop() ;
someThread = null ;
}
}
destroy --- ブラウザが終了するときに呼び出される。
アプレットが画面に何か表示するのも、ブラウザから呼び出されたとき。
public void destroy() {
if (someThread != null) {
//メモリ上に残っている変数(フィールド)などを開放します
}
}
paint --- ブラウザのウィンドウが何かに隠されてから 再び現れたとき、移動したとき、スクロールしたときなどに
呼び出される。 ただし、window system の設定によっては呼び出されないときもある。
public void paint(Graphics g) {
g.drawString("1 + 2 = " + AddValues(1, 2), 5, 15) ;
g.drawString("1 + 2 + 3 = " + AddValues (1, 2, 3), 5, 30) ;
}
paint メソッドの引数として Graphics クラスのインスタンスが渡される。これはブラウザが作るので、詳しいことは
(とりあえず) 気にしなくてよい。上の例では Graphics 型の変数 g にこのインスタンスが入る。これは、グラフィッ
クスに関する設定と、文字や絵を描くためのメソッドを持っている。このメソッドを呼び出すためには、g.メソッド名
とする。
◆ ついでにHTML にアプレットを入れるために必要な属性
HTML 文書にアプレットを入れるには、
I-ichirow Suzuki _/_/_/_/_/_/_/_/_/_/_
URL : www.kg-group.com Top Page
Mail : suzuki@kg-group.com
/_/_/_/_/_/_/_/_/_/_/_/_ ICQ : 3743158