闯补惫补プログラミング入门【第6回】
6. 例外を起こしてみる
public class ExceptionTest1 {
public static void main(String[] args) {
int[] myarray = new int[3];
System.out.println("代入します");
myarray[100] = 0;
System.out.println("代入しました");
System.out.println("代入終了します");
}
}
9. 例外をキャッチする例
public class ExceptionTest2 {
public static void main(String[] args) {
int[] myarray = new int[3];
try {
System.out.println("代入します");
myarray[100] = 0;
System.out.println("代入しました");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("代入できませんでした");
System.out.println("例外は" + e + "です");
}
System.out.println("終了します");
}
}
12. 階層化されたメソッド呼び出しから投
げられる例外
public class ExceptionTest3 {
public static void main(String[] args) {
int[] myarray = new int[3];
try {
System.out.println("代入します");
myAssign(myarray, 100, 0);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("代入出来ませんでした");
System.out.println("例外は" + e + "です");
}
System.out.println("終了します");
}
static void myAssign(int[] arr, int index, int value) {
System.out.println("myAssignに来ました");
arr[index] = value;
System.out.println("myAssignから帰ります");
}
}
16. finallyブロックを使った例
public class ExceptionFinally {
public static void main(String[] args) {
System.out.println("Start");
try {
int[] a = new int[3];
System.out.println("代入します");
a[3] = 123;
System.out.println("代入しました");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("例外が発生しました " + e);
} finally {
System.out.println("finallyブロックです");
}
System.out.println("End");
}
}
18. NumberFormatException
public class NumberTest {
+ e);
public static void main(String[] args) {
String numstr = "XYZ";
try {
int val = Integer.parseInt(numstr);
System.out.println("val = " + val);
} catch (NumberFormatException e) {
System.out.println("例外が発生しました "
}
}
}
22. 例外の階層
? Throwable(throw + able):投げることが出来るク
ラス
? Errorは、もはや動作を継続するのは期待できな
い時に投げられるクラス
? Exceptionは、正しく例外処理を行って、動作が
継続することを期待するときに投げられるクラス
? RuntimeException:実行中に起こり、コンパイラに
よって前もってチェックされない例外
? その他のException:コンパイラによって前もって
チェックされる例外
29. マッチする例外
try {
...
throw new IOException();
...
} catch (RuntimeException e) {
...
} catch (IOException e) {
// こちらが実行される
...
}
? IOExceptionはRuntimeExceptionの拡張クラスでは
ないため、RuntimeExceptionのcatch節には入らな
い
33. printStackTraceを使った例
public class ExceptionTest4 {
public static void main(String[] args) {
int[] myarray = new int[3];
try {
System.out.println("代入します");
myAssign(myarray, 100, 0);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("代入出来ませんでした");
System.out.println("例外は" + e + "です");
e.printStackTrace();
}
System.out.println("終了します");
}
static void myAssign(int[] arr, int index, int value) {
System.out.println("myAssignに来ました");
arr[index] = value;
System.out.println("myAssignから帰ります");
}
}
38. ExceptionTest5.java
public class ExceptionTest5 {
public static void main(String[] args) {
try {
mehod1(0);
mehod2(0);
mehod3(0);
} catch (Exception e) {
System.out.println("例外:" + e);
}
}
static void method1(int x) throws Exception{
}
static void method2(int x) throws Exception{
}
static void method3(int x) throws Exception{
}
}
44. インターフェースの定義
interface Lockable {
boolean lock();
boolean unlock();
}
? interface内で宣言されているメソッドはabstract
がついていなくても自動的に抽象クラスとなる
(メソッドの実装部分{}は記述できない)
? インターフェースの名前にはRunnableのように
-ableという言葉(接尾語)を付けることが多い
45. インターフェースの実装
public class Kinko implements Lockable {
@Override
public boolean lock() {
return false;
}
@Override
public boolean unlock() {
return false;
}
}
? 「実装」というのは「実際に装備する」という意味
57. MyFileReaderの場合
DebugPrintable obj = new MyFileReader(123); ○
変数objはDebugPrintable型なので
obj.debugPrint();
は呼び出す事ができるが、
obj.read()
はコンパイルエラーになる(インターフェースで
定義されていないため)
((MyFileReader)obj).read();
とキャストすることで使用できるようになる
64. インターフェースは複数実装出来る
public interface MyReadable {
void read(byte[] data);
}
public interface MyWritable {
void write(byte[] data);
}
public class MyReaderWriterClass extends MyMediaClass implements MyReadable,
MyWritable {
@Override
public void write(byte[] data) {
}
@Override
public void read(byte[] data) {
}
}