当编译并运行下面程序时会发生什么结果()
1 2 3 4 5 6 7 8 9 10 11 | public class Bground extends Thread{ public static void main(String argv[]){ Bground b = new Bground(); b.run(); } public void start(){ for(int i=0;i<10;i++){ System.out.println("Value of i = "+i); } } } |
编译通过,但无输出
首先继承Thread类,但是没有重写父类的run()方法,所以调用的还是父类的run()方法。
public void run() {
if (target != null) {
target.run();
}
}
这是Thread方法中的run()方法,可以看到,需要调用成员变量target的run()方法。
但是明显run()方法没有被初始化。所以是可以编译通过,但是却不会有任何的输出。
2. 关于接口的一些知识
接口中所有的成员变量都是由public static final 进行修饰的,也就是说,这是一个常量。
所有的方法都是默认是public abstract 修饰的。只允许被访问和定义,而不能被修改,因为接口中的方法是一种规范。
3. String str = new String(“abc”),“abc”在内存中是怎么分配的?
“abc”保存在常量池,而str所引用的对象是在堆中的。
4. java用监视器机制实现了进程之间的同步执行.
.What is the result of compiling and executing the following fragment of code:
1 2 3 4 5 6 7 8 9 | Boolean flag = false; if (flag = true) { System.out.println(“true”); } else { System.out.println(“false”); } |
The text“true” is displayed.
我看到的解析是 在if (flag = true)
这个语句中,先对flag进行了重新赋值 , 令flag的值指向 true 。然后flag的值为true,所以执行的是System.out.println(“true”);
这条语句。