类与对象课后作业

1)动手动脑

 

这段代码无法运行的原因是:类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。而定义Foo时没有参数,所以编译器报错。

2)自找麻烦

 

如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算?

执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。如果有构造方法,则以构造方法为准。

(3)动手动脑

当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。

public class Extend {
    public static void main(String[] args){
        Son s=new Son();
        s.show();
    }

}

class Father{
    String name;
    int age;
    {
        name="baba";
        age=51;
    }
}

class Son extends Father{
    String school="TD";
    void show()
    {
        System.out.println("name:"+name+"
age:"+age+"
school:"+school);
    }
}

运行结果:

(4)动手动脑

请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。

静态初始化块只执行一次。 创建子类型的对象时,也会导致父类型的静态初始化块的执行。

(5)有趣的问题

静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

public class Test2 {
    public static void main(String[] args) 
    {
        Test t=new Test();
        int a=t.getyear();
        t.input1(); 
        Test.input(a);
        t.input(a);
     }
}
class Test
{
    int year = 100;
    public int getyear()
    {
        return year;
    }
    public static void input(int a)
    {
        System.out.println("静态"+a);
    }
    public void input1()
    {
        System.out.println("实例");
    }
}

(6)神奇代码

因为它们调用的Interger类的方法不同,所以结果不同。

(7)课后作业

public class Test3 {
    public static void main(String[] args)
    {
        Testyu t=new Testyu();
        Testyu s=new Testyu();
        Testyu r=new Testyu();
        System.out.println(s.getcount());
    }
}

class Testyu{
    private static int count=0;//静态初始化
    {
        count++;//统计调用次数
    } 
    public int getcount()
    {
        return count;
    }
}

运行结果:

原文地址:https://www.cnblogs.com/a1264393659/p/4887224.html