Make the Future Java FY13 PPT Template

Similar documents
Make the Future Java FY13 PPT Template

Java知識テスト問題

JavaプログラミングⅠ

Microsoft PowerPoint ppt

JavaプログラミングⅠ

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

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

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

JavaプログラミングⅠ

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

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

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

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

Java講座

Prog1_10th

class TestPrimitiveType{ public static

K227 Java 2

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

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

新・明解Java入門

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

2

Microsoft PowerPoint - prog09.ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog09.ppt

PowerPoint プレゼンテーション

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

第 1 章 Java 言語について ( オブジェクト指向, 変数の扱い方, 繰り返し条件と条件分岐 ) Java 言語の概要とオブジェクト指向, 変数の扱い方, 繰り返し条件と条件分岐について理解し, プログラム作成を行う 1.1 Java 言語の概要 JAVA は Sun Microsystems

Microsoft PowerPoint - ruby_instruction.ppt

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

Javaプログラムの実行手順

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

プログラミングA

解きながら学ぶJava入門編

PowerPoint プレゼンテーション

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

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

Prog1_15th

JavaプログラミングⅠ

Prog2_9th

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

JAVA入門

JavaプログラミングⅠ

Prog2_12th

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

Prog1_6th

基本情報STEP UP演習Java対策

JavaプログラミングⅠ

JavaプログラミングⅠ

試験問題に記載されている会社名又は製品名は, それぞれ各社の商標又は登録商標です なお, 試験問題では, 及び TM を明記していません

Microsoft PowerPoint - prog03.ppt

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

ALG ppt

Javaセキュアコーディングセミナー東京 第2回 数値データの取扱いと入力値の検証 演習解説

GEC-Java

デジタル表現論・第4回

untitled

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

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

JavaプログラミングⅠ

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

JavaプログラミングⅠ

JavaプログラミングⅠ

Java演習(4) -- 変数と型 --

プログラミング入門1

Microsoft PowerPoint - chap10_OOP.ppt

Javaの作成の前に

2

How to Use the PowerPoint Template

PowerPoint プレゼンテーション

JavaプログラミングⅠ


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

文字列操作と正規表現

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

Make the Future Java FY13 PPT Template

Prog1_3rd

PowerPoint Presentation

リファレンス,配列 例外処理

JavaプログラミングⅠ

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

プログラミング入門1

JAVA とテンプレート

JavaプログラミングⅠ

Prog1_2nd

2

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

Microsoft Word - java a.doc

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

プログラミングA

プログラミング入門1

メソッドのまとめ

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど

教材ドットコムオリジナル教材 0から始めるiアフ リ リファレンス i アプリ簡易リファレンス ver i アプリ Java 独自のメソッド (1)iアプリの命令を使えるようにする import com.nttdocomo.ui.*; (2) 乱数を使う import java.u


GEC-Java

JavaScriptプログラミング入門 2.JavaScriptの概要

ガイダンス

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

JAVA入門

Transcription:

1

- 目指せ脱初心者!! - クイズで覚える Java プログラミング 日本オラクル株式会社オラクルユニバーシティ #jdt2014_e3 2

以下の事項は 弊社の一般的な製品の方向性に関する概要を説明するものです また 情報提供を唯一の目的とするものであり いかなる契約にも組み込むことはできません 以下の事項は マテリアルやコード 機能を提供することをコミットメント ( 確約 ) するものではないため 購買決定を行う際の判断材料になさらないで下さい オラクル製品に関して記載されている機能の開発 リリースおよび時期については 弊社の裁量により決定されます Oracle は 米国オラクル コーポレーション及びその子会社 関連会社の米国及びその他の国における登録商標または商標です 他社名又は製品名は それぞれ各社の商標である場合があります 3

Agenda Part 1. 基本文法編 Part 2. オブジェクト指向プログラミング編 4

Part 1. 基本文法編 5

Quiz.1 変数はどこをさしている? 次のコードの実行結果として正しいものはどれですか? 1. public class Test { 2. int num; 3. void methoda() { 4. int num = 2; 5. methodb(); 6. System.out.print(num); 7. } 8. void methodb() { 9. num = 3; 10. } 11. public static void main(string[] args) { 12. Test test = new Test(); 13. int num = 1; 14. System.out.print(test.num); 15. test.methoda(); 16. System.out.print(num); 17. System.out.print(test.num); 18. } 19. } [ 選択肢 ] 1.1233 が出力される 2.0213 が出力される 3.1213 が出力される 4.0333 が出力される 6

Quiz.1 答え 変数はどこをさしている? 次のコードの実行結果として正しいものはどれですか? 1. public class Test { 2. int num; 3. void methoda() { 4. int num = 2; 5. methodb(); 6. System.out.print(num); 7. } 8. void methodb() { 9. num = 3; 10. } 11. public static void main(string[] args) { 12. Test test = new Test(); 13. int num = 1; 14. System.out.print(test.num); 15. test.methoda(); 16. System.out.print(num); 17. System.out.print(test.num); 18. } 19. } [ 選択肢 ] 1.1233 が出力される 2.0213 が出力される 3.1213 が出力される 4.0333 が出力される 7

プログラミングのポイント 変数のスコープ 変数のスコープ 変数が見える (= 特定の識別子で参照できる ) 範囲 インスタンス変数 / static 変数 クラス内の全てのブロックからアクセス可能 ローカル変数 メソッドやif 文などの特定のブロック内でのみアクセス可能 1. public class Test { 2. int num; 3. public static void main(string[] args) { 4. Test test = new Test(); 4. int num = 1; 5. System.out.print(num); 6. System.out.print(test.num); 7. } 8. } ローカル変数 num の有効範囲 インスタンス変数 num の有効範囲 8

もう一度コードを良く見てみよう 次のコードの実行結果として正しいものはどれですか? 1. public class Test { 2. int num; 3. void methoda() { 4. int num = 2; 5. methodb(); 6. System.out.print(num); 7. } 8. void methodb() { 9. num = 3; 10. } 11. public static void main(string[] args) { 12. Test test = new Test(); 13. int num = 1; 14. System.out.print(test.num); 15. test.methoda(); 16. System.out.print(num); 17. System.out.print(test.num); 18. } 19. } test num (main() のローカル変数 ) num ( インスタンス変数 ) num (methoda() のローカル変数 ) 0 2 1 3 9

Quiz.2 66666 + 44444 と表示したいのだけれど 次のコードの実行結果として正しいものはどれですか? 1. public class Test { 2. public static void main(string[] args) { 3. System.out.println(12345 + 54321); 4. System.out.println(" "); 5. System.out.println(01234 + 43210); 6. } 7. } [ 選択肢 ] 1.66666 44444 2.66666 43878 3.17777 44444 4.17777 43878 10

Quiz.2 答え 66666 44444 と表示したいのだけれど 次のコードの実行結果として正しいものはどれですか? 1. public class Test { 2. public static void main(string[] args) { 3. System.out.println(12345 + 54321); 4. System.out.println(" "); 5. System.out.println(01234 + 43210); 6. } 7. } [ 選択肢 ] 1.66666 44444 2.66666 43878 3.17777 44444 4.17777 43878 11

プログラミングのポイント リテラル リテラルとは値を文字で表したもの 例 : 整数型 (byte, short, int, long) のリテラル 10 進数表記 int i = 10; 8 進数表記 int i = 010; 16 進数表記 int i = 0x10; 12

プログラミングのポイント Java SE 7 の新機能 リテラルに関する拡張 バイナリリテラル 整数型 (byte, short, int, long) を 2 進数で表記 int i1 = 0b1010; または int i2 = 0B1010; アンダースコアつきリテラル int i = 0x5_2; // 16 進数 float pi = 3.14_15f; リテラルは "0b" または "0B" で開始 TIPS: アンダースコア付きリテラルを使えない場所 数値リテラルの始まりと終わり 小数点に接する位置 float や long をあらわす接頭辞 (f,f,l,l) の直前 16 進数などの接頭辞 (0x) の途中 13

Quiz.2 修正版 66666 44444 と表示したいのだけれど 次のコードの実行結果として正しいものはどれですか? 1. public class Test { 2. public static void main(string... args) { 3. System.out.println(12345 + 54321); 4. System.out.println(" "); 5. System.out.println(1234 + 43210); 6. } 7. } One Point: Long 型のリテラルは末尾に エル (L, l) を付記しますが 小文字の l は 数字の いち (1) と見間違えやすいので なるべく大文字の L を使いましょう 14

Quiz. 3 オブジェクトは等しいのか? 次のコードの実行結果として正しいものはどれですか? 1. String str1 = "Java"; 2. String str2 = "Java"; 3. String str3 = new String("Java"); 4. 5. if (str1 == str3) { 6. System.out.print(str1 + " == " + str2 +, "); 7. } 8. if (str2.equals(str3)) { 9. System.out.println(str1 + " equals " + str3); 10. } 1. Java == Java, 2. Java == Java, Java equals Java 3. Java equals Java 4. 何も出力されない 15

Quiz. 3 答え オブジェクトは等しいのか? 次のコードの実行結果として正しいものはどれですか? 1. String str1 = "Java"; 2. String str2 = "Java"; 3. String str3 = new String("Java"); 4. 5. if (str1 == str3) { 6. System.out.print(str1 + " == " + str2 +, "); 7. } 8. if (str2.equals(str3)) { 9. System.out.println(str1 + " equals " + str3); 10. } 1. Java == Java, 2. Java == Java, Java equals Java 3. Java equals Java 4. 何も出力されない 16

プログラミングのポイント == と equals == 演算子 オブジェクトの同一性 String a = new String("Java"); String b = new String("Java"); String c = "Java"; System.out.println(a == b); // false System.out.println(a == c); // false equals メソッド オブジェクトの等価性 One Point: String str1 = "Java"; は特殊なインスタンス化方法 直接文字列を指定する場合は String str2 = "Java"; のように複数回宣言してもインスタンスは毎回生成されず 同じインスタンスを参照する == 演算子で比較しても true になる String str3 = new String("Java"); のように通常の参照型と同じインスタンス化を行った場合は毎回インスタンスが生成される == 演算子で比較すると false になる Object クラスの equals メソッド 同じオブジェクトを参照しているか (== と同じ ) ラッパークラスと String クラスの equals メソッド 同じ値をあらわしているか ユーザー定義クラスの equals メソッド 必要に応じてオーバーライド equals メソッドをオーバーライドする場合は hashcode() もオーバーライド 17

Quiz 4 オートボクシングの落とし穴 次のコード断片を実行した結果として正しいものはどれですか? 1. public class Test { 2. public static void main(string[] args) { 3. int a = 127; 4. int b = 127; 5. System.out.print(a == b); System.out.print(", "); 6. System.out.print(equals(a, b)); 7. } 8. public static boolean equals(integer a, Integer b) { 9. return a == b; 10. } 11. } 1. true, true 2. true, false 3. false, true 4. false, false 18

Quiz 4 答え オートボクシングの落とし穴 次のコード断片を実行した結果として正しいものはどれですか? 1. public class Test { 2. public static void main(string[] args) { 3. int a = 127; 4. int b = 127; 5. System.out.print(a == b); System.out.print(", "); 6. System.out.print(equals(a, b)); 7. } 8. public static boolean equals(integer a, Integer b) { 9. return a == b; 10. } 11. } 1. true, true 2. true, false 3. false, true 4. false, false 19

プログラミングのポイント プリミティブ型と参照型 インスタンス変数 var へのアクセスは v1.var または v2.var プリミティブ型 ( 基本データ型 ) 値そのものを格納する 参照型 整数型 (byte, short, int, long) 浮動小数点型 (float, long) boolean 型 プリミティブ型に対応したラッパークラスがある オートボクシングにより相互代入可能 オブジェクトの参照情報を格納する 全ての参照型のスーパークラスは java.lang.object クラス 初期値は null v1 コピー v2 SomeClass のインスタンス int var = 10; 参照型の v1 を v2 にコピーすると同じオブジェクトを参照する 20

プログラミングのポイント ラッパークラスのオブジェクトは == で比較しない Integer 型のオートボクシングは Integer.valueOf() で処理される Integer.valueOf() は -128 から 127 までキャッシュされるため == で比較しても true になる ( この範囲外の値では false になる ) One Point: 参照型の等価性比較は equals メソッドを使用しましょう 21

Quiz 4 修正版 オートボクシングの落とし穴 次のコード断片を実行した結果として正しいものはどれですか? 1. public class Test { 2. public static void main(string[] args) { 3. int a = 127; 4. int b = 127; 5. System.out.println(a == b); 6. System.out.println(equals(a, b)); 7. } 8. public static boolean equals(integer a, Integer b) { 9. return a.equals(b); 10. } 11. } 22

Quiz. 5 switch 文を使用する 次のコードの実行結果を正しく説明しているものはどれですか? 1. String abbrev = new String("NEWS"); 2. switch (abbrev.substring(1, 2)) { 3. case "N": System.out.print("North "); break; 4. case "E": System.out.print("East "); 5. case "W": System.out.print("West "); break; 6. case "S": System.out.print("South "); 7. default: 8. System.out.println("North, South, East and West"); 9. } 1. North 2. East West 3. North, South, East and West 4. このコードはコンパイルエラーになるので実行できない 23

Quiz. 5 答え switch 文を使用する 次のコードの実行結果を正しく説明しているものはどれですか? 1. String abbrev = new String("NEWS"); 2. switch (abbrev.substring(1, 2)) { 3. case "N": System.out.print("North "); break; 4. case "E": System.out.print("East "); 5. case "W": System.out.print("West "); break; 6. case "S": System.out.print("South "); 7. default: 8. System.out.println("North, South, East and West"); 9. } 1. North 2. East West 3. North, South, East and West 4. このコードはコンパイルエラーになるので実行できない 24

プログラミングのポイント switch 文 switch による分岐処理 switch の判定条件に String を使用可能 (Java SE 7 の新機能 ) char, byte, short, int, enum + String (char, byte, short, int はラッパークラスも使用可 ) switch 文の制御 case に break が記述されていないと後続の case が処理される break; の書き忘れに注意!! 25

Quiz. 6 多次元配列の処理 次のコードの実行結果を正しく説明しているものはどれですか? 1. int[][] dimention = { { 1, 5 }, { 2, 7 }, { 8, 3 } }; 2. for (int[] xx : dimention) { 3. for (int yy : xx) { 4. System.out.print(yy); 5. } 6. System.out.print(" "); 7. } 1. 5 7 3 2. 15 27 83 3. 128 573 4. 実行時に ArrayIndexOutOfBoundsException がスローされる 26

Quiz. 6 答え 多次元配列の処理 次のコードの実行結果を正しく説明しているものはどれですか? 1. int[][] dimention = { { 1, 5 }, { 2, 7 }, { 8, 3 } }; 2. for (int[] xx : dimention) { 3. for (int yy : xx) { 4. System.out.print(yy); 5. } 6. System.out.print(" "); 7. } 1. 5 7 3 2. 15 27 83 3. 128 573 4. 実行時に ArrayIndexOutOfBoundsException がスローされる 27

プログラミングのポイント 配列の宣言 配列の宣言 int[] a; // 配列の宣言 a = new int[4]; // 配列の生成 int[] a = new int[4]; // 配列の宣言と生成 a[0] = 10; // 配列要素へのアクセス arr TIPS: 配列の添字 (Index) は 0 から開始配列の要素数 : arr.length 4 [0] [1] [2] [3] 初期化子 直接データを代入して配列を生成する方法 int[] b = {10, 20, 30, 40}; // 初期化子による配列の宣言と生成 28

プログラミングのポイント 多次元配列 多次元配列は 配列の配列 int[][] arr ={{0,1,2}, {3,4,5,6}}; // 初期化子による多次元配列の初期化と生成 System.out.println(arr[0][1]); // 配列要素へのアクセス arr [0] [1] arr[0] arr[1] [0] [1] [2] [0] [1] [2] [3] 29

プログラミングのポイント 拡張 for 文 拡張 for 文 配列や Collection の要素を 1 つずつ処理するための新構文 for ( 型変数名 : 式 ) { // 処理 } 式には 配列や java.util.iterable インタフェースを実装したクラスを指定 反復変数は for 文内でのみ使用可能 // 同等の処理 (Collection) for (Iterator i = list.iterator(); i.hasnext(); ) { // 拡張 for 文 (Collection) for (Iterator I : list) { One Point: 拡張 for 文は要素を 1 つずつ順番に処理するために使用します逆順処理や条件付きで要素を処理する ( フィルタ処理 ) 場合は 通常の for 文を使用しましょう 30

Part 2. オブジェクト指向プログラミング編 31

Quiz 7 オブジェクトは初期化される? 次のコードを正しく説明しているものはどれですか? 1. public class Test { 2. public static void main(string[] args) { 3. Fruits fruits = new Fruits(); 4. for(string item: fruits.getfruits()) { 5. System.out.print(item + ", "); 6. } 7. } 8. } 9. class Fruits { 10. private String[] fruits = new String[2]; 11. public void Fruites() { 12. fruits[0] = "apple"; fruits[1] = "orange"; 13. } 14. public String[] getfruits() { 15. return fruits; 16. } 17. } [ 選択肢 ] 1.apple, orange, が出力される 2. 何も出力されない 3.null, null, が出力される 4. 実行例外がスローされる 32

Quiz 7 答え オブジェクトは初期化される? 次のコードを正しく説明しているものはどれですか? 1. public class Test { 2. public static void main(string[] args) { 3. Fruits fruits = new Fruits(); 4. for(string item: fruits.getfruits()) { 5. System.out.print(item + ", "); 6. } 7. } 8. } 9. class Fruits { 10. private String[] fruits = new String[2]; 11. public void Fruites() { 12. fruits[0] = "apple"; fruits[1] = "orange"; 13. } 14. public String[] getfruits() { 15. return fruits; 16. } 17. } [ 選択肢 ] 1.apple, orange, が出力される 2. 何も出力されない 3.null, null, が出力される 4. 実行例外がスローされる 33

プログラミングのポイント コンストラクタ コンストラクタ インスタンス生成時に初期化処理を行う メソッドのように引数リストはとれる ( オーバーロードも可 ) が 戻り値は返せない クラス名 ( 引数リスト ) { // 初期化処理 } 初期化の処理順は 初期化子 コンストラクタの順 コンストラクタは継承されない点に注意 One Point: オーバーロードのルール 同一クラスのメソッド名が同じで引数リスト ( 引数の型 数 順序 ) が異なる 引数リストが同じで戻り値が異なるメソッドは定義できない 34

Quiz 7 修正版 オブジェクトは初期化される 次のコードを正しく説明しているものはどれですか? 1. public class Test { 2. public static void main(string[] args) { 3. Fruits fruits = new Fruits(); 4. for(string item: fruits.getfruits()) { 5. System.out.print(item + ", "); 6. } 7. } 8. } 9. class Fruits { 10. private String[] fruits = new String[2]; 11. public Fruites() { 12. fruits[0] = "apple"; fruits[1] = "orange"; 13. } 14. public String[] getfruits() { 15. return fruits; 16. } 17. } 35

Quiz. 8 そのキャストは正しい? 次のコードの 5 10 行目で正しく実行できるものはどれですか? 1. public class Test { 2. public static void main(string[] args) { 3. A a = new B(); 4. T t = new B(); 5. a.method(); 6. (T) a.method(); 7. ((T) a).method(); 8. t.method(); 9. (T) t.method(); 10. ((T) t).method(); 11. } 12. } 13. class A { } 14. class B extends A implements T { 15. public void method() { 16. System.out.println("B#method"); 17. } 18. } 19. interface T { 20. public void method(); 21. } [ 選択肢 ] 1. 5. a.method(); 2. 6. (T) a.method(); 3. 7. ((T) a).method(); 4. 8. t.method(); 5. 9. (T) t.method(); 6.10. ((T) t).method(); 36

Quiz. 8 答え そのキャストは正しい? 次のコードの 5 10 行目で正しく実行できるものはどれですか? 1. public class Test { 2. public static void main(string[] args) { 3. A a = new B(); 4. T t = new B(); 5. a.method(); 6. (T) a.method(); 7. ((T) a).method(); 8. t.method(); 9. (T) t.method(); 10. ((T) t).method(); 11. } 12. } 13. class A { } 14. class B extends A implements T { 15. public void method() { 16. System.out.println("B#method"); 17. } 18. } 19. interface T { 20. public void method(); 21. } [ 選択肢 ] 1. 5. a.method(); 2. 6. (T) a.method(); 3. 7. ((T) a).method(); 4. 8. t.method(); 5. 9. (T) t.method(); 6.10. ((T) t).method(); 37

プログラミングのポイント 参照型のキャスト 参照型のキャスト ( 型変換 ) クラスは継承関係またはインタフェース実装が前提 スーパークラス型に代入したオブジェクトをサブクラス型に再入する場合は明示的にキャストが必要 Oya oya = new Ko(); Ko ko = (Ko)oya; スーパークラス インタフェース 暗黙の型変換 代入 キャストによる型変換 サブクラス 実装クラス One Point: キャストしたクラスに互換性がなければ実行時に ClassCastException がスローされる SomeClass sc = new SomeClass(); AnotherClass ac = new AnotherClass(); ac = (AnotherClass)sc; // 型に互換性がない 38

プログラミングのポイント参照型のキャスト class B extends A implements T A a (T) a T t One Point: キャスト演算子の対象に注意 (T) a.method(); ( (T)a ).method(); メソッドの戻り値に対してキャスト 変数に対してキャスト class A interface T void method(); 実行時はオーバーライドされたメソッドが呼び出される @Override void method() { } 39

もう一度コードを良く見てみよう そのキャストは正しい? 次のコードの 5 10 行目で正しく実行できるものはどれですか? 1. public class Test { 2. public static void main(string[] args) { 3. A a = new B(); 4. T t = new B(); 5. a.method(); // クラスAには method() メソッドは定義されていない 6. (T) a.method(); // method() の戻り値 void に対してキャストはできない 7. ((T) a).method(); 8. t.method(); 9. (T) t.method(); // method() の戻り値 void に対してキャストはできない 10. ((T) t).method(); 11. } 12. } 13. class A { } 14. class B extends A implements T { 15. public void method() { 16. System.out.println("B#method"); 17. } 18. } 19. interface T { 20. public void method(); 21. } 40

Quiz. 9 オーバーライドされている? 次のコードの実行として正しいものはどれですか? 1. public class Test { 2. public static void main(string[] args) { 3. Parent p = new Child(); 4. System.out.println(p.name + ", " + ((Child)p).name); 5. } 6. } 7. class Parent { 8. String name = "Parent"; 9. } 10. class Child extends Parent { 11. String name = "Child"; 12. } [ 選択肢 ] 1. Parent, Parent 2. Child, Child 3. Child, Parent 4. Parent, Child 41

Quiz. 9 答え オーバーライドされている? 次のコードの実行として正しいものはどれですか? 1. public class Test { 2. public static void main(string[] args) { 3. Parent p = new Child(); 4. System.out.println(p.name + ", " + ((Child)p).name); 5. } 6. } 7. class Parent { 8. String name = "Parent"; 9. } 10. class Child extends Parent { 11. String name = "Child"; 12. } [ 選択肢 ] 1. Parent, Parent 2. Child, Child 3. Child, Parent 4. Parent, Child 42

プログラミングのポイント フィールド ( 変数 ) は隠蔽される 継承関係にあるクラスの同じ名前の変数はオーバーライドされない 値は参照する変数の型に依存する B b A a b.name a.name class B extends A String name = "Child"; class A String name = "Parent"; One Point: 継承関係にあるクラスで同じ名前の変数を定義すると どちらかの変数は隠蔽されてしまう 同じ名前の変数の宣言は避けましょう 43

Quiz. 10 戻り値は何? 次のコードを正しく説明しているものはどれですか? 1. public class Test { 2. public static void main(string[] args) { 3. System.out.println(checkSomething()); 4. } 5. public static boolean checksomething() { 6. try { 7. return true; 8. } finally { 9. return false; 10. } 11. } 12. } 1. true が出力される 2. false が出力される 3. 6 行目でコンパイルエラーが発生する 4. 8 行目でコンパイルエラーが発生する 44

Quiz. 10 答え 戻り値は何? 次のコードを正しく説明しているものはどれですか? 1. public class Test { 2. public static void main(string[] args) { 3. System.out.println(checkSomething()); 4. } 5. public static boolean checksomething() { 6. try { 7. return true; 8. } finally { 9. return false; 10. } 11. } 12. } 1. true が出力される 2. false が出力される 3. 6 行目でコンパイルエラーが発生する 4. 8 行目でコンパイルエラーが発生する 45

プログラミングのポイント 例外処理の基本 例外 プログラムで発生する予期せぬ事象をあらわすオブジェクト 例外を発生させる = スロー (throw) 例外を補足して処理する = キャッチ (catch) 例外処理 try-catch 構文 メソッド内で例外処理しない場合はメソッド宣言で throws キーワードを指定 メソッドの呼び出し側に例外処理の必要性を伝える public void methodx() throws Exception { // 例外が発生する可能性がある処理 // (try-catch 不要 ) } try { 例外 // 処理 } catch(exception e) { // 例外処理 } finally { // 終了処理 } try-catch 構文 One Point: 例外が発生してもしなくても finally 句は必ず処理されます finally 句での return 処理は避けましょう 46

プログラミングのポイント Java SE 7 での新機能 Java SE 7 における例外処理の拡張 try-with-resources AutoCloseable オブジェクトを暗黙的にクローズ multi-catch 節 同じ処理を行う catch 句をまとめて記述 } catch( 例外 1 例外 2 ex) { 再スロー時の型推論の改善 Exception オブジェクトを再スロー可能 1. public static void exec() throws IOException, SQLException { 2. try { 3. // 例外が発生する処理 ; 4. } catch (Exception e) { 5. // 例外処理 6. throw e; 7. } 8. } 47

最後に 48

本セッションの内容は OCJP Silver SE 7 相当です 是非チャレンジしてみてください! Gold 試験は どちらもかなり手強いです しっかり準備して試験に備えましょう! Bronze と Silver の試験範囲はほとんど同じです プログラミング経験がある方は Silver からスタートしましょう 1Z0-804: Java SE 7 Programmer II Oracle Certified Java Programmer, Gold SE 7 これから資格取得を目指す方 1Z0-803: Java SE 7 Programmer I Oracle Certified Java Programmer, Silver SE 7 1Z0-805: Upgrade to Java SE 7 Programmer 1Z0-802: Java SE 7 Bronze Exam オンライン試験有り Oracle Certified Java Programmer, Bronze SE 7 OCJ-P/SJC-P 資格取得者 ( バージョンは問わない ) 資格名 試験名 一試験で移行可能! 49

認定資格試験の学習方法 試験情報は受験前に必ず確認しましょう できるだけ実際にプログラムを作成しましょう ソースコードを 読む力 は試験でも実務でも役に立ちます 試験のための学習は Java SE API & ドキュメントを参照しましょう Oracle Technology Network > Java にはお役立ち情報が満載です 市販の書籍を活用して試験の出題傾向をつかみましょう オラクル認定資格教科書 Javaプログラマ Silver SE 7 ( 翔泳社 ) オラクル認定資格教科書 Javaプログラマ Silver SE7 スピードマスター問題集 ( 翔泳社 ) 50

Java プログラミングのおともには? 日本語化された API ドキュメントを読んでみよう 51

52