サイトロゴ
この章で行う学習内容
 

API
java.langパッケージ
java.langパッケージはシステムの動作に必要となるクラス群が格納されています。
このパッケージは自動でimportされる為、各クラスについてはimport文なしで
使用できます。

java.langパッケージのクラスとして、以下のようなものがあります。
No クラス
1 java.lang.String
2 java.lang.StringBuffer
3 java.lang.Integer
4 java.lang.Exception
java.lang以外のパッケージ
java.lang以外のパッケージに格納されている各クラスついては、
明示的にimport文を追加しないと使用できません。

java.lang以外のパッケージとしては、以下のようなものがあります。
No パッケージ
1 java.util
2 java.io
3 java.text
例文(java.lang以外のパッケージ)
								//① パッケージ内のクラス単位でimportする場合
								import java.util.GregorianCalendar;
								import java.io.File;
								//☆importしたクラスのみしか使用する事は出来ない
								public class Test {

									public static void main(String args[]) {
										//インスタンスの生成
										GregorianCalendar calendar = new GregorianCalendar();
										//インスタンスの生成
										File file = new File("a.txt") ;
									}
								}
							
								//② パッケージ全体をインポートする場合
								import java.*;
								import java.io.*;
								//☆importしたパッケージ内の全クラス使用可能
								public class Test {

									public static void main(String args[]) {
										//インスタンスの生成	
										GregorianCalendar calendar = new GregorianCalendar();
										//インスタンスの生成
										File file = new File("a.txt") ;
									}
								}
							
importする際の注意点
importの方法として2種類紹介しましたが、②に関しては、内部で利用しているクラス
が把握しずらいといった点から推奨されていません。ですので、面倒でもimportする際
は①の方法のように使うクラスのみimportするようにしてください。
 

カレンダー
カレンダークラスとは
ここでは、カレンダークラスについて説明します。
このクラスを使うと自由に見たいカレンダーを表示することが出来ます。
その方法をここで紹介します。

