Java入門講座

 いまやJavaに関する知識を修得するメディアに困ることはありませんが、あえて弊社の研修生が学んだ知識が、時を経て冷めないうちに、新人としてこれから学びたい方々を対象としてに判り易くまとめます。

第 0回 まずは下準備
第 1回 JavaでHelloWorld!
第 2回 文字を扱う
第 3回 数値を扱う
第 4回 配列
第 5回 場合に応じた処理
第 6回 クラスとメソッド
第 7回 修飾子と可視性・変数の種類
第 8回 継承とオーバーライド
第 9回 さまざまなクラス
第10回 例外処理と入出力処理
第11回 独自の例外を記述する
第12回 インターフェース
最終回 Java的プログラミングと課題(報奨あり)

【筆者プロフィール】
菊池昌子(きくち まさこ)
初心者向けパソコン指導やWeb作成請負などを経て泣Aルティスタ(現在のあるてすた)に入社。2006年3月より専属講師の指導下においてJava最新技術を履修した。

Java入門第0回 まずは下準備

■Javaを動かす環境を作る
・拡張子を表示させる
デフォルトの設定ではWindowsは拡張子(.txt、.javaなど何のファイルか示すもの)が非表示になっています。プログラミングをする際には拡張子を意識しますので変更します。
「マイコンピュータ」を開いてメニューバーの「ツール」-「フォルダオプション」をクリック
「表示」タブの詳細設定の中の、「すべてのファイルとフォルダを表示する」にチェック
「登録されている拡張子は表示しない」のチェックを外す
OKで抜けます。
これですべてのファイルの拡張子が表示されるようになりました。

・作業用フォルダを作る
これからJavaのソースファイルやコンパイルしたクラスファイルを作っていきますので保存場所を作っておきます。
ここでは C:\kikuchi\JavaRensyu というフォルダを作りました。
どんな名前でもいいのですが、日本語を使うと後々面倒なので英数字でフォルダ名をつけてください。

・JDKのダウンロードとインストール
http://java.sun.com/j2se/1.5.0/ja/download.html
からJDK 5.0 Update 8(執筆時最新版)をダウンロードします。
ダウンロード画面
ダウンロードしたjdk-1_5_0_08-windows-i586-p.exeを実行し、インストールします。
(デフォルトのインストールフォルダは C:\Program Files\Java\jdk1.5.0_08 になります。)
インストールしただけではjava コマンドを起動するのに
C:\Program Files\Java\jdk1.5.0_08\bin\java
とファイルのフルパスを入力しなければなりません。
(いわゆる「パスが通っていない」状態です)
パスを設定して任意の場所からJavaを実行できるようにします。

・パスの設定
「スタートメニュー」からマイコンピュータを右クリック→プロパティをクリック
「詳細設定」タブの「環境変数」ボタンをクリック
「システム環境変数」一覧の中からPATHを選択、編集ボタンをクリック

;C:\Program Files\Java\jdk1.5.0_08\binを追加

パス設定修正版

・動作確認

「スタートメニュー」-「ファイル名を指定して実行」から「cmd」と入力してコマンドプロンプトを開きます。
(または「すべてのプログラム」-「アクセサリ」-「コマンドプロンプト」)

java -version

と入力
下のようにバージョン情報が出てくればOKです。

java version "1.5.0_08"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_08-b03)
Java HotSpot(TM) Client VM (build 1.5.0_08-b03, mixed mode, sharing)

・コマンドプロンプトの使い方

▲ページの先頭へ戻る

続きを読む

Java入門第1回 JavaでHelloWorld!

■とにかくやってみよう
まずはエディタを開いて下のソースを入力してみましょう。

class Hello{
	public static void main(String[] args){
		System.out.println("Hello World!");
	}
}

すべて半角です。大文字・小文字の区別がありますので注意してください。
入力したらHello.javaと名前をつけて保存します。
・コンパイルと実行
コマンドプロンプトを開き、ソースを保存したディレクトリに移動してコンパイルします。
C:\>cd kikuchi\JavaRensyu

C:\kikuchi\JavaRensyu>javac Hello.java

C:\kikuchi\JavaRensyu>
上のようにエラーが出ずプロンプトが返ってきたらコンパイル成功です。
早速実行してみましょう。
C:\kikuchi\JavaRensyu>java Hello
Hello World!

