课堂作业及 动手动脑问题整理

课堂作业一

使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。

程序:

package com;

public class Duixiang {

public static void main(String[] args){

duixiang a=new duixiang();

a.out();

duixiang b=new duixiang();

b.out();

}

}

class duixiang{

static int n=0;

duixiang(){

n++;

}

public void out(){

System.out.println("你已经创建了"+n+"个对象!");

}

}

结果截图:

课堂问题整理

一、进行试验:

运行结果:100   300

Java字段初始化的规律:所有类的变量都默认初始化为null,数字类的原始数据类型默认初始化为0boolean默认初始化为false;进行初始化的地方有初始化块和构造函数,初始化快分为静态初始化块和实例初始化块。执行类成员定义时指定的默认值或类的初始化块,到底执行哪个要看哪个“排在前面”。

二、动手动脑:

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

请自行编写示例代码验证以上结论。

程序:

package com;

public class Animal {

public boolean live=true;

public String skin="";

public void eat(){

System.out.println("动物需要吃食物");

}

public void move(){

System.out.println("动物会运动");

}

}

class Bird extends Animal{

public String skin="羽毛";

public void move(){

System.out.println("鸟会飞");

}

class Zoo{

public static void main(String[] args){

Bird bird=new Bird();

bird.eat();

bird.move();

System.out.println("鸟有:"+bird.skin);

}

}

截图:

三、动手动脑:

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

        结果截图:

静态初始化块的执行顺序:

1、静态初始化块只执行一次。

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

四、一个有趣的问题:

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

请编写代码验证你的想法。

程序:

package com;

public class ButtonFactory {

private static ButtonFactory _instance=null;

public static ButtonFactory getInstance(){

if(null==_instance)

_instance=new ButtonFactory();

return _instance;

}

原文地址:https://www.cnblogs.com/cn123456/p/4887659.html