1.
此处出错是因为new foo()中没有参数,编译器无法识别该方法。
2
其最终的值为200,首先我们应该明白其中的顺序,在对象实例化的时候
1静态字段和静态初始化块(如果有的话,这个例子中没有静态字段或静态初始化块)。
2实例字段和实例初始化块:在对象被创建时,实例字段和实例初始化块会按照它们在类中出现的顺序执行。
3构造函数:最后执行的是构造函数的代码。
在此程序中包含,实例初始化块,实例字段,一个带参函数,一个无参函数,运行时实力初始化块会被特殊化在构造函数之前执行,
首先会默认给field初值,其次会被实例字段改变为100,在构造函数运行之前会被实例初始化块改为200,因为两个函数并没有给field赋值所以
field最后的值为200,如果函数进行了赋值,那么field最后的值将是函数赋的值。
3
根据第2个问题可知这个程序第一个输出是200,第二个输出为300
4
关于这个问题,我有两个简单方法来实现,其一是通过在静态方法中创建一个类的实例来实现类的调用
其二是将实例通过参数传递给静态方法,以此来调用类中的成员
5
这个问题的产生是由于Integer(包装类)对象的缓存机制以及==运算符和.equals()方法之间的区别所导致的。当比较两个Integer对象时,应该使用.equals()方法来确保比较的是它们所包装的值而不是对象的引用。由于Integer包装的是Int型数值范围是-128--127之间,所以当第一组100时可以正常输出true,而当值为129时Integer将不会缓存,而会产生两个对象地址不同因此结果为false,如果用,equal()方法两次结果就会都为true。