黑马程序员技术交流社区

标题: 构造函数什么时候用,有点模糊 [打印本页]

作者: Spring up    时间: 2012-11-29 11:26
标题: 构造函数什么时候用,有点模糊
我知道构造函数是给类初始化的,但是构造函数应该是什么时候用比较合适呢?
作者: 黑马_郑亮新    时间: 2012-11-29 11:59
本帖最后由 黑马_郑亮新 于 2012-11-29 12:01 编辑

class Test_14{     
        int x,y;      
Test_14(){
}
Test_14(int c,int d){
        //构造函数;含参的构造函数;构造方法必须要和类名一致     
        //且没有返回值  
        x=c;   
        y=d;  
}
   void  output(){      
           System.out.println(x);     
   System.out.println(y);     
   }

   public static void main(String args[]){     
           Test_14 t=new Test_14();
   //实例化对象,这时候x,y没有赋值,默认初始值为0;     
   t.output();   
   t.x=3;t.y=4;   
   t.output();     
   }        
   
   }
构造函数就是在实例化一个对象时用的
作者: madianguo    时间: 2012-11-29 12:13
构造函数就是在实例化一个对象时用的,例如由个leiA,LeiA的构造函数和LeiA同名,而且不能有返回值,连void也不可以.你用LeiA a;只是声明一个空的对象a,并没有为a分配内存地址,这个时候你引用a,将会得到a可能尚未初始化的错误.当你用LeiA的构造函数,例如public LeiA()时:LeiA a=new LeiA();这时就为a分配了内存空间,可以应用a了.说到底,构造函数就是为了初始化类对象用的.

作者: 聽聽我dē❤    时间: 2012-11-29 12:47
首先要注意的是Java的构造器并不是函数,所以他并不能被继承,这在我们extends的时候写子类的构造器时比较的常见,即使子类构造器参数和父类的完全一样,我们也要写super就是因为这个原因。
构造器的修饰符比较的有限,仅仅只有public private protected这三个,其他的例如任何修饰符都不能对其使用,也就是说构造器不允许被成名成抽象、同步、静态等等访问限制以外的形式。
因为构造器不是函数,所以它是没有返回值的,也不允许有返回值。但是这里要说明一下,构造器中允许存在return语句,但是return什么都不返回,如果你指定了返回值,虽然编译器不会报出任何错误,但是JVM会认为他是一个与构造器同名的函数罢了,这样就会出现一些莫名其妙的无法找到构造器的错误,这里是要加倍注意的。

在我们extends一个子类的时候经常会出现一些意想不到的问题,我在这里说一些和构造器有关的。
首先说一下Java在构造实例时的顺序(不讨论装载类的过程)
构造的粗略过程如下
1、分配对象空间,并将对象中成员初始化为0或者空,java不允许用户操纵一个不定值的对象。
2、执行属性值的显式初始化(这里有一点变化,一会解释,但大体是这样的)
3、执行构造器
4、将变量关联到堆中的对象上

作者: 聽聽我dē❤    时间: 2012-11-29 12:49
构造函数就是在实例化一个对象时用的,例如由个leiA,LeiA的构造函数和LeiA同名,而且不能有返回值,连void也不可以.你用LeiA a;只是声明一个空的对象a,并没有为a分配内存地址,这个时候你引用a,将会得到a可能尚未初始化的错误.当你用LeiA的构造函数,例如public LeiA()时:LeiA a=new LeiA();这时就为a分配了内存空间,可以应用a了.说到底,构造函数就是为了初始化类对象用的.
作者: 何伟    时间: 2012-11-29 15:45
本帖最后由 何伟 于 2012-11-29 16:04 编辑

构造函数就是来给你new的对象初始化属性的,构造函数里有什么属性,new的对象就具备什么属性。比如你的构造函数是来描述人



描述人的构造函数
class 人
{
     String   姓名=张三    //
     int  身高=100cm    //这些就是构造函数所具备的属性
     int 年龄=1  //
        void   show(名字我随便起的)           //这个就是构造函数具备的功能
      {
           人具备学习JAVA的能力     //这里就是描述人具备的功能
       }
}

在你需要构造函数里的功能时候,你就建立一个对象

人(类名)  甲(对象名)=new  人();//这就是建立一个对象

那么甲对象一建立就具备了函数里的    姓名     身高    年龄 这些属性的初始化值              还有学习java这些属性和功能


我写的有点乱  你可以把毕老师的PDF下载回去看看,我已经上传

传智播客_Java培训_毕向东_Java基础[03-面向对象].pdf

164.43 KB, 下载次数: 61

这是毕老师讲课PDF你可以去看看






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2