C:\kikuchi\JavaRensyu>
このように表示されれば成功です。

▲ページの先頭へ戻る

続きを読む

Java入門第2回 文字を扱う

■文字と文字列
エディタを開いて下のソースを入力してみましょう。
class Sample01{
	public static void main(String[] args){
//文字を出力するプログラム
		char a;
		String b;		
		a='あ';
		b="こんにちは";
		System.out.println(a);
		System.out.println(b);
	}
}
実行する前に画面にどう表示されるかちょっと考えてください。
結果は以下のようになります。
C:\kikuchi\JavaRensyu>java Sample01
あ
こんにちは

では順番に解説していきます。

▲ページの先頭へ戻る

続きを読む

Java入門第3回 数値を扱う

■基本的な数値の型
数値を扱う型は基本型(プリミティブ型)と呼ばれます。

型の一覧
型名 サイズ(Bit) 範囲
boolean 1 真(true)と偽(false)
char 16 Unicodeで表現された1文字
byte 8 -128〜127
short 16 -32768〜32767
int 32 -2147483648〜2147483647
long 64 -9223372036854775808〜9223372036854775807
float 32 単精度浮動小数点数
dobule 64 倍精度浮動小数点数

int型の変数iを宣言するには、
int i;
と記述します。
では簡単な計算プログラムを作ってみましょう。

▲ページの先頭へ戻る

続きを読む

Java入門第4回 配列

■同じ型のデータをまとめて扱う
あるテストを5人の人が受けたとしましょう。この5人の得点を表示し、平均点を求めるにはどうしたらいいでしょうか。
//同じ型の変数はまとめて宣言することもできます
int a,b,c,d,e;
a=80;
b=70;
c=88;
d=65;
e=77;

System.out.println("1人目の点数は" + a + "です");
System.out.println("2人目の点数は" + b + "です");
System.out.println("3人目の点数は" + c + "です");
System.out.println("4人目の点数は" + d + "です");
System.out.println("5人目の点数は" + e + "です");

int heikin;
heikin=(a+b+c+d+e)/5
System.out.println("平均点は" + heikin + "点です");

このようにしても間違いではないのですが、ちょっと煩雑です。ソースが複雑になると間違いも起きやすくなりますので、配列を使ってすっきりさせてみましょう。
配列は同じ型の値を連続して格納することができます。

型名 変数名[];
変数名 = new 型名[要素数];

では実際のソースを見てみましょう。
int test[];
test = new int[5];

test[0]=80;
test[1]=70;
test[2]=88;
test[3]=65;
test[4]=77;

System.out.println("1人目の点数は" + test[0] + "です");
System.out.println("2人目の点数は" + test[1] + "です");
System.out.println("3人目の点数は" + test[2] + "です");
System.out.println("4人目の点数は" + test[3] + "です");
System.out.println("5人目の点数は" + test[4] + "です");
1行目、配列の宣言です。配列変数は変数名の後に[]をつけます。
2行目で配列の要素を確保しています。この行で初めてメモリ上にint型5つ分の記憶領域が確保され、testという名前で扱えるようになります。new という演算子で[]の中に指定した数だけの領域を確保できるのです。[]の中の数字を添字と言います。添字は0から始まり要素数-1までですのでこの場合有効な配列は0〜4までです。
得点を表示する部分も同じ処理の繰り返しになっているのが分かります。
「○人目」、「test[×]」の部分が1ずつ増えているだけですね。
これもすっきりさせましょう。
配列は繰り返し処理と組み合わせるとよりコードを簡単に書くことができます。
for(int i=0;i<test.length;i++){
    System.out.println((i+1) + "人目の点数は" + test[i] + "です");
}
1行目はfor文と呼ばれます。「iの初期値が0、iがtest.lengthより小さい間、{}の中の処理を繰り返す。処理をするたびにiを1ずつ増やす」という意味です。1ずつ増やすという意味の++はインクリメント演算子と呼びます。
lengthは配列の長さを返します。test[5]でしたからtest.lengthは5になります。
構文にすると
for(初期化の式;繰り返しの条件式;繰り返し1回ごとの処理)
{繰り返し条件を満たす場合の処理}
となります。

