[問題] 請問三個程式的印出結果
第一個
public class A extends Thread {
public void run() {
try {
sleep(10000);
}
catch(InterruptedException ie) {
}
}
public static void main(String[] args) {
A a1 = new A();
long startTime = System.currentTimeMillis();
a1.start();
System.out.println(System.currentTimeMillis() - startTime);
}
}
這支程式的執行結果都是0
是不是因為a1是main fork出來的
所以印出來都是main的執行時間?(main不會等a1,所以執行時間很短)
-----------------------------------------------------------------分隔線
第二個
public class MyClass {
static String myName = "hello";
MyClass getMyClass() {
System.out.println(myName);
return null;
}
public static void main(String[] args) {
System.out.println(new MyClass().getMyClass().myName);
}
}
這隻程式會印hello"兩次"
請問流程是
第一次印:new出一個MyClass的instance並執行getMyClass()的println(myName)
第二次印:執行在main的println(instance.myName)
邏輯是這樣嗎?
-----------------------------------------------------------------分隔線
第三個
class E {
int i = 9;
public void method1() {
System.out.println("E1" + i);
}
private void method2() {
System.out.println("E2" + i);
}
E() {
method1();
}
public void my() {
method2();
}
}
public class F extends E {
int i = 5;
public void method1() {
System.out.println("F1" + i);
}
public void method2() {
System.out.println("F2" + i);
}
public static void main(String[] args) {
E e = new F();
e.method1();
System.out.println(e.i);
e.my();
}
}
執行結果為
F10
F15
9
E29
第一個行結果F10,為什麼i為0?不會讀取到5嗎?
第二行因為upcasting,所以會先執行sub class的function對吧?
第三行完全不懂邏輯
第四行是因為my()在super class呼叫method2
而super class的method2又是private,所以會先執行?
麻煩各位高手幫小弟解惑
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.118.9.211
※ 文章網址: https://www.ptt.cc/bbs/java/M.1437152352.A.45C.html
推
07/18 17:06, , 1F
07/18 17:06, 1F
推
07/18 17:56, , 2F
07/18 17:56, 2F
→
07/18 17:57, , 3F
07/18 17:57, 3F
java 近期熱門文章
PTT數位生活區 即時熱門文章