黑马程序员_java构造函数

-------- android培训java培训、期待与您交流! ----------

------------------------------------------------------------------------------------------------------------------

关于java构造函数的一些探讨

1.      在java中声明对象后,java并不对对象分配内存,不像C++声明就要分配内存。

2.      在java中,只有在创建对象后才给对象分配内存,并调用默认构造函数初始化对象。

Example1:

class A

{

    int x;

    int y;

    A()

    {

      

       System.out.println("x="+x+"\ty="+y);

    }

}

public class gouzao {

    public static void main(String [] args)

    {

    A a=new A();//调用构造函数来初始化类的实例。

    }

 

}

①.  A()这个既无返回值,又无参数的函数就是构造函数,那么在主函数中创建对象a后,将会调用默认构造函数,程序中显示的给出默认构造函数,给对象初始化。并且初始值x=0,y=0。

3为了进一步分析构造函数,在看下面一段程序,以便和Example1做对比。

Example2:

class A

{

    int x;

    int y;

   

}

public class gouzao {

    public static void main(String [] args)

    {

    A a=new A();

    System.out.print("x="+a.x+"\ty="+a.y);

    }

 

}

①.执行这个程序后,你会发现x和y都获得了初值,并且x,y都为0.那么我们进一步验证了,在java中创建对象后会调用构造函数来初始化。

②.对于x,y权限问题也得做一个说明,在java中凡是没声明的类成员都为友好型(friendly)访问权限。友好类型只允许同一包中的相关类的方法访问,不让类的子类和其他类的方法访问。在同一个文件中的源程序属于同一个包。

4.再进一步看一下在对象传参的情况下,对象还调不调用默认构造函数。

Example3

class A

{

       intx;

       inty;

       A()

       {

              System.out.println("china.");

       }

       A(inta,int b)

       {

             

              x=a;

              y=b;

              System.out.println("chinaVs Japanese!");

       }

      

}

public class gouzao {

       publicstatic void main(String [] args)

       {

       Aa=new A(2,3);

       System.out.print("x="+a.x+"\ty="+a.y);

       }

 

}

Example3:

通过Example3的编译可以看到当对象有参数后不再调用默认构造函数,这一点要注意区分。

构造函数会对相应的对象进行匹配,自动进行调用。

5.构造代码块

Example4:

class C

{

       privateint x,y;

      

       C()

       {

              System.out.println("ConstructorC!");

       }

       C(inta,int b)

       {

              x=a;

              y=b;

              System.out.println("x="+x+"\ty="+y);

       }

       {

              System.out.println("Publicmethod!");

       }

}

 public class gouzao

 {

        

       publicstatic void main(String[] args)

                     {

              Cb=new C(2,3);

              Ca=new C();

                    

                     }    

       }

Example4:运行结果:

Public method!

x=2 y=3

Public method!

Constructor C!

 

通过构造代码块可以看出:

①.对象一创建就运行,而且优先于构造函数执行。

②.而且构造函数是给所有的对象统一进行初始化,即每创建一个对象便首先调用一次构造代码块。

6.派生类的构造函数。

Example5:

 

class A

{

       A()

       {

              System.out.println("ConstructorA.......");

       }

}

class B extends A

{

       B()

       {

              System.out.println("ConstructorB........");

       }

}

class C extends B

{

       C()

       {

              System.out.println("ConstructorC........");

       }

}

 public class gouzao

 {

        

       publicstatic void main(String[] args)

                     {

              Cb=new C();

                    

                     }    

             }

Example5:执行结果:

Constructor A.......

Constructor B........

Constructor C........

通过这个程序可以看出:

①.Java中继承者含有基类的所有属性和方法。

②.当创建子类对象时,由于子类拥有超类所有的属性和方法,而必须要给对象分配保存这些属性的内存,这就必须要调用构造函数来初始化这些内存。

最后做一个总结:

①.             在java中声明对象并不分配内存,A a,声明了一个对象a,但是java中不会分配内存。

②.             创建对象后,即new 一个对象,java首先给对象分配足以保存相关数据的内存。

③.             分配完内存后就会自动调用默认构造函数来初始化。有构造代码块,先调用构造代码块。

④.             有参数的调用有参构造函数。

--------------------------------------------------------------------------------------------------------------------------

------- android培训java培训、期待与您交流! ----------

详情请查看:http://edu.csdn.net/heima

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值