配列の宣言と要素の確保、値の代入は以下のように書くこともできます。

▲ページの先頭へ戻る

続きを読む

Java入門第5回 場合に応じた処理

■制御文
前回の終わりにfor文について簡単に説明しましたが、Javaは他にも条件に応じた処理を行う文が用意されています。これらをまとめて制御文と呼びます。
ここではテストの点数によって評価を表示するプログラムを考えてみましょう。
・if文
テストの点数をkekkaに格納し、70点以上なら「合格」と表示させるにはif文を使います。
if(kekka >= 70){
	System.out.println("合格");
}
System.out.println("終了します");
1行目が条件文です。
ifの後の括弧の中がtrue(真、正しい)のとき、{}のブロックの中の処理を実行します。その後4行目を実行します。
false(偽、正しくない)ときは{}の中は実行せず、4行目に飛びます。

・kekkaが75の時表示結果
C:\kikuchi\JavaRensyu>java Sample04
75
合格
終了します

C:\kikuchi\JavaRensyu>
・kekkaが65の時の表示結果
C:\kikuchi\JavaRensyu>java Sample04
65
終了します

C:\kikuchi\JavaRensyu>
(kekka >=70)がfalseのとき{}の中を実行していないのが分かりますね。

・if〜else文
70点以上は「合格」、それ以外は「不合格」と表示させるにはif〜else文を使います。
if(kekka >= 70){
	System.out.println("合格");
}
else{
	System.out.println("不合格");
}
System.out.println("終了します");
・複数の条件を判断する
では80点以上を「優」、70点以上を「良」、50点以上を「可」、それ以外を「不可」と表示させるにはどう書けばいいでしょう。
2つ以上の条件を判断するにはif〜else if〜文を使います。
if(kekka >= 80){
	System.out.println("優");
}
else if(kekka >= 70){
	System.out.println("良");
}
else if(kekka >= 50){
	Sytem.out.println("可");
}else{
	System.out.pritnln("不可");
}
System.out.println("終了します");
最後のelseは省略可能です。

▲ページの先頭へ戻る

続きを読む

Java入門 第6回 クラスとメソッド

■クラスとメソッド
今回から4回にわたってJavaのクラスについて解説していきます。
Javaでは「ひとつのモノ(オブジェクト)に関する性質や動きはひとつにまとめる」という考えでプログラミングします。これをオブジェクト指向といいます。
ここでは会員管理プログラムを通してオブジェクト指向に触れてみましょう。
・Javaで会員管理
身近なところでレンタルCDショップの会員管理を考えてみましょう。
まず会員登録には名前と住所が必要です。これを変数として宣言すると

String name;
String address;

となります。
これらの変数をそのまま扱うこともできますが、「会員型」とでもいうべきひとまとまりとして扱えると分かりやすいですし便利です。それを可能にするのがクラスです。
まず名前、住所をひとまとまりにしたKaiinクラスを作成し、呼び出してみましょう。
class Kaiin{
	String name;
	String address;
}
1行目、クラス宣言です。書式は

class クラス名{}

です。クラス名は自由に付けることができますが、通常1文字目を大文字にします。
2行目、3行目がクラスの中身(メンバ)です。
名前と住所を表示する機能もクラスにまとめてみましょう。
class Kaiin{
	String name;
	String address;
			
	void Disp(){
		System.out.println("名前:"+ name);
		System.out.println("住所:" + address);
	
	}
}

付け足した部分がメソッドです。Dispがメソッド名、voidはこのメソッドが戻り値を持たないことを示しています。
戻り値の型 メソッド名(引数){}

がメソッドの基本の形になります。
ではこのクラスを呼び出して利用してみましょう。

