● Javaに関して ★Javaに関するホームページ SUNのホームページ http://java.sun.com/ JDKの日本語のホームページ http://java.sun.com/products/jdk/1.2/ja/ Java言語仕様 http://java.sun.com/docs/books/jls/html/index.html 田中哲朗先生のホームページ http://www.tanaka.ecc.u-tokyo.ac.jp/~ktanaka/ programming98/index.html ★参考書 Java言語仕様 James Gosling, Bill Joy, Guy Steele(著)・村上雅章(訳): The Java 言語仕様. アジソン・ウェスレイ・パブリッシャーズ・ジャパン. 11,500円 廉価なJava入門書 高橋友一・戸松豊和:Javaで学ぶはじめてのプログラミング. サイエンス社. 1,400円. Javaを用いたアルゴリズムやデータ構造の教科書 Robert Lafore(著)・岩谷宏(訳): Javaで学ぶアルゴリズムとデータ構造. SOFTBANK. 4,800円. ● ナイト・ツアー 《要点》 ★再帰によるバックトラック ★Javaプログラムのコンパイルと実行 《ソース・コード》 ★http://nicosia.is.s.u-tokyo.ac.jp/ pub/staff/hagiya/kougiroku/java/knighttour.java 《Javaに関して》 ★コンパイルと実行 Javaプログラムをコンパイルするには以下のコマンドを用います。 % javac ソース・ファイル名 ソース・ファイル名には.javaも含まれます。 Javaプログラムを実行するには以下のコマンドを用います。 % java クラス名 指定されたクラスのmainメソッド(スタティック・メソッド)が 呼び出されます。 ★クラス Javaのプログラムはクラス定義から成り立っています。 クラス定義は次のような形をしています。 class クラス名 { 変数宣言とメソッド定義の並び } 他のクラスから利用されるクラスの定義には、 publicを付けることがあります。 ★スタティック・メソッド Javaの関数や手続きはメソッドと呼ばれます。 メソッドには、スタティック・メソッドと インスタンス・メソッドがあります。 インスタンス・メソッドはクラスのインスタンスを指定して 呼び出されますが、スタティック・メソッドは インスタンスとは関係なく呼び出されます。 従って、スタティック・メソッドは、CやPascalの関数や手続きと 同じように定義し実行することができます。 スタティック・メソッドは次のように定義します。 static 返り値の型 メソッド名(仮引数の並び) { 文の並び } 他のクラスから利用されるメソッドの定義には、 publicを付けることがあります。 ★mainメソッド mainメソッドは、javaコマンドでクラス名を指定すると 呼び出されるスタティック・メソッドです。mainメソッドは、 public static void main(String[] args) { 文の並び } と定義します。publicは、クラスの外からこのメソッドを 呼び出してもよいことを明示するためのものです。コマンド % java クラス名 引数 引数 ... を実行すると、コマンドの引数が文字列の配列となって mainの引数argsに渡されます。 ★変数 Javaの変数には、スタティック変数、 インスタンス変数(フィールド)、 局所変数、仮引数、などがあります。 ★スタティック変数 インスタンス変数がクラスの個々のインスタンスに 属するのに対して、スタティック変数は インスタンスとは関係なく存在し、 クラスに属すると考えられます。 従って、スタティック変数はCやPascalの大域変数に相当します。 スタティック変数は次のように宣言されます。 static 型 変数名; static 型 変数名 = 初期値; スタティック変数を、そのクラスの外で参照するには、 クラス名.スタティック変数 とします。 ★局所変数 局所変数はメソッドに局所的な変数です。 メソッドの中で次のように宣言します。 型 変数名; 型 変数名 = 初期値; メソッドの仮引数もメソッドに局所的な変数です。 ★型 型はデータの種類を表します。 このプログラムでは、以下のような型が用いられています。 int 整数 boolean ブール値 int[] 整数の配列 int[][] 整数の配列の配列(整数の二次元の配列) boolean[] ブール値の配列 boolean[][] ブール値の配列の配列(ブール値の二次元の配列) String 文字列 String[] 文字列の配列 void 手続きの返り値 ★式 このプログラムでは、以下のような種類の式が用いられています。 スタティック変数 局所変数 代入 算術式 ブール式 スタティック・メソッドの呼び出し ★代入 代入も式の一種です。代入は次のような形をしています。 変数 = 式 もちろん、配列の要素なども代入の対象となります。 配列[式] = 式 配列[式][式] = 式 ++は変数の値を1だけ増やす演算子で、 変数++ は、 変数 = 変数 + 1 とほぼ等価です。 ★スタティック・メソッドの呼び出し 同じクラスのスタティック・メソッドを呼び出すには、 メソッド名(実引数の並び) とします。クラス名を指定してスタティック・メソッドを 呼び出すには、 クラス名.メソッド名(実引数の並び) とします。 ★文 このプログラムでは、以下のような種類の文が用いられています。 式文 if文 for文 break文 ★式文 式に;を付けると文になります。 式; ★if文 if文は条件に従って実行を表します。 if (ブール式) 文 if (ブール式) 文 else 文 ★for文 for文は繰り返し実行を表します。以下は典型的なfor文です。 for (int i = 0; i < 100; i++) a[i] = 0; この場合、iは0から始まり、i<100の間、a[i]=0;という文が 繰り返し実行されます。実行される度に、iは1ずつ増やされます。 なお、iはこのfor文に局所的な変数です。 一般にfor文は次の形をしています。 for (初期化; 継続条件; 更新) 文 これは、while文を使って次のように書き換えることができます。 初期化; while (継続条件) { 文; 更新; } なお、while文もfor文も、継続条件を最初にチェックし、 もしそれが成り立たなければ、文を一度も実行しません。 ★break文 break文は、for文やwhile文から飛び出すための文です。 break; ★出力 端末への出力を行なうために以下のようなメソッド呼び出しが 用いられています。 System.out.print(式) System.out.println(式) System.out.println() 式の型はintやStringです。 printlnは、出力の後で改行します。 ● ナイト・ツアーのアプレット 《要点》 ★簡単なアプレットの作成と実行 《ソース・コード》 ★http://nicosia.is.s.u-tokyo.ac.jp/ pub/staff/hagiya/kougiroku/java/knighttourapplet.java ★http://nicosia.is.s.u-tokyo.ac.jp/ pub/staff/hagiya/kougiroku/java/knighttour.html 《Javaに関して》 ★アプレットの実行 アプレットを実行するには、 % appletviewer HTMLファイル名 とします。HTMLファイル名には.htmlも含まれます。 もちろん、Netscapeなどを用いて実行することもできます。 ★アプレットの定義 アプレットは、java.applet.Appletというクラスの サブクラスとして定義されます。従って、アプレットの定義は、 public class アプレット名 extends java.applet.Applet { 変数宣言とメソッド定義の並び } という形をしています。 このプログラムでは、アプレットのメソッドとして、 initとpaintを定義しています。 ★式 このプログラムでは、以下のような種類の式が新たに用いられています。 クラス名.スタティック変数 クラス名.スタティック・メソッドの呼び出し フィールド インスタンス・メソッドの呼び出し ★グラフィックス このプログラムでは、グラフィックスに関して、次のような メソッドやフィールドが用いられています。詳しくは、 プログラム中の解説を参照してください。 init paint drawLine getSize width height ● 土人と宣教師 《要点》 ★状態の表現 ★状態の探索 《ソース・コード》 ★http://nicosia.is.s.u-tokyo.ac.jp/ pub/staff/hagiya/kougiroku/java/mc.java 《Javaに関して》 ★インスタンス インスタンスは、クラスのインスタンス変数をフィールドとして 持つ構造体です。オブジェクトとも呼ばれます。 個々のインスタンスは、それを識別する番号で参照されます。 (といっても、具体的な番号を知ることはできません。) クラス名は型でもあります。クラス名を型とする変数は、 そのクラスのインスタンス(の番号)を値として持ちます。 ★フィールド(インスタンス変数) フィールドは、個々のインスタンスごとに異なる値を 取ることができます。インスタンスを指定して フィールドを取り出すには、 式.フィールド という式を用います。式の値がインスタンス(の番号)です。 インスタンス・メソッドの中では、 フィールドを変数(インスタンス変数)として 用いることができます。これは、 this.フィールド と等価です。 ★コンストラクタ コンストラクタは、クラスのインスタンスを初期化するための メソッドです。次のように定義します。 クラス名(仮引数の並び) { 文の並び } ★インスタンス・メソッド インスタンス・メソッドは、インスタンスを指定して呼び出す メソッドです。次のように定義します。 返り値の型 メソッド名(仮引数の並び) { 文の並び } ★式 このプログラムでは、以下のような種類の式が新たに用いられています。 null new this フィールド インスタンス・メソッドの呼び出し ★null nullは、インスタンスが無いことを表す値です。 クラス名を型とする変数は、 nullを値として持つことができます。 ★new newは、インスタンスを生成します。次のように用います。 new クラス名(実引数の並び) 新しいインスタンスが作られ、 対応するコンストラクタが呼び出された後、 新しいインスタンス(の番号)が返されます。 ★this インスタンス・メソッドの中で、thisは、 インスタンス・メソッドが呼び出された インスタンス(の番号)を表します。 ★インスタンス・メソッドの呼び出し インスタンスを指定してメソッドを呼び出すには次のようにします。 式.メソッド名(実引数の並び) 式の値がインスタンス(の番号)です。 インスタンス・メソッドの中から、同じインスタンスに対して メソッドを呼び出すには、 メソッド名(実引数の並び) とすることができます。これは、 this.メソッド名(実引数の並び) と等価です。 ● 項と演繹 《要点》 ★項の表現 ★項の入出力 ★マッチング ★前向きの演繹 《ソース・コード》 ★http://nicosia.is.s.u-tokyo.ac.jp/ pub/staff/hagiya/kougiroku/java/term.java ★http://nicosia.is.s.u-tokyo.ac.jp/ pub/staff/hagiya/kougiroku/java/deduction.java 《Javaに関して》 ★サブクラス 既に定義したクラスに、変数やメソッドを付け加えることによって、 新しいクラスを定義することができます。このようなクラスを サブクラスと呼び、もとのクラスをスーパークラスと呼びます。 また、サブクラスを定義する仕組みをインヘリタンスといいます。 サブクラスは以下のように定義します。 class サブクラス名 extends スーパークラス名 { 変数宣言とメソッド定義の並び } ★アブストラクト・クラス 直接的にはインスタンスを作らず、 サブクラスを定義し、サブクラスのインスタンスを作るような クラスのことをアブストラクト・クラスといいます。 アブストラクト・クラスを定義する場合は、 abstract classで始めます。 abstract class クラス名 ... ★アブストラクト・メソッド スーパークラスでは定義されず、 サブクラスで定義されることが期待されるメソッドを アブストラクト・メソッドと呼びます。 スーパークラスの中で以下のように宣言します。 abstract 型 メソッド名(仮引数の並び); アブストラクト・メソッドを持つクラスは、 アブストラクト・クラスでなければなりません。 ★型 このプログラムでは、以下のような型が新たに用いられています。 char 文字 ★式 このプログラムでは、以下のような種類の式が新たに用いられています。 キャスト ★キャスト キャストは、ある型の値を別の型の値に変換するための式です。 (型)式 特に、サブクラスのインスタンスを スーパークラスのインスタンスとみなしたいときに 用いることができます。 ★文 このプログラムでは、以下のような種類の文が新たに用いられています。 while文 throw文 ★while文 while文は次の形をしています。 while (ブール式) 文 ブール式が成り立つ間、文が繰り返し実行されます。 まず最初にブール式がチェックされます。 このときブール式が成り立たなければ、 文は一度も実行されません。 ★throw文 throw文は、例外を発生するための文です。 throw 例外のインスタンス; 例外が発生する可能性がある場合、メソッドは、 型 メソッド名(仮引数の並び) throws 例外の並び { 文の並び } と宣言しなければなりません。 ★入力 このプログラムでは、入力に関して、以下のようなクラスが 用いられています。詳しくは、プログラムの解説を参照してください。 Reader InputStream InputStreamReader StringReader StreamTokenizer ★出力 このプログラムでは、出力に関して、以下のようなクラスが 用いられています。詳しくは、プログラムの解説を参照してください。 PrintStream