问题与思考3

 

 

定义一个原始数据类型的变量时会马上给它分配内存

声明一个对象变量时,实际上并没有给它分配内存,变量=null.

二:对象变量也可以使用“==”判断两变量值是否相等吗?

    当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等

当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。

引用代表地址,所以“==”实际上相当于比较两个引用类型变量中保存的对象地址是否相同。

三:

 

 

1.     当对象被创建时如果没有定义构造函数系统会自动引用默认的构造函数。

2.     调用在初始化之前。

3.     参数没有赋值,参数值为空。

四:

 

 

如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

五:

 

 

package test;

 

 class InitializeBlockClass {

     {field=200;}

     public int field=100;

     public InitializeBlockClass(int value)

     {this.field=value;}

    public InitializeBlockClass()

    {}

    public static void main(String[] args)

    {

        InitializeBlockClass obj=new InitializeBlockClass();

        System.out.println(obj.field);

        obj=new InitializeBlockClass(300);

        System.out.println(obj.field);

       

    }

}

 

 

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

六:

 

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

代码:

 

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.静态初始化块只执行一次。

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

七:

 

 

package test;

public class Static

{

String s="实例变量";//类的实例变量,初始化值为3

 public static void fa()//静态方法

 

  {  

   String c="静态变量";

   Static a=new Static();

   System.out.println(a.s);//在静态方法中访问类的实例变量需首先进行类的实例化

   System.out.println(c);//在静态方法中可直接访问类的静态变量

  }

 

 public static void main(String[] args)

    {

     Static.fa();

    }

}

八.

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

  package test;

 

public class question {

    static int n=0;

       public question()

       {n=n+1;}

       public static void main(String[] args)

       {

              question obj1=new question();

              question pbj2=new question();

              System.out.println("共建立了"+n+"个对象");

       }

}

 

posted @ 2017-10-19 21:38  GIGCH  阅读(132)  评论(0)    收藏  举报