class Kaiin{
	String name;
	String address;
	void Disp(){
		System.out.println("名前:"+ name);
		System.out.println("住所:" + address);
	}
}
class Sample06{
public static void main(String args[]){
	        Kaiin kihon;
	        kihon = new Kaiin();
	        kihon.name ="Java 花子";
	        kihon.address="千代田区神田佐久間町";
	        kihon.Disp();
	}
}
11行目でKaiin型の変数kihonを宣言し、12行目new演算子でメモリ領域を確保しています。メモリ領域を確保することをインスタンス化と呼び、このクラスの実体をインスタンスといいます。
13行目、14行目でクラスのメンバにアクセスし、それぞれ値を代入しています。
15行目でDisp()メソッドを呼び出し、名前と住所を表示します。
これまで説明してきませんでしたが、main()は特別なメソッドで、Javaを実行すると最初に呼び出されます。
クラスを新しく作っても、コンパイルするときはmain()を含むクラスSample06だけを指定すれば、Kaiinクラスも一緒にコンパイルされます。
結果は以下のようになります。
C:\kikuchi\JavaRensyu>java Sample06
名前:Java 花子
住所:千代田区神田佐久間町

C:\kikuchi\JavaRensyu>

ここでは引数なしのメソッドDisp()を作成し呼び出しましたが、引数を持ったメソッドも簡単に作成できます。

■メソッドのオーバーロード
さらにメソッドの引数の数や型を変えることによって、同じ名前を持つ複数のメソッドを作ることができます。

▲ページの先頭へ戻る

続きを読む

Java入門 第7回 修飾子と可視性・変数の種類

■修飾子とアクセス制御
main()はJavaが実行されると最初に呼び出される特別なメソッドであることは前回簡単に説明しました。
改めてmain()を眺めてみましょう。

public static void main(String args[])

staticがつくとそのメソッドや変数はインスタンスしないで利用することができます。main()は最初に実行されるメソッドなので必ずstatic がつきます。
void は戻り値を持たないメソッドであること、括弧の中は引数ですからString型の配列変数args[]を引数に持つことが分かります。
この引数はいつどのように渡すのでしょうか。
実はStirng args[]はコマンドライン引数といってJavaを実行するとき次のように指定します。

C:\kikuchi\JavaRensyu>java Sample07 2006 09
受け取る側は配列args[]を指定します。
String year;
String month; year = args[0]; month = args[1];
コマンドライン引数を使えばプログラムに簡単に値を渡すことができます。
(ただしString型ですので計算に利用したい場合は他の型に変換する必要があります。)

・アクセスレベルと可視性
public はアクセス制限に関する修飾子で、そのメソッドがどのくらいのアクセス制限をしているかを示します。
publicがついたメソッドはどこからでも自由に利用することができます。
名称 アクセスレベル
public 特にアクセスを制限しない
protected 同じパッケージ内から呼び出すことができる 自クラスを継承したサブクラスから呼び出すことができる
指定なし 同じパッケージ内から呼び出すことができる
private 自クラスからのみ呼び出すことができる
クラスの継承については次回説明します。
補足しますと、パッケージとは同一ディレクトリ内とほぼ同じ意味です。これまで見てきたサンプルソースは特にアクセス制限を付けていませんから同じディレクトリにあるクラスは互いに呼び出すことができます。
例を見てみましょう。
class Kaiin{
	String name;
	String address;
	void Disp(){
		System.out.println("名前:"+ name);
		System.out.println("住所:" + address);
	}
}			
class Sample06{
        public static void main(String args[]){
	        Kaiin kihon;
	        kihon = new Kaiin();
	        kihon.name ="Java 花子";
	        kihon.address="千代田区神田佐久間町";
	        kihon.Disp();
	        Regist info = new Regist();//Sample07.javaで作成したクラスです

	}
}
			
・実行結果
C:\kikuchi\JavaRensyu>java Sample06
名前:Java 花子
住所:千代田区神田佐久間町
会員情報を登録してください

C:\kikuchi\JavaRensyu>
			
特にアクセス制限をかけずどこからでも自由に利用できるというと便利そうですが、実はプログラミング的には好ましくありません。

▲ページの先頭へ戻る

続きを読む

Java入門 第8回 継承とオーバーライド

