作者CrazyBoss (CrazyBoss)
看板java
标题[问题] 请问三个程式的印出结果
时间Sat Jul 18 00:59:09 2015
第一个
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://webptt.com/cn.aspx?n=bbs/java/M.1437152352.A.45C.html
1F:推 dream1124: 1, 2 题都对了 07/18 17:06
2F:推 tarious: 3.1 F还没建构; 3.2 override; 3.3 upcasting 07/18 17:56
3F:→ tarious: 3.4 private method 无法被override 07/18 17:57