オブジェクト指向プログラミング 13回目:パッケージ,import,例外処理 情報メディア学科 濱本和彦 本日の内容 パッケージ import システム定義のパッケージとimport 例外処理 パッケージ 「パッケージ」とは,「クラスやインタフェースの集まり」のこ とです。 1つのソースファイルに含まれるクラスやインタフェースを1 つにまとめることが出来ます。 つまり,複数のファイル(クラスやインタフェース)をまとめ て一つのパッケージとし,そのパッケージを利用してプログ ラムを書く,ということができます。 パッケージに含まれるファイルは,パッケージ名と同じフォ ルダの中になければなりません。階層構造も可能です。 あるファイルを,あるパッケージに含む場合は,最初の行 に次のように記述します。 package パッケージ名; パッケージ パッケージpの作成と利用 フォルダ名とパッケージ名は同じ フォルダp A.java B.java Example70.java package p; package p; package p; class A{ void a1( ){ System.out.println("a1"); } } class B{ void b1( ){ System.out.println(“b1"); } } class Example70{ public static void main(・・・・){ A a = new A( ); a.a1( ); B b = new B( ); b.b1( ); } } パッケージに含まれるファイルは そのフォルダの下に配置する 同一パッケージ内であれば, 他のファイルで宣言された クラスの利用も可能 パッケージ:演習 パッケージを指定しない場合は,既定のパッケージに割 り当てられます。 Visual Studioの場合,プロジェクト名がパッケージ名に 相当します。 プロジェクトを作成したとき,その名前のフォルダが自動的に作ら れます。 pという名前のプロジェクトを作成し,そこに「追加」「既存 の項目」からA.java, B.java, C.java, Example70.javaを 選択,追加してください。 pという名前のフォルダが作成され,4つのファイルが追 加されていることを確認してください。 Example70.javaをビルド・実行して,A.java, B.java, C.javaで宣言されているクラスからオブジェクトを作成, 実行できることを確認してください。 import文 同じパッケージ内のクラスやインタフェースは,直 接それらを利用することが出来ます。 では,別のパッケージ内のクラスなどを利用する にはどうすればよいでしょうか? import文を利用します。あるパッケージ内のすべ てのクラス等を利用できるようにするためには, 次のように指定します。 import パッケージ名.*; import:演習 新規にsという名前のプロジェクト(パッケー ジ)を作成し,そこにD.javaとE.javaを追加 してください。クラス,メソッドともpublic指 定になっていることに注意して下さい。 「プロジェクト」の「プロパティ」から,「出力 の種類」として「クラスライブラリ」を指定し ます。 ビルドすると,s.dllというライブラリが作ら れます(s\bin\Debugフォルダ内)。 import:演習 先に作成したプロジェクト pを開いてください。 「プロジェクト」から「参照 の追加」を選択し,s.dllを 追加してください。 Example70.javaに,右の ように追記してください。 ビルド・実行して,パッケ ージsのクラスDとEが利 用できることを確認してく ださい。 パッケージsをimportしな い場合にクラスDとEを使 うにはどうしたらよいでしょ うか? package p; import s.*; class Example70{ public static void main(String args[]){ A a = new A(); a.a1(); B b = new B(); b.b1(); C c = new C(); c.c1(); D d = new D(); d.d1(); E e = new E(); e.e1(); } } システム定義のパッケージと import Javaでは,様々なクラスがパッケージとして整理されてお り,これらをimportすることでいろいろなプログラムを作る ことが出来ます。 パッケージ 説明 java.awt GUIを作成するAbstract Window Toolkitのクラス群 java.awt.event AWTコンポーネントからのイベントを処理するクラス群 java.applet アプレットを作成するクラス群 java.io 入出力動作を扱うクラス群 java.lang Javaの中核的な機能を提供するクラス群 java.net ネットワーク機能を提供するクラス群 ※java.langパッケージは最も重要なパッケージなので,自動的に取り込まれます。 Javaのパッケージの利用 Example71.java, Example72.java, Example73.javaは,java.ioパッケージを 用いてキーボードからの入力を可能にした プログラム例です。 実行して動作を確認してください。 try{・・} catch{・・}は例外処理と呼ばれる部 分です。詳しくはこの後解説します。 例外処理 「例外」とは,プログラム実行中に発生した問題を通知す るために,実行時に生成されるオブジェクトのこと Javaのエラーチェックの仕組み エラー(例外)が発生 「例外オブジェクト」が生成されて 例外情報が表示され,プログラムの実行が停止される 例外が発生する典型的なケース ゼロで除算した 配列のインデックスが負の数,または配列の領域を超える値だっ た ファイルが見つからなかった プログラムの構造を堅牢かつ分かり易くする Java既定の例外処理の例 Example74.javaは,「整数値をゼロで除算して故意に算 術例外を発生させる」プログラムです。 実行すると以下のメッセージが表示され,実行が停止し ます。 算術例外オブジェクトの生成 例外の種類の表示 例外を生成した java.lang.ArithmeticException: 0 で除算 メソッドがどこか 場所 Example74.d() 場所 C:\....\Example74.java:行 27 ら呼び出された 場所 Example74.c() 場所 C:\....\Example74.java:行 20 のか確認 場所 Example74.b() 場所 C:\....\Example74.java:行 15 場所 Example74.a() 場所 C:\....\Example74.java:行 10 場所 Example74.main(String[] args) 場所 C:\....\Example74.java:行 5 ユーザが用意する例外処理 tryステートメント Example73.javaを見てみましょう try{ ・・・ ・・・ } 例外の発生を監視する必要があるソースコード。 例外が発生したら「例外オブジェクト」を生成して実行を停止し, 処理できる(例外オブジェクトを受け取ってくれる)catchブロックを探す 例外の種類:Java.ioパッケージ内のIOExceptionクラス,入出力の問題を表す catch (IOException e) { 入出力の問題(IOExceptionクラスのオブジェクト)をcatchしたら・・ System.out.println("IOエラーが発生しました。"); } catchブロックで指定した処理が実行される。この場合はメッセージを表示する catch (NumberFormatException ne) { System.out.println("入力された数値が正しくないようです。"); } RuntimeExceptionクラスのサブクラス。RuntimeExceptionはExceptionクラスのサブクラス。 Java.langパッケージ内に定義,実行時に整数の形式が不正である問題を表す エラーチェックを途中に埋め込む必要が無い!! 例外処理の例 Example75.javaは,ゼロで除算しようとした際に発生す るArithmeticException例外時の処理をcatchブロックで 定義している例です。 他に,コマンドライン引数が足りない例外,引数の形式が 整数でない例外についてのcatchブロックが定義されて います。 動作を確認してください。 二つのコマンドライン引数の内,二つ目を0にしてみましょう コマンドライン引数を無し,または1つだけにしてみましょう コマンドライン引数に実数や文字を指定してみましょう 二つのprintln()がどのように実行されているか確認しましょう catchブロックのprintln()で,catchブロックが受け取った例外オブ ジェクトを直接表示してみましょう 例外処理の例 Example75.java try { 起こる可能性がある 例外について,その 対策を作っておく 例外処理1 例外処理2 例外処理3 System.out.println("program start"); int i = Integer.parseInt(args[0]); int j = Integer.parseInt(args[1]); System.out.println(i / j); System.out.println("program end"); 例外が起こる可能性がある 範囲をtry{ }で囲む 例外が起こったら・・ } catch (ArithmeticException e) { その例外に対応した 処理を探して実行する System.out.println("算術例外の発生"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("配列の添え字がデータがある範囲を超えました"); } catch (NumberFormatException e) { System.out.println("引数の形式が整数ではありません"); } Exceptionクラスとサブクラス Exceptionクラス:実行時に発生する可能性がある例外のスーパークラス ClassNotFoundExceptionクラス クラスが見つからなかった例外 NoSuchMethodExceptionクラス メソッドが見つからなかった例外 ・・・・ RuntimeExceptionクラス 実行時に発生する頻度が高い例外 ArithmeticExceptionクラス 算術例外の発生 ArrayIndexOutOfBoundsExceptionクラス 配列の添え字が実在しない要素を指していた ・・・・ 演習 Example76.javaを実行すると,どんな情報が表示される でしょうか? インタフェースの参照を利用する次のようなプログラムを 作成しなさい(Problem13.java)。 LuminousObjectインタフェースでは,lightOff()メソッドと lightOn()メソッドを宣言します。 ConeクラスとCubeクラスはSolidObjectクラスを拡張します。 LuminousConeクラスはConeクラスを拡張し,LuminousObject インタフェースを実装します。 LuminousCubeクラスはCubeクラスを拡張し,LuminousObject インタフェースを実装します。 LuminousConeクラスとLuminousCubeクラスをインスタンス化 します。 これらのオブジェクトを参照するためにインタフェースの参照を使 い,LuminousObjectインタフェースのメソッドを呼び出すようにし なさい。
© Copyright 2024 ExpyDoc