calendarクラス、gregoriancalendarクラス
このクラスは、日付を扱う為のクラスで世界のほとんどの地域で使用される標準的な
カレンダーを使う事が出来ます。また、これらのクラスはjava.utilパッケージに入ってます。
カレンダークラスのフィールド
year(年を表すフィールド) month(月を表すフィールド) date(日を表すフィールド) day_of_week(曜日を表すフィールド
曜日は日曜日が1で、後は連番で1づつ増えていきます。
日曜:1、月曜:2、火曜:3 ・・・ 土曜:7
カレンダークラスのフィールドの注意点
フィールドの変数は全て大文字で書かれているので、定数として扱われる。
ここで紹介したフィールドは全てstaticなフィールド。
という事は、呼び出し方に気をつけなければいけない。
カレンダークラスのメソッド
setメソッド
カレンダーに年月日を設定する際に使用するメソッド
								import java.util.GregorianCalendar;
								import java.util.Calendar;


								public class CalendarSample {
									public static void main(String args[]) {
										//GregorianCalendarクラスのインスタンス生成
										GregorianCalendar calendar = new GregorianCalendar();
										//setメソッドを使用し年月日をセット
										calendar.set(2007, 2-1, 1);
										//	↑
										//カレンダークラス内では1月を0月と表現するため
										//月を入れる時に設定したい月-1の数値を入れないといけない 
							
カレンダークラスのメソッド
getメソッド
カレンダーに設定されている年月日を取得する際に使用するメソッド
								import java.util.GregorianCalendar;
								import java.util.Calendar;


								public class CalendarSample {
									public static void main(String args[]) {
										//GregorianCalendarクラスのインスタンス生成
										GregorianCalendar calendar = new GregorianCalendar();
										//setメソッドを使用し年月日をセット
										calendar.set(2007, 2-1, 1);
										//設定されている月を取得
										int month = calendar.get(Calendar.MONTH) + 1;
										//	↑
										//設定する際に、「設定したい月-1」の数値を入れているので、
										//月を取得する際はプラス1する必要がある。 
							
【ポイント】
年月日の設定処理が無い場合
(setメソッドの処理が無い場合
にgetメソッドを使って値を取得した場合は、現在日付(PCで
設定している日付)が取得出来る。
カレンダークラスのメソッドの注意点
カレンダークラスは1月を0月と認識するので、カレンダークラスに月を設定する際は、
「設定したい月-1」の数値をsetメソッドで設定する必要がある。
「設定した月-1」の数値を設定しているので、カレンダークラスから月の値を取得した際
は、「取得した月+1」する必要がある。
setメソッドで何も設定しない場合に、カレンダーの値を取得すると、
pcに設定されているカレンダーの値(現在日付)を取得する事が出来る。
例文(カレンダークラスサンプル)
								import java.util.GregorianCalendar;
								import java.util.Calendar;

								public class CalendarSample {
									public static void main(String args[]) {
										int yearSet = 2007;
										int monthSet = 2;
										int dateSet = 1;
										//カレンダーに設定するための変数宣言

										//GregorianCalendarクラスのインスタンス生成
										GregorianCalendar calendar = new GregorianCalendar();
										//setメソッドを使用し年月日をセット
										calendar.set(yearSet, monthSet-1, dateSet);
										//インスタンスを生成し、宣言した変数をカレンダーに設定します。

										//設定されている年を取得
										int year = calendar.get(Calendar.YEAR);
										//設定されている月を取得
										int month = calendar.get(Calendar.MONTH) + 1;
										//設定されている日を取得
										int date = calendar.get(Calendar.DATE);
										//設定されている日の曜日を取得
										int week = calendar.get(Calendar.DAY_OF_WEEK);
										//カレンダーに設定されている値を取得
							
 

例外処理
例外処理とは
例外処理とは、例外が発生した場合に現在の処理を中断して行う処理を言います。
例外とは、プログラムがある処理を実行している途中で、何らかの異常が発生することを言います。
今まで、色々なエラーを見てきたと思いますが、実はそれらが例外になります。

「exception in thread "main" java.lang.arrayindexoutofboundsexception: 3
at sampleexception.main(sampleexception.java:10)

配列のエラーが発生した場合、上記のようなエラーメッセージが表示されていました。
この配列のエラーに対して「配列のエラーが発生しました」などと任意のメッセージを
表示させる事が出来るのが、ここで学ぶ例外処理になります。
配列のエラーが発生しました
例外処理  try/catch/finally
Javaの例外処理はtry / catch / finally で表現されます。
構文
								try {
									//例外が発生する可能性のある処理
								} catch ( 発生し得る例外クラスの型  変数名 ) {
									//カレンダーに設定されている値を取得

								//この例外が発生した場合に実行する処理
								} finally {
									//カレンダーに設定されている値を取得

									//例外が発生してもしなくても実行される処理
								}
							
例文
								try {
									int[ ] array = new int[ 1 ];
									array[ 0 ] = 1;
									System.out.prinltn( "処理終了" );
								} catch ( ArrayIndexOutOfBoundsException ae ) {
									//ここでエラーが発生するので、発生した例外に対応する処理をcatchに記述する。

									//System.out.println( "要素数以上の指定をしました。" );
								} catch ( Exception e ) {
									//ArrayIndexOutOfBoundsException以外の例外が発生した場合はこのcatchでエラーを受け取ります。
									e.printStackTrace( );
								} finally {

									System.out.println( "finallyブロックを実行します" );
								}
							
実行結果
									要素数以上の指定をしました。
									finallyブロックを実行します。
								
Exception
すべてのexceptionの親なので、すべての例外をcatchする
事が出来ます。 ですので、catchに記述する順番も気を付けなければなりません。

下の例文では、catchが2つ記述されていて、
下のcatchにExceptionが宣言されていましたが、
これを上下逆に記述するとどうなるでしょうか?
どうなるかは、下の例文で説明しますので、
今は置いときますが、catchを複数記述する場合の注意点として、 子供のExceptionから順に上から記述しなければなりません。
								try {
									int[ ] array = new int[ 1 ];
									array[ 0 ] = 1;
									array[ 1 ] = 0;
									System.out.prinltn( "処理終了" );

								} catch ( Exception e ) {

									//ここで全ての例外がキャッチされてしまう

									//System.out.println( "エラーが発生しました。" );

								} catch ( ArrayIndexOutOfBoundsException ae ) {

									System.out.println( "要素数以上の指定をしました。" );

								} finally {

									System.out.println( "finallyブロックを実行します" );
								}
							
例外処理  親子関係の見方
Exceptionの親子関係を確認するには、apiを確認するのが一番です。
ArrayindexoutofboundsExceptionクラスを例にすると、上記の
ような階層になっていることが確認できます。上が親になり下に行くほど
子供になるという事になります。このように各Excepitonを確認すること
で、親子関係がわかるようになります。
例外処理  throw/throws
明示的に例外を発生させる場合は throw を使用します。 throw は言葉通り「投げる」という意味で、例外を発生させたい場合に使用します。
メソッドの呼び出し元に例外を通知したい場合は throws を使用します。 throws の後には発生する可能性がある例外を記述します。
例文
Exceptionは全ての例外をキャッチ出来るクラスです。
以下のようなプログラムは正しくありません。
								int age = -1;
								public void setAge( int age ) throws Exception {
								//↑カンマ区切りで複数記述可
									if ( age < 0 ) {
										throw new Exception( "入力した年齢は不正です。" );
									}
									this.age = age;
								}

							
例外処理  printStackTraceとgetMessage
printstacktraceメソッドとgetmessageメソッドとは、 エラーの内容を表示してくれるメソッドでどのexceptionから も呼び出せるメソッドになります。
printstacktraceメソッド
・エラーの詳細な説明を表示する事が出来る
exception in thread "main" java.lang.arrayindexoutofboundsexception: 3
at sampleexception.main(exceptionmethodsample_1.java:18)


getmessageメソッド
エラーメッセージのみ表示することが出来る
3
例外処理  printStackTraceとgetMessage
例外処理の取得方法がprintStackTraceメソッドとgetMessageメソッドを使用した方法です。
例文
								throw new Exception(“入力した年齢は不正です。”);

								}catch(Exception e){
									e.printStackTrace();
								}
								}catch(Exception e){
									System.out.println(e.getMessage());
								}

							
上記のようにプログラムする事で、「入力した年齢は不正です。」 とエラーメッセージが表示されることになります。
 

ファイル入出力
ファイル入出力とは
ファイル入出力とは、javaを使ってファイルに情報を書き込んだり、 ファイルに書かれている情報を読み込んだり出来る処理になります。 尚、ここで言うファイルというのは、皆さんが普段から馴染みのあるテキストファイルや 拡張子がxlsのエクセルファイルなどの、ファイル全般の事を指します。

javaを使ってファイルから情報を読み込むことを、入力と言います。

javaを使ってファイルに情報を書き込むことを、出力と言います。

ファイル → 入力 → java → 出力 → ファイル
ストリームとは
ファイル入出力では、ストリームという概念を使います。
ストリームとは、簡単に言うとデータの流れになります。
ファイル入出力で使用するクラス
ファイル入力の際に使用するクラス
・Fileクラス
・FileReaderクラス
・BufferedReaderクラス

ファイル出力の際に使用するクラス
・Fileクラス
・FileWriterクラス
・BufferedWriterクラス

これらのクラスは、java.ioパッケージにありますので、各自apiで確認してみて下さい
例文(ファイル入力)
								File file = new File( "sample.txt" ) ;
								FileReader fr = new FileReader( file ) ;
								BufferedReader br = new BufferedReader( fr ) ;
								while(br.ready(){ ①
									String str = br.readLine(); //②
									System.out.println(str); //③
								}

							
①while文を使用して、データがある分ループさせてます。
ここでは、バッファに格納されているデータに対して1行
づつデータがあるかどうかの判定をしています。データが
無ければfalseが返されるので、ループを抜けることになります。

②1行文のデータをstring型の変数に格納。
③②で読み込んだデータを表示。

【バッファに一時的にデータを格納する理由】
バッファに格納しない場合、一文字づつ読み込むため能率的
ではありません。
そのため一時的にデータを格納し1行づつ読み込むため、
バッファに格納します。
1行づつ読み込めばその分能率的になるという事です。
ファイル入出力 入力のまとめ
ファイル入力で必要なクラスは、
fileクラス
filereaderクラス
bufferedreaderクラス

・上記3つのクラスは、java.ioパッケージに入っているため、使用するときはインポートが必要。
・ストリームとは、データの流れの事を言う。
・データを読み込む際は、能率的にするためデータをバッファに格納し、1行づつ読み込む。
・インスタンスを生成した順番と逆の順番でクローズ処理を行う。
・必ずclose処理を行いたいので、finallyで括ってclose処理
 を行う
ファイル入出力 出力
ファイル出力の際に使用するクラス ・Fileクラス
・FileWriterクラス
・BufferedWriterクラス

・上記3つのクラスは、java.ioパッケージに入っているため、使用するときはインポートが必要。
・ストリームとは、データの流れの事を言う。
・データを読み込む際は、能率的にするためデータをバッファに格納し、1行づつ読み込む。
・インスタンスを生成した順番と逆の順番でクローズ処理を行う。
・必ずclose処理を行いたいので、finallyで括ってclose処理を行う
例文(ファイル出力)
								File file = new File( “sample.txt” ) ;
								FileWriter fw = new FileWriter( file ) ;
								BufferedWriter bw = new BufferedWriter( fw ) ;
								bw.write( “ aiueo “ ) ; ----- ①
								bw.close(); ----- ②
								fw.close(); ----- ③
							
①writeメソッドを使用し、引数に書き込みたい文字列を渡す。
②③ closeメソッドを使用し、filewriterクラスと
bufferedwriterクラスを閉じています。

※bw.close()の処理で、書き込みが完了するので、
必ず記述するようにしてください。

【クローズする際の注意点】
・インスタンスを生成した順番と逆の順番でクローズ処理を行う。
・必ずclose処理を行いたいので、finallyで括ってclose処理を行う
z
ファイル入出力 出力のまとめ
ファイル出力で必要なクラスは、
  fileクラス
  filewriterクラス
  bufferedwriterクラス

・上記3つのクラスは、java.ioパッケージに入っているため、使用するときはインポートが必要。

・データを書き込む時は、close処理が行われて初めて書き込みが完了するので、必ずclose処理を記述するようにする。

・インスタンスを生成した順番と逆の順番でクローズ処理を行う。

・必ずclose処理を行いたいので、finallyで括ってclose処理を行う
 

プロパティファイル
プロパティファイルとは
プロパティファイルとは「キー = 値」の形で構成された、 拡張子が「properties」のファイルです。
rjc.message = Welcome To RJC
rjc.url = http://www.r-jc.jp/
キーを指定することで値を読み込んだり、書き込んだりすることが出来ます。
メリット
プロパティファイルには、主に設定値が書かれていて、プログラムを再度コンパイル しなくても処理を変えることが出来るというメリットがあります。
プロパティファイル入力
プロパティファイル入力の際に使用するクラス
  ・Propertiesクラス ( java.utilパッケージ )
  ・FileInputStreamクラス ( java.ioパッケージ )
例文
								FileInputStream fis = new FileInputStream(“rjc.properties”);
								Properties prop = new Properties(); ---- ①
								prop.load(fis) ; ----②
								String message = prop.getProperty( "rjc.message" ) ; ----③
								System.out.println( message ); ----- ④
							
① propertiesクラスのインスタンスを生成
② インスタンスを使用して、loadメソッドを呼び出す。
  プロパティファイルの情報を持っている
   fileinputstreamクラスのインスタンスを渡す事で、
  指定したプロパティファイルを読み込む。
③ getpropertyメソッドを使用し、引数にプロパティファイルで
  設定されているキーを指定。
  これによりキーに紐付く値を取得する事が出来る。
④ 取得したプロパティファイルの値を表示
表示結果
 Welcome To RJC	 
							
プロパティファイル入力 まとめ
・プロパティファイル入力で必要なクラスは、
  propertiesクラス
  fileinputstreamクラス

・プロパティファイル入力で必要なメソッドは、
  propertiesクラスのloadメソッド
  propertiesクラスのgetpropertyメソッド

・propertiesクラス、fileinputstreamクラスは、
 それぞれjava.utilパッケージ、java.ioパッケージに
 格納されているため、使用する場合はインポートが必要

・プロパティファイルを読み込む際は、loadメソッドで読み込む

・プロパティファイルで設定されている値を取得したい場合は、
 getpropertyメソッドを使用し、
 引数にキーを指定する事で取得する事が出来る。
プロパティファイル出力
プロパティファイル出力の際に使用するクラス
  ・Propertiesクラス ( java.utilパッケージ )
  ・FileOutputStreamクラス ( java.ioパッケージ )
例文(ファイル出力)
								FileOutputStream fis = new FileOutputStream(“rjc.properties”);
								Properties prop = new Properties(); ①
								prop.setProperty( "rjc.tel", "03-1234-5678" ) ; ②
								prop.setProperty( "rjc.message", "Welcome To Java" ) ; ②
								prop.store( fos, "TITLE" );③

							
① propertiesクラスのインスタンスを生成
② インスタンスを使用して、setpropertyメソッドを呼び出す。
  第1引数に「キー」、第2引数に「値 」を指定する。
③ storeメソッドを使用し、第1引数にプロパティファイルの情報
  を持ってfileoutputstreamクラスのインスタンスを渡し、
  第2引数にはタイトルを指定します。ここで指定したタイトルが
  プロパティファイルの一番上に書き込まれる事になります。
  尚、タイトルを特に書き込まない場合は、nullを指定すれば
  書き込まれません。この③の処理を行う事で、指定した
  プロパティファイルに②で設定したキーと値が追加される
  事になります。

書き込み処理前のrjc.properties
rjc.message=Welcome To RJC
書き込み処理後のrjc.properties
#TITLE
#Fri Jul 13 13:57:54 JST 2007
rjc.message=Welcome To Java
rjc.tel=03-1234-5678


処理前と処理後を比べれば一目瞭然ですが、同じキーを指定した場合に元の値が上書き されています。また、新たに設定したキーと値も書き込まれています。 最後に、タイトルで指定した文字がファイルの一番上に書き込まれるようになります。 また、書き込んだ年月日が記述される事も確認するようにしてください。
プロパティファイル出力 まとめ
・プロパティファイル出力で必要なクラスは、
  propertiesクラス
  fileoutputstreamクラス

・プロパティファイル出力で必要なメソッドは、
  propertiesクラスのsetpropertyメソッド
  propertiesクラスのstoreメソッド

・propertiesクラス、fileoutputstreamクラスは、
それぞれjava.utilパッケージ、java.ioパッケージに
格納されているため、使用する場合はインポートが必要

・プロパティファイルを書き込む際は、setproperty
メソッドを使ってキーと値を設定する。 その後、storeメソッドを使用して、実際にファイルに書き込む。

・storeメソッドの第2引数にはタイトルを指定する事が出来る。
指定した場合は、プロパティファイルの一番上にタイトルに指定
した文字が書き込まれる。指定しない場合は、nullを指定すれば、書き込まれることは無い。