类和对象课后作业

  1.

public class InitializeBlockDemo {

 /**   * @param args   */

      public static void main(String[] args) {      

          InitializeBlockClass obj=new InitializeBlockClass();  

           System.out.println(obj.field);      

           obj=new InitializeBlockClass(300);   

          System.out.println(obj.field);  

      }

}

class InitializeBlockClass{  

//下面这句在初始化块之前与之后,会影响到field字段的初始值  //

        public int field=100;  

       {    

            field=200;

      }  

       public int field=100;

       public InitializeBlockClass(int value)

      {  

          this.field=value;

      }

     public InitializeBlockClass(){     

     }

}

初始化块主要用于对象的初始化操作,在创建对象时调用,可以用于完成初始化属性值、加载其他的类的功能。
初始化块和构造方法功能类似,可以再创建对象的时候完成一些初始化的操作,一般的情况下,构造方法初始化和初始化块初始化可以通用。


构造方法在初始化的时候可以通过参数船只,但是初始化块不能,初始化块的初始化在构造方法之前执行,如果搞糟方法多次重载,此时可以考虑构造方法中共通的代码放到初始化块中进行初始化。

执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。

2.初始化执行顺序

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();   

 }

}

结论:

1. 父类static(顺序按照代码书写顺序进行)
2. 子类static(顺序按照代码书写顺序进行)
3. 父类非static域、构造器(顺序按照代码书写顺序进行)
4. 子类非static域、构造器(顺序按照代码书写顺序进行)

3.

public class StaticTest {

     public static void main(String args [])

    {

       test b=new test();   b.print();  

   }

}

class test {  

   int i=1;   

  static void print()    

  {       

       test a=new test();  

       System.out.println(a.i);  

   }

}

在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)需要创建对象,再通过对象访问实例成员。

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

public class Test3 {
    private static int i = 0;

    public Test3()
    {
        i++;
    }

    public static int getNumber()
    {
        return i;
    }

    public static void main(String[] args) {
        Test3 t1 = new Test3();
        Test3 t2 = new Test3();
        Test3 t3 = new Test3();
        Test3 t4 = new Test3();
        System.out.println("一共创建了" + Test3.getNumber() + "个对象");
    }
}

结果截图:

原文地址:https://www.cnblogs.com/wanggang-java/p/4886152.html