第三次作业

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

 

public class Student{

public static void main(String[] args){

Information a = new Information();

a.OutputInformation();

Information b = new Information();

b.OutputInformation();

} }

class Information{

static int num=0;

Information()

{ num++;

}

public void OutputInformation()

 {

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

}

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

 

package com;

class StaticDemo { static int x;//静态变量x int y;//实例变量y static public int getX() { return x; } static public void setX(int newX) { x = newX; } public int getY() {

return y; } public void setY(int newY) { y = newY; } }

public class ShowDemo { public static void main(String[] args) { System.out.println("静态变量x="+StaticDemo.getX()); //System.out.println("实例变量y="+StaticDemo.getY());// 非法,编译时将出错 //why StaticDemo a= new StaticDemo(); StaticDemo b= new StaticDemo(); a.setX(1); a.setY(2); b.setX(3); b.setY(4); System.out.println("静态变量a.x="+a.getX()); System.out.println("实例变量a.y="+a.getY()); System.out.println("静态变量b.x="+b.getX()); System.out.println("实例变量b.y="+b.getY()); } }

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

package com;

class Root { static{ System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参数的构造器"); } } class Mid extends Root { static{ System.out.println("Mid的静态初始化块"); } { System.out.println("Mid的普通初始化块"); } public Mid() { System.out.println("Mid的无参数的构造器"); } public Mid(String msg) { //通过this调用同一类中重载的构造器 this(); System.out.println("Mid的带参数构造器,其参数值:" + msg); } } class Leaf extends Mid { static{ System.out.println("Leaf的静态初始化块"); } { System.out.println("Leaf的普通初始化块"); }  public Leaf() { //通过super调用父类中有一个字符串参数的构造器 super("Java初始化顺序演示"); System.out.println("执行Leaf的构造器"); }

}

public class TestStaticInitializeBlock { public static void main(String[] args)  { new Leaf(); } }

 

 

 

posted @ 2015-10-17 22:42  ☀️你是我的小太阳吗  阅读(141)  评论(0编辑  收藏  举报