■Javaの壁?
クラスの基本については理解できたでしょうか。
前回までに作ったクラスをおさらいしてみましょう。
・会員クラス
class Kaiin{
	//フィールドはprivateにしました
	private String name;
	private String address;
	//セッター	
	public void setName(String name){
		this.name = name;
	}
	public void setAddress(String address){
		this.address = address;
	}
	//ゲッター
	public String getName(){
		return name;
	}
	public String getAddress(){
		return address;
	}
	public void disp(){//メソッドはpublicにしました
		System.out.println("名前:"+ name);
		System.out.println("住所:" + address);
	}
	
			
このクラスでは会員情報として名前と住所を持っていますが、新たに電話番号も加えて「名前・住所・電話番号」でひとまとまりとしたい場合はどうすればいいのでしょう。
3つの値を持ったクラスをもうひとつ作成することもできますが、すでに名前と住所のクラスはあるので無駄が多いですね。
Javaではクラスを拡張(extend)することができます。会員クラスを拡張して、電話番号を付け足すことができるのです。 早速ソースを見てみましょう。
class TelNo extends Kaiin{
	private String tel;
	
	public void setTel(String tel){
		this.tel = tel;
		}
	public void telDisp(){
		System.out.println("電話:" + tel);
	}
}

			
1行目に見慣れない単語が出てきました。このように書くと電話番号クラスが会員情報クラスを利用できるのです。
利用される方のクラスをスーパークラス(親クラス)、利用する方のクラスをサブクラス(子クラス)と呼びます。
サブクラスでスーパークラスの機能を引き継ぐことを継承といいます。
書式は

class サブクラス extends スーパークラス

となります。
ではどう動くか見てみましょう。
class Sample10{
	public static void main(String args[]){
		TelNo info;
		info = new TelNo();

		//スーパークラスのメソッドです
		info.setName("Java 花子");
		info.setAddress("千代田区神田佐久間町");
		//サブクラスのメソッドです
		info.setTel("03-3863-7794");
		
		info.disp();
		info.telDisp();
	}
}
			
サブクラスのインスタンスからスーパークラスのメソッドが呼び出されていますね。
サブクラスでは継承したスーパークラスのフィールド、メソッドをすべて扱うことができます。
とかく難しく語られがちなJavaの継承ですが、これだけのことです。
・実行結果
C:\kikuchi\JavaRensyu>java Sample10
名前:Java 花子
住所:千代田区神田佐久間町
電話:03-3863-7794

C:\kikuchi\JavaRensyu>
			
さらに登録年月日も一緒に扱いたくなったとしましょう。

▲ページの先頭へ戻る

続きを読む

Java入門 第9回 さまざまなクラス

クラスライブラリ
これまでクラスやメソッドを作成してきましたが、Javaにはあらかじめ便利なクラスやメソッドが用意されています。
会員管理プログラムで今までは値をソースの中に書いていましたが、キーボードから入力を受け付けるようにしてみましょう。
import java.io.*;
class KeyIO{
	String keyboardIn() throws IOException{
		BufferedReader br =
		 new BufferedReader(new InputStreamReader(System.in));
		System.out.println("文字を入力してください。");
		String str = br.readLine();
		System.out.println(str + "が入力されました。");
		
		return str;
	}
}			
一気に難しくなったように見えますが順番に見ていけば大丈夫です。
一行目、
import java.io.*;
とあります。
これはインポート文と呼ばれる文で、ここでは入出力に関係するパッケージ(java.io.の以下すべてのパッケージ)を読み込んでいます。パッケージとはJavaでよく使うクラスを種類ごとにまとめたものです。
2行目はクラス宣言、3行目メソッド宣言の後、
throws IOException
とあります。
これはこのメソッドが例外IOExceptionを送出(throw)する可能性があることを宣言しています。
つまり、このメソッドはIOExceptionという例外が発生することがありますよ、と宣言しているのです。
例外処理については次回で詳しく解説します。

4,5行目、BufferedReaderクラスの変数brを宣言し、new InputStreamReaderをくるんで(ラップして)インスタンスしています。
InputStreamReaderが呼び出しごとにバイトを読み込み、文字型に変換し、そのたびに復帰するのに対し、BufferedReaderはバッファリングして読み込みますのでBufferedReaderでラップすると効率がよくなります。
System.inというのは標準入力(キーボード入力)をさしています。
System.outが標準出力(ディスプレイへの出力)でしたね。
7行目、
String str = br.readLine();
で、文字列型の変数strにStringBufferedクラスのメソッドであるreadLine()の戻り値を受け渡しています。
readLine()は一行の文字列を読み込むメソッドで、戻り値として読み込んだ一行をStringとして返します。
ここではキーボードから入力された一行(エンターキーが押されるまで)を返します。

・クラスライブラリ
KeyIOクラスはそれ自体がクラスですが、その中でもさまざまなクラスを呼び出しています。
IOException
BufferedReader
InputStreamReader
System
String
などがJavaであらかじめ用意されたクラスです。これらクラスの集まりをクラスライブラリと呼びます。
クラスライブラリを利用することで、「キーボードから値(文字列)を入力し、画面に出力する」というプログラムがたった5行で済むのです。

▲ページの先頭へ戻る


・さまざまなクラス
続きを読む

Java入門第10回 例外処理と入出力処理

■try〜catch文
前回作成したキーボード入力クラスを改良して、会員管理プログラムで登録情報をキーボードから入力できるようにし、さらにファイルに保存できるようにしてみたいと思います。
・throws とthrow
キーボード入力クラスのkeyboardIn()メソッドでは
throws IOException
として例外IOExceptionが送出(throw)される可能性があることを宣言しました。
throws は例外がスローされるとメソッドの呼び出し元に例外処理部分を探しに行きますが、呼び出し元はmain()メソッドなのでプログラムが終了してしまいます。
いわば例外が発生してもほったらかしなわけです。これでは困ります。
例外が発生したら捕まえて(catch)処理できるようにしましょう。
ここでは例外処理の基本的な形であるtry〜catch文で、前回のプログラムを改良します。
その後throws 〜throwについて解説します。

・try〜catch文
try〜catch文はtry{}句で例外をスローする可能性のある部分を囲み、例外が発生したらcatch{}句で例外を受け取り処理し、プログラムに復帰します。
構造は以下のようになります。
try{
	//例外をスローする可能性のある処理
	}catch(キャッチした例外の種類){
	//例外を受け取った場合の処理
}
ではtry〜catch文を使って前回作った「キーボードからの入力を受け付けるクラス」を改良してみましょう。
import java.io.*;
class KeyIO{
String keyboardIn(){
	try{
	        BufferedReader br = new BufferedReader
			(new InputStreamReader(System.in));
	        System.out.println("文字を入力してください。");
	        String str = br.readLine();
	        System.out.println(str + " が入力されました。");	
	        return str;

	}catch(IOException e){
	        System.out.println("例外" + e + "が発生しました");
	}
	}
}
これはエラーになります。
・エラー画面
C:\kikuchi\JavaRensyu>javac Sample11.java
Sample11.java:16: return 文が指定されていません。
Javaのデバッガはreturn文がないですよ、と言っています。
return文がtryブロックの中に入っているので、メソッドの戻り値がない状態になっています。
return文を外に出しましょう。
(略)
	}catch(IOException e){
	        System.out.println("例外" + e + "が発生しました");
	}
	}
