ÿþ˜u#u·0¹0Æ0à0

Similar documents
(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

JavaプログラミングⅠ

Prog2_9th

PowerPoint Presentation

Java知識テスト問題

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog09.ppt

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

Microsoft PowerPoint - prog09.ppt

2

Prog1_2nd

Microsoft PowerPoint - chap10_OOP.ppt


PowerPoint プレゼンテーション

2

オブジェクト指向プログラミング・同演習 5月21日演習課題

Prog1_10th

ガイダンス

2016 年度 JAVA 講座第六週目 目次 パッケージ... 2 パッケージの作成... 2 パッケージの使用方法... 3 異なるパッケージ同名クラスの宣言... 4 パッケージの側面から見たアクセス修飾子... 4 ラッパークラス... 5 ラッパークラス利用法:キャスト... 5 ラッパーク

Java講座

プログラミング基礎I(再)

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

JavaプログラミングⅠ

プログラミング入門1

例外処理とファイル入出力

Javaプログラムの実行手順

Microsoft PowerPoint ppt

JavaプログラミングⅠ

JavaプログラミングⅠ

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

メソッドのまとめ

JavaプログラミングⅠ

プログラミング入門1

Microsoft PowerPoint - prog03.ppt

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

Prog1_6th

PowerPoint プレゼンテーション

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

JAVA入門

基本情報STEP UP演習Java対策

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

デジタル表現論・第6回

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

プログラミング入門1

Make the Future Java FY13 PPT Template

問題1 以下に示すプログラムは、次の処理をするプログラムである

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

Java言語 第1回

JavaプログラミングⅠ

Microsoft PowerPoint - lec06 [互換モード]

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk

GEC-Java

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

Prog2_10th

PowerPoint プレゼンテーション

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

JavaプログラミングⅠ

JavaプログラミングⅠ

Prog1_15th

新・明解Java入門

K227 Java 2

スライド 1

12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある インターネットアドレス

Programming-C-9.key

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

class TestPrimitiveType{ public static

マークアップ言語

問題1 以下に示すプログラムは、次の処理をするプログラムである

2004/11/23 オブジェクト指向プログラミング - モデル図とシーケンス図の表現方法 - オブジェクト指向プログラミング (OOP:ObjectOrientedPrograming) オブジェクト指向プログラミング言語 (OOPL) Java,C++,Delphi(Pascal),Visual

Microsoft PowerPoint - OOP.pptx

JavaプログラミングⅠ

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

Microsoft Word - CombB-Ex

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

Prog1_3rd

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

プログラムの基本構成

デジタル表現論・第4回

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

GEC-Java

3,, となって欲しいのだが 実際の出力結果を確認すると両方の配列とも 10, 2, 3,, となってしまっている この結果は代入後の配列 a と b は同じものになっていることを示している つまり 代入演算子 = によるの代入は全要素のコピーではなく 先をコピーする ため 代入後の a と b は

JavaプログラミングⅠ

17章 プログラムの提供

System.out.println("char : " + (int)character.min_value + "~" + (int)character.max_value); System.out.println("float : " + Float.MIN_VALUE + "~" + Flo

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

プログラミング入門1

Microsoft Word - java a.doc

text_10.dvi

JavaプログラミングⅠ

r1.dvi

Javaプログラマー早期育成ドリル ~コードリーディング編~ 解答

Microsoft Word - problem3.doc

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

プログラミング入門1

Transcription:

10. パッケージ, 例外処理など 1. 例外処理プログラムが正常に期待される以外の処理が行われたときに, 例外が発生 ( エラーの情報の発生 ) する処理をプログラムにさせること例外に対応した処理をプログラムにさせること 例外もオブジェクトである 多数の例外がある ( 例外クラスが存在し, 例外にあわせてオブジェクトが生成される ) 例外処理の方法 try{ 1エラーが発生した場合, 例外オブジェクトが投げられる通常の処理 A 2エラーによって, 作成され catch( 例外オブジェクトの型変数 ( 引数 )e1 ){ た例外オブジェクトが該当す例外発生時の処理 X る例外処理 ( 引数の型 ) を選択 catch( 例外オブジェクトの型変数 ( 引数 )e2 ) { し, 実行する例外発生時の処理 Y finally{ finally ブロック処理 B 省略可,catch の処理後に必ず処理 ( 通常の処理 )A の実行中に (1) 例外が発生しなかった 処理 Bへ (2) 例外が発生 例外オブジェクトが e へ代入 (JVM が自動的に発生 ) (3) 例外オブジェクトを処理 X あるいは Y が実行 例外オブジェクトの型は, 処理 A で発生しうる型を設定する 例外の種類 実行時例外 チェック例外 (try.catch 文で ) 例外処理が行われなくてもコンパイルが可能 プログラムの異常終了の場合あり 例外処理が行われないとコンパイルができない自分で例外を作成し, 戻す場合 throws 文が必要 ( 表現方法 ) throw ステートメントにより, 明示的に例外を生成できる. static void sleep throws interruptedexception ここで, 例外を投げる場合の処理 throws 例外オブジェクト式 ( 型 ) をとる. 例外オブジェクト式の型は java.lang.throwable 型のひとつが対象となる - 1 -

プログラムに明示的に例外を生成する場合 1 引数として受け取った例外オブジェクトを投げる catch (ExceptionType param ){ // 引数で受けた例外オブジェクトの投入 // ExceptionType は何か例外のオブジェクトの型 throw param; ( 例 ) try{ int i=1, j=0, k; k = i / j ; // j = 0 なので演算処理のエラーとなる // ArithmeticException の例外が発生する catch(arithmeticexception e) { // 引数で例外オブジェクトを受け取る throw e; // その例外オブジェクトを投げて次へ進む 1 例外オブジェクトを作成して投げる ( 意図的に例外を発生させる ) throw new ExceptionType(args); // ExceptionType は何か例外の型を示す ある例外のインスタンスを作成し 投げる ( 戻す ) ( 例 ) try{ System.out.println("try"); throw new ArithmeticException( ); // ここで例外が生じていなくても // 例外オブジェクトを発生させる catch(exception e){ // そして ここでつかまる System,out,println("catch"); 例外用のクラス ( スーパークラスとなる )Exception クラス ( サブクラス ) すべての例外処理のクラスの親 (throwable クラスの継承 ) すべての例外およびエラークラスのスーパークラス Throwable クラス 具体的な例外処理のクラス ( 親は Exception クラス ) ArithmeticException( 計算に関する ) Array Index Out of Bounds Exception( 配列要素外 ) サブクラスの例外は Exception クラスを含んでいるので,Exception でも例外を受け取れるしかし,Exception を引数とすることで必ず例外処理を得ることができる try{ catch( 親クラス ( 例えば Exception) e ); // ** 先にすべての例外を受け取る ** // いずれの catch 文でもコンパイルエラーとなる catch( 子クラス e){ // 先にすべての例外を受け取る処理のため意味がない - 2 -

catch ブロックには Throwable クラス ( 全ての例外の親クラス ) の型の引数が入る ( 当然 ) Error クラス Throwable の継承 ( 拡張 ) 継承 ( サブクラス ) JVM で検出される可能性のある問題に対応するクラス形式のエラー, メモリ不足, 内部エラースタックのオーバーフローなど. Exception クラス Throwable の継承実行時に発生する可能性がある問題に対応するクラス Exception 内のクラスの例 1 ClassNotFoundException クラスが見つからない 2 NoSuchFieldException フィールドが見つからない 3 NoSuchMethodException メソッドが見つからない 4 RunTimeException 実行時例外発生 RunTimeException のサブクラス (A)Array Index Out Of Bounds Exception 配列の操作でインデックスのない要素を指す場合 (B)ArithmeticException 算術例外 (0 で割った ) (C)Null PointerException 空のオブジェクトのフィールド or メソッドにアクセスする場合 (D)NumberFormatException Integer.parseInt(args[0]) で args[0] が文字だった場合など Throwable Error Exception 1 2 3 4 Runtime Exception JVM で検出される可能性のある問題を表すクラス ( 形式のエラー, メモリ不足, スタックのオーバーフローなど ) (A) (B) (C) - 3 -

2. パッケージクラスライブラリ ( ある目的に作成された ) クラスインターフェースの集まりパッケージクラスライブラリが提供されている場所, クラスライブラリのまとまりを指す パッケージに登録する方法ソースファイルにかかれているクラス, インターフェースをパッケージに属させる方法 ソースファイルの先頭で package パッケージ名を宣言する. ソースファイルの頭に上の宣言文を書く ( この宣言文がないと, デフォルトのパッケージに属する ) パッケージ名を tg とすると, パッケージ階層構造 ( 実際はフォルダ ) を用いることもでき, package tg.a.b と, 表現できる. この場合,tg-a-b のフォルダ ( パッケージ ) の下にソースファイルをおく. ( 既存の ) クラスファイルの参照方法クラスファイルの検索先 ( ディレクトリ ) を指示する環境変数に設定する システムのデフォルトの位置 CLASSPATH で指定された位置 (ex) クラスの場所 /home/taro/class ならば CLASSPATH に.; home taro classes を記述するクラスファイルには存在するディレクトリ構造全体をアーカイブして1つのファイルにしても利用できる (jar, zip ファイル ) パッケージの作成 (CLASSPATH の設定 ) CLASSPATH の設定方法 set CLASSPATH =.; C= home mylogin java book フォルダ javabook の下に tg ディレクトリを作成する場合 <javabook> <tg> Turtle.java TurtleFrame.java 上記のフォルダ構造の場合では, Turtle.java, TurtleFrame.java の先頭に package tg; と入れてコンパイルする. Turtle, TurtleFrame の限定名は tg.turtle, tg.turtleframe となる. - 4 -

利用例 // Test.java <X> <tg> Test.java package p; A.java class Test{ B.java public static void main( String A.class args[]){ A a= new A(); B.class a.f(); B b= new B(); b.f(); // A.java package p; class A{ void f( ){ System.out.println( A ); // B.java package p; class B{ void f( ){ System.out.println( B ); 実行例コンパイルフォルダ <X> (<p> の親フォルダ ) の上で ) javac p Test.java あるいは javac p *.java コンパイルにより, class ファイルはフォルダ p に格納される 実行 java p.test - 5 -

3. プログラム作成時の注意 (1) クラスの構成 記述を容易にし, 処理の全体が見渡せるよう main メソッド内のよりはメソッドを利用する class クラス名 { // 変数 ( フィールド ) void main( ){ // main メソッド (main メソッドは 2 つ以上存在できない ) f( ); // 主となる処理を記述する // ( 自分クラスの中のメソッドならばメソッド名だけで良い ) void f( ){ // その他のメソッド ( 同じ処理を複数回使う場合は // メソッドを自分で作っておくと良い ) Turtle や TurtleFrame もクラスである.( しかし, これらは (main メソッドに ) 組み込まれて使われるものなのでこれらのクラスには main メソッドは存在しない例えば, Tutle クラス { double x y; // ( インスタンス ) 変数 (x,y 座標 ) double angle; // ( インスタンス ) 変数 ( 角度 ) public void fd(inta){ // 処理 public void rt(inta){ // 処理 // メソッド // メソッド (2) プログラムの作成では一般式で表現して処理を記述する処理を一般式で表現する.( とくに, 繰り返し処理 ) (ex) 3~6 角形まで描く k 角形を描く処理に一般化する ( そして,k=3~6 に変化させる ) (3)for 文の記述 for( 初期設定, 繰り返し条件, 後処理 ){ 記述の特徴 初期設定は for 文の外に出せる for(i=0; i<10; i++){ i=0; for( ; i<10; i++){ 繰り返し条件を記述しない場合はその条件は True と見なされる for(i=0; ; i++){ は i=0; while(true){ i++; と同じ 初期設定は複数できるが, 繰り返し条件 ( の判断 ) は1つの boolean 型しかできない for(i=0, S=0; i<10; i++){ 上の i=0, S=0 が初期化, i<10 が繰り返し条件である. - 6 -

(4) スコープ for(int i=0; i<10; i++){ // 処理が記述される int i はこの範囲で有効 //-----------------// int i; for( i=0; i<10; i++ ){ // 処理が記述される int i はこの範囲で (for 文の 外でも ) 有効 ただし, 同じメソッド内で同一名の変数は利用できない (5) プリシティブ値の型変換誤差が含まれる可能性がある ( 実数値は正確な値を表現できない場合がある ) ( 解決策 ) 整数値を利用する演算とキャストの利用 問題となるプログラム例 for(double x=0; x<1; x+=0.1){ 実行結果 0.0 0.1 0.2 0.3 0.399 0.499 0.4, 0.5 など意図する値が得られていない (0.1 にも誤差を含んでいるため ) 改良したプログラム double x; for(int i=0; i<10; i++){ x=(double)i/10; 実行結果 0.0 0.1 0.2 0.3 0.4 0.5 くり返し処理のデータに整数を利用した ( 整数 i には誤差は含まない ) - 7 -

4. 実数計算における浮動小数への取り扱い時に生じる問題 (1) オーバーフロー表現できる数値の範囲を超えてしまったとき, 正しい値を表現できなくなる現象 (ex) 単精度 -1.11 1 (2) 2 127 ~ 1.11 1 (2) 2 127 では 1.0 2 128 は表現不可である. 表現しようとすると異なる値が表現される (2) アンダーフロー演算結果が 0 に近づき, 表現可能な最小値よりも小さい値になった場合 (ex) 単精度では 0 の次に表示可能な小さい値は 0.00 1 (2) 2-126 (1 は小数点以下 24 桁目 ) である. すなわち,1.0 (2) 2-149 を意味する. 例えば,1.0 (2) 2-100 1.0 (2) 2-50 や (1.0 (2) 2-149 )/2 の演算では 1.0 (2) 2-150 となり, 表示できないため, 正しい解は表せない. コンピュータによっては,1.0 (2) 2-150 は 0 と扱うものもあるが, ((1.0 (2) 2-149 )/2)*2 の演算では初めの括弧の演算で 0 となるため, 結果は 0 となり, コンピュータで表示できるものでも異なる結果が得られる. (3) 桁落ち単精度でほぼ同じ値の引き算を行ったときに, 有効桁が減少して誤差が大きくなる現象 (ex) 1.00001-1.0 = 0.00001 の計算で正しく 0.00001 が表現できないこと (4) 情報落ち大きな数値と小さな数値の加算を行ったとき, 小さな値の情報が消されてしまう現象 (ex) 十進法では 3355432 (10) + 1 (10) = 33554433 (10) 3355432 (10) を浮動小数点表示すると, 1000 0 (2) (00 が 25 桁ある ) = 1.000 2 25 (00 23 桁ある ) 1 を加える際,1 は 0.0 1 10 25 ( 小数点第 25 位が 1) となるので浮動小数点が表記できる 23 桁以下に値が埋もれるこのため, 3355432 (10) + 1 (10) = 1.000 2 25 + 0.0 0(23 桁 ) 10 25 となり, 正しい解が得られない. (5){ の省略 { の中が 1 行のみならば { はいらない. (ex) if(x>0){ x++; //--------------------------------------------- for(x=0, S=0; x<10; x++){ S+= x; if(x>0) x++; あるいは, if(x>0) x++; //--------------------------------------------- for(x=0, S=0; x<10; x++) S+= x; (6) 実数型利用時における判断式の取り扱い例えば double for(double x=0; x<=2.0; x+=0.1){ - 8 -

のプログラムにおいて,for 文の判断式 x<=2.0 の取り扱いでは x=2.0 が正しく判断されない可能性が高い ( 浮動数小数点では x=2.0 になるとは限らない.) 上のプログラムを実行すると以下の結果が得られる. 0.0 0.1 0.2 0.30000000000000004 0.4 0.5 0.6 0.7 0.7999999999999999 0.8999999999999999 0.9999999999999999 1.0999999999999999 1.2 1.3 1.4000000000000001 1.5000000000000002 1.6000000000000003 1.7000000000000004 1.8000000000000005 1.9000000000000006 2.0000000000000004 x に代入した値 0.0 0.1 0.2 0.3 x=0.3 に近いが, 値を越えている 0.4 0.5 0.6 0.7 0.8 x=0.8 に近いが, 値を 0.8 より小 0.9 x=0.9 に近いが, 値を 0.9 より小 1.0 x=1.0 に近いが, 値を 1.0 より小 1.1 x=1.1 に近いが, 値を 1.1 より小 1.2 1.3 1.4 x=1.4 に近いが, 値を 1.4 より大 1.5 1.6 1.7 1.8 1.9 2.0 x<= 2.0 の条件を越える範囲外処理終了 ( 予定なら 2.1 で繰り返しを抜ける ) - 9 -

06/30/2004 ) ( <p> Test.java, A.java, B.java // Test.java package p; class Test{ public static void main( String args[]){ // A.java package p; A a= new A(); a.f(); B b= new B(); b.f(); // B.java package p; class A{ void f( ){ System.out.println("A"); class B{ void f( ){ System.out.println("B"); <p> E: >javac p *.java E: >java p.test A B E: >cd p p E: p>javac *.java p E: p>java Test Exception in thread "main" java.lang.noclassdeffounderror: Test (wrong name: p/t est) at java.lang.classloader.defineclass0(native Method) at java.lang.classloader.defineclass(classloader.java:486) E: >java p.test A B p ( ) 1

06/30/2004 x[ ] for << >> E: demo_reigai>java demo_reigai 1 2 3 4 5 i=0 x[i]=1 i=1 x[i]=2 i=2 x[i]=3 i=3 x[i]=4 i=4 x[i]=5 E: demo_reigai>java demo_reigai 1 2 3 4 5 6 7 i=0 x[i]=1 i=1 x[i]=2 i=2 x[i]=3 i=3 x[i]=4 i=4 x[i]=5 i=5 x[i]=6 E: demo_reigai>java demo_reigai 1 2 e 4 5 i=0 x[i]=1 i=1 x[i]=2 ////////////////////////////////////////////////// // Class demo_reigai.java ////////////////////////////////////////////////// public class demo_reigai{ public static void main(string args[]){ // int elementnum=args.length; if(elementnum< 1){ System.out.println(" n [ 1 2 3...] "); System.exit(1); // ( ) int x[]=new int[6]; // 6 try{ for(int i=0; i< elementnum; i++){ x[i]=integer.parseint(args[i]); System.out.println("i=" + i + " x[i]=" + x[i]); catch(numberformatexception e){ System.out.println(" "); System.exit(1); catch(arrayindexoutofboundsexception e){ System.out.println(" "); System.exit(1); catch(exception e){ System.out.println(" "); System.exit(1); 2

06/30/2004 public class sample { /* Main */ public static void main(string[] args){ /* * (1) args[] * (2) */ double x; for(x=0; x<=2.0; x+=0.1){ public class sample2 { /* Main */ public static void main(string[] args){ /* * (1) args[] * (2) */ double x; int i; for(i=0; i<=20; i++){ // x=(double)i/10; // 1/10 x=(double)i/10; E: >java sample 0.0 0.1 0.2 0.30000000000000004 0.4 0.5 0.6 0.7 0.7999999999999999 0.8999999999999999 0.9999999999999999 1.0999999999999999 1.2 1.3 1.4000000000000001 1.5000000000000002 1.6000000000000003 1.7000000000000004 1.8000000000000005 1.9000000000000006 2.0000000000000004 E: >java sample2 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 3