1.以下代码无法通过编译,哪里出错了?
原因:构造函数Foo()未定义,如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。
截图如下:
2.请依据代码的输出结果,自行总结Java字段初始化的规律
输出结果为:100 300
总结Java字段初始化的规律:Java字段初始化规律系统会按顺序对Java字段进行初始化,如果有好几个方法都对同一个变量进行了初始化。Java会将最后一次的初始化结果赋给该变量。
3.动手动脑:当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行,请自行编写代码验证以上结论
class GrandFather
{
static
{
System.out.println("GrandFather的静态初始化块");
}
}
class Father extends GrandFather
{
static
{
System.out.println("Father的静态初始化块");
}
}
class Son extends Father
{
static
{
System.out.println("Son的静态初始化块");
}
}
public class Hello
{
public static void main(String[] args)
{
new Son();
}
}
4.动手动脑:请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”
静态初始化块只执行一次。创建子类型的对象时,也会导致父类型的静态初始化块的执行。
5.静态方法只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或者方法)
请编写代码验证你的想法
public class Test {
public static void main(String[] args){
Foo f;
f=new Foo();
f.display();
}
}
class Foo{
public static void display(){
System.out.println("调用成功!");
}
}
6.使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。
class Num{
private static int n;
public Num()
{
n++;
}
public static int get()
{
return n;
}
}
public class Number {
public static void main(String[] args){
Num n1=new Num();
Num n2=new Num();
System.out.println("创建对象的个数为:"+Num.get( ));
}
}