return str;
}
これもコンパイルエラーになります。
C:\kikuchi\JavaRensyu>javac Sample11.java
Sample11.java:14: シンボルを見つけられません。
シンボル: 変数 str
場所    : KeyIO の クラス
                        return str;
                               ^
なぜ変数strが見つからないのでしょう?
当連載の第7回を思い出してください。
変数にはクラス変数、インスタンス変数、ローカル変数などがありましたね。
String str = br.readline();
という一文がtryブロックの中に入っているのでstrがローカル変数になってしまっているのです。
これも外に出しましょう。
String str = "";
として宣言と同時に初期化しましょう。
また、「return str;」はfinallyブロックの中に入れてしまう方法もあります。
import java.io.*;
class KeyIO{
	String keyboardIn(){
		String str="";
		try{

		        BufferedReader br = new BufferedReader
				(new InputStreamReader(System.in));
		        System.out.println("文字を入力してください。");
		        str = br.readLine();
		        System.out.println(str + " が入力されました。");	
		}catch(IOException e){
			System.out.println
            ("例外" + e + "が発生しました");
		}finally{
			return str;
		}	
	}
}
これで例外が発生しても止まらないクラスが出来ました。
コンパイルして実行してみてください。

・finally句
finallyは例外が起きても起きなくても必ず実行したい処理を書く部分です。
ファイルのクローズ処理などをここに書きます。
以上を踏まえて、キーボードから入力された文字列をファイルに書き込むクラスを作ってみましょう。
続きを読む

