[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends-ml 12276] ズームイン Java での課題
高橋(智)です。
本日も早朝からお疲れ様でした。
以下、ズームインJavaでの課題を書いておきます。
========================================================================================
1.2.4.3 ラベル
[疑問]
P15の最下行で「ラベルは行の先頭の文でしか宣言できない」とあるが、以下のような
コードはどのようなコンパイルエラーになるのか?
public class LabelTest {
public static void main(String[] args) {
System.err.println("test"); LOGLINE2:
}
}
--> 結果は
C:\tmp>javac LabelTest.java
LabelTest.java:4: 式の開始が不正です。
}
^
では、以下のようなソースコードはOKか?
public class LabelTest {
public static void main(String[] args) {
System.err.println("test"); LOGLINE2:;
}
}
--> OK!!
1.2.5 assert
[疑問]
P17の最下部で「...評価する式...。結果がfalseの場合は、コンパイラがAssertErrorを
発行します」とあるが、実際AssertErrorが発生した時何が起こるのか?
VMが停止するのか? VMが終了するのか? 該当スレッドが終了するのか?
以下のコード実行するとどうなるか?
public class AssertTest implements Runnable {
public static void main(String[] args) throws Exception {
Thread t = new Thread(new AssertTest());
System.out.println("start and join");
t.start();
t.join();
System.out.println("end");
System.in.read();
}
public void run() {
assert(false);
}
}
--> 結果は
start and join
end
と表示してキーボードからの入力待ちになる。つまり該当スレッドが終了する。
[疑問]
以下の、Javaの検査例外に関する記事のURLは?
■IBM developerWorksの記事「Javaの理論と実践:例外をめぐる議論」
■Bluce Eckelの記事 "Does Java need Checked Exception ?"
--> 徹さんURLをお願いします
1.2.6 コンストラクタの連結
[疑問]
P26の第2段落で「super()と同様に、this()メソッドはコンストラクタの最初の行で
使用しなければいけないため」とあるが、以下のコードはコンパイルできるのか?
class A {
public A() {
}
}
class B extends A {
public B() {
super();
this(10);
}
public B(int x) {
}
}
public class InitTest {
public static void main(String[] args) {
new B();
}
}
--> 結果は、もちろん
InitTest1.java:9: this の呼び出しはコンストラクタの先頭文でなければなりません。
this(10);
^
では、上のコードから super(); の呼び出しを削って、クラスAのコンストラクタは
何時呼び出されるのだろうか?
--> コンパイラが、クラスAのデフォルトコンストラクタの呼び出しを追加している
--> それでは、ソースコードの何処に追加するのだろうか?
ひょっとして以下のコードを実行すると、System.out.println("A()"); が
2度も実行されるのでは??
class A {
public A() {
System.out.println("A()");
}
}
class B extends A {
public B() {
this(10);
}
public B(int x) {
super();
}
}
public class InitTest {
public static void main(String[] args) {
new B();
}
}
--> もちろんそんなことはない。1度だけ。
========================================================================================
--
高橋智宏
Java読書会( http://www.javareading.com/bof/ )