欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

黑马程序员_java构造函数,黑马_java构造函数

来源: javaer 分享于  点击 20320 次 点评:240

黑马程序员_java构造函数,黑马_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

相关文章

    暂无相关文章
相关栏目:

用户点评