Java入門 第11回 独自の例外を記述する

■throws〜throw
try〜catch文ではJavaがtry{}句の中で例外を見張り、検出したらcatch{}句にスローします。
Javaが検出できるのはExcepcionクラスで定められた例外だけです。
プログラマが「マイナスの数値が入力されたらエラー」と決めても、Javaは判断できません。
プログラマ独自の例外を作ることが出来るのがthrows〜throw文です。
ここではマイナスの値が入力されたらエラーとします。
手順は、
1.独自の例外クラスを作成し、
2.独自の例外が発生する可能性のあるメソッドでthrowsで宣言をし、
3.呼び出し元のクラスで throw を記述する
4.独自の例外がスローされた場合の処理を記述する

では順番に見ていきましょう。
続きを読む

Java入門第12回 インターフェース

■オーバーライドの復習
本連載の第8回でメソッドのオーバーライドについて解説しました。
メソッドのオーバーライドとは、スーパークラスで定義したメソッドをサブクラスで上書きすることでしたね。
Javaにはオーバーライドされることを前提とする機能があります。
それがインターフェースです。
会員管理プログラムを例にとってみましょう。

会員管理プログラムでは、会員クラスを作りました。

class Kaiin{
	        //フィールドはprivateにしました
	        private String name;
	        private String address;
	        //セッター	
	        public void setName(String name){
		       this.name = name;
	        }
	public void setAddress(String address){
		       this.address = address;
	}
	//ゲッター
	public String getName(){
		return name;
	}
	public String getAddress(){
		return address;
	}
	public void disp(){//メソッドはpublicにしました
		System.out.println("名前:"+ name);
		System.out.println("住所:" + address);
	}
}	
			

このデータを加工したり修正したりと様々な処理をしたいとしましょう。
処理ごとにクラスを作りますが、「データを処理する」という点では同じです。
次のソースを見てください。

interface DataSyori {

	void syori();
}
			

1行目、class宣言の替わりにinterfaceという宣言がついています。
中にメソッドは宣言されていますが{}がありません。
実際の処理はこのインターフェースを継承し、サブクラスでオーバーライドして具体的に記述します。

何故このような何もしないメソッドが必要なのでしょうか?
続きを読む

Java入門 最終回 Java的プログラミングと課題(プレゼントあり)

■Javaらしさとは?
本連載では「初めて触る言語としてのJava」として、他の言語との比較は行いませんでしたが、Javaらしいプログラミングとはどういうものでしょう。
それは「パッケージ化」「コンポーネント化」です。
これまでに私たちが作ってきたメソッドと、Javaであらかじめ用意されているメソッドが同じように使えることに気づいていましたか?
String str = "こんにちは";
int i;
i = str.length();
			
			
length()はStringクラスのメソッドですが、私たちはlength()が中でどういう処理をしているのか知らなくても、戻り値として文字数を返すという機能は知っているので使うことができます。
それは自分で作ったプログラムでも言えることです。
キーボード入力クラスを思い出してみましょう。


import java.io.*;
class KeyIO{
	String keyboardIn(){
		String str ="";
	try{
		BufferedReader br = new BufferedReader
			(new InputStreamReader(System.in));
		System.out.println("文字を入力してください。");
		str = br.readLine();
		System.out.println(str + " が入力されました。");
	}catch(IOException e){
		System.out.println("例外" + e + "が発生しました");
	}	
		return str;
	}
}
			
このクラスも前述のStringクラスと同じように、keyboardIn()メソッドが「キーボードから入力した値を文字列として返す」という機能を知っていれば、中でどのような処理が行われているか知らなくても利用できます。
これを「コンポーネント化(部品化)」と呼びます。
部品を組み合わせて大きなプログラムを作っていくのがJava的なプログラミングです。
また、KeyIOクラスでは1行目でjava.io.*というパッケージを読み込んでいます。
java.io.*は入出力に関するクラスを集めたもので、

package パッケージ名;
とすれば自分でも作成することができます。
同じような機能をひとまとめのパッケージにすることを「パッケージ化」と呼びます。


■JSPとServlet
最後にJSPとサーブレットについて簡単に触れておきます。
続きを読む