1.
以下代码为何无法通过编译?哪儿出错了?
因为查不到Foo(),所以无法通过编译。错在:在错误的下方中已经定义了Foo类,之后定义的Foo()中有参数,而在错误处中Foo()中没有参数,所以导致错误
2.
package classtext1; public class homework { { field=200; } public int field = 100; public homework(int value) { this.field=value; } public homework() { } public static void main(String[] args) { homework obj = new homework(); System.out.println(obj.field); obj=new homework(300); System.out.println(obj.field); } }
编译结果:
函数中定义的默认值谁排在前面谁被执行。而有参的构造函数则调用谁则会执行谁。
3.
静态初始化块只执行一次,而创建子类型的对象时其父类型的静态初始化块的执行。
4.
静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
public class Satic { public static void Satic1(Satic n) { n.Satic2(); } public static void Satic2() { System.out.println("hello world"); } public static void main(String[] args) { Satic b = new Satic(); Satic1(b); } }
5.两对整数明明完全一样,为何一个输出true,一个输出false?
输出诡异的结果,原因何在?
Integer类只对-128~127之间的对象做了缓存,(Integer)127 == (Integer)127两边装箱后,实际指向堆内存中同一个对象,(Integer)129 == (Integer)129,装箱为引用类型后,没有做缓存,指向堆内存中不同对象,所以比较结果为false。其源代码为
从中可以更清楚的看到。
6.使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”
public class Satic { public static int sum=0; public static void Satic1(Satic n) { ++sum; n.Satic2(); } public static void Satic2() { System.out.println("你已经创建了"+sum+"个对象"); } public static void main(String[] args) { Satic b = new Satic(); Satic1(b); } }