1.下代码为何无法通过编译?哪儿出错了?

如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。所以可以将“Foo obj1 = new Foo();”改为“Foo obj1 = new Foo(4);”。
2.请依据代码的输出结果,自行总结Java字段初始化的规律。
public static void main(String[] args) {
InitializeBlockClass obj=new InitializeBlockClass();
System.out.println(obj.field);
obj=new InitializeBlockClass(300);
System.out.println(obj.field);
}
}
结果截图:
在“public int field = 100;”在“{field=200;}”之前时,是“{field=200;}”说了算;在之后时,是“public int field = 100;”说了算。也就是谁比较靠后就是谁初始化起作用。执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。执行类的构造函数。类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。
3.观察输出结果,总结出“静态初始化块的执行顺序”。
结果:
静态初始化块的执行顺序:父类的静态初始化块 子类的静态初始化块 父类的初始化块 父类的构造函数 子类的初始化块 子类的构造函数
4.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
public class Text3
{
int x = 3;//类的实例变量,初始化值为3
static int y = 4;//类的静态变量,初始化值为4
public static void method()//静态方法
{
System.out.println("实例变量x = " + new Text3().x);//在静态方法中访问类的实例变量需首先进行类的实例化
System.out.println("静态变量y = " + y);//在静态方法中可直接访问类的静态变量
}
public static void main(String[] args)
{
Text3.method();
Text3 ex = new Text3();
System.out.println("x = " + ex.x);
System.out.println("y = " + ex.y);
}
}
5.
使用上页幻灯片中定义的类,以下代码输出结果是什么?
运行结果分为两部分:
①“public int field = 100;”在“{field=200;}”之前
②“public int field = 100;”在“{field=200;}”之后
java字段初始化的规律:所有类的变量都默认初始化为null,比如String a; Integer b;数字类的原始数据类型默认初始化为0,比如int a; short b; char c;boolean默认初始化为false;
6.对象变量也可以使用“==”判断两变量值是否相等吗?
public class T {
public static void main (String[] args){
Foo obj1=new Foo();
Foo obj2=new Foo();
System.out.println(obj1==obj2);
}
}
class Foo{
int value=100;
}
当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等 当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。 引用代表地址,所以“==”实际上相当于比较两个引用类型变量中保存的对象地址是否相同