黑马程序员技术交流社区

标题: 构造函数的问题 [打印本页]

作者: 古银平    时间: 2012-5-20 18:11
标题: 构造函数的问题
构造函数除了可以给对象进行初始化,还有什么作用吗?对this不是很明白,this代表它所在函数所属对象的引用,还有this的具体应用?
作者: 冯越    时间: 2012-5-20 18:19
构造方法一般用于对象的初始化,当然你也可以做些别的。构造方法就是特殊的方法 方法可以干的事情它都能干。 this表示当前对象的引用,比如说一个类的构造方法:
public class Student {
        private String name;
        private int age;
        private int score;

        Student(String name, int age, int score) {
                this.name = name;
                this.age = age;
                this.score = score;
        }
}

构造方法里的变量名字和我们类内的成员变量名字一样,为了区分 这时我们就可以运用this了 ,this.name代表当前对象的name 也就是成员变量name 其他依次类推。

作者: 韩国军    时间: 2012-5-20 18:24

构造函数具有以下几个特点:
     第一:构造函数名与类名相同;
     第二:构造函数不返回任何值,也没有返回类型;
     第三:每一类可以有零个或多个构造方法;
     第四:构造方法在创建对象时自动执行,一般不用显示地直接调用。
     其次,就上面几个需要说明的特点进一步进行解释:
     特点一:构造函数名与类名相同。这个很简单,只要知道Java语言是区分大小写即可;
     特点二:这一特点需要说明,并加以强调。构造函数不返回任何值,也没有返回类型,因此在构造函数前面不可添加各种基本数据类型,也不可添加引用类型。关键问题是,既然构造函数不返回任何值,部分人很可能会在构造函数前面加上void关键字,这正是问题所在。虽然没有返回类型,而且void也表示不返回任何值,但在构造函数前面最好不要添加void关键字。如果构造函数是无参的,编译没有问题,否则,则会有错误。例如下例所示:

public class MyTest
{
int i;
String s;
public MyTest()
{
   System.out.println("调用无参构造函数");
}
public MyTest(int i)
{
   this.i=i;
   System.out.println("调用单参函数*******i="+i);
}
public MyTest(int i,String s)
{
   this.i=i;
   this.s=s;
   System.out.println("调用双参函数.....i="+i+", s="+s);
}
public static void main(String []args)
{
   MyTest t1=new MyTest();
   MyTest t2=new MyTest(2);
   MyTest t3=new MyTest(3,"Hello");
}
}
在上例中,三个构造函数进行了重载,这时,在构造函数的前面不可添加void关键字,否则会有编译错误。
特点三:每一类可以有零个或多个构造方法。如果类没有构造函数,编译器会自动添加默认的无参构造函数,当调用默认的构造函数时,就会利用构造函数为类的成员变量进行初始化,当然不同的类型其默认的初始值不同。一旦用户定义了构造函数,则不会产生默认的构造函数。当有多个构造函数时,系统会根据产生对象时,所带参数的不同而选择调用不同的构造函数。
特点四:构造方法在创建对象时自动执行,一般不用显示地直接调用。构造函数的作用是对类的成员变量进行初始化操作,因此都是在创建类的对象是自动执行。


this的作用:
1,在构造器中,代表该构造器所创建的实例对象。
2,在方法中,指调用该方法的对象。
3,在流离块中。只流离块所属的类的实例。
总而言之,记住一句话,this是指当前对象,哪个对象在调那个方法,this就代表那个对象。


作者: 胥江    时间: 2012-5-20 19:46
构造方法一般作用实在实例化对象时对对象进行一些初始化工作,比如在实例化Person对象时,你可以通过构造方法可以对Person的身高体重等属性进行初始化,而this这个关键字指的就是本类的对象,通过this可以操作本类对象里的属性和方法。
作者: 江英英    时间: 2012-5-20 20:23
构造函数是一个特殊的函数,没有返回值类型,函数名和类名相同,new关键字创建对象时自动调用,
当我们想在创建对象的时候就执行一段代码,就可以把这段代码放在构造函数中,例如:
对成员变量的赋值,定义构造函数,接收参数,在执行构造函数的时候,就可以对成员变量赋值,
构造函数还可以在其他构造函数的第一条语句中使用this()形式调用,一个类如果没写任何构造函数,那么会自动生成一个,这个自动生成的构造函数没有参数,也没有任何代码,如果写了一个有参的,就不会自动生成无参的了.
this代表调用当前函数的对象,通常在set方法和构造函数中都会使用,当局部变量和成员变量同名时访问成员变量

作者: 黄奕豪    时间: 2012-5-20 20:27
本帖最后由 黄奕豪 于 2012-5-20 20:31 编辑
  1. //构造函数他们都说得差不多了!!我补上一点this的吧,this是对本类对象引用,什么叫做本类引用呢,就是包含this的那个类,比如说

  2. class Test
  3. {
  4.         private int age;
  5.         private String name;
  6. //构造函数除了初始化对象外还有一些妙用,比如你把构造函数加了private修饰,外部类就不能新建这个类对象,只能通过你本类提供一个新建这个类对象的函数来新建类。
  7.         Test(int age,String  name)
  8.         {
  9. /*this的英文意思是:这个。就是指用这个类初始化的当前对象,在这里他代表的是Test这个类,说白了就是谁用我,我是谁,Test初始化为张三,那this.name就是张三.name*/

  10.                 this.age=age;
  11.                 this.name=name
  12.         }
  13. }
复制代码

作者: 余宏    时间: 2012-5-20 20:40
      构造函数:
      1.构造函数的命名必须和类名完全相同;而一般方法则不能和类名相同.
  2.构造函数的功能主要用于在类的对象创建时定义初始化的状态.它没有返回值,也不能用void来修饰.这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择.而其他方法都有返回值.即使是void返回值,尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的.
  3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用.
  4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的.而一般方法不存在这一特点
this:
1. this是指当前对象,
2. 把this作为参数传递 ,

作者: 付左军    时间: 2012-5-20 21:14
构造函数用于给对象初始化,是指所描述的对象一创建就该有的属性,方法,比如人对象的年龄,姓名之类的,this是指调用该函数的对象
作者: niceBoy    时间: 2012-5-20 22:04
构造函数除了可以给对象进行初始化,还有什么作用吗?还是初始化
对this不是很明白,this代表它所在函数所属对象的引用,还有this的具体应用?
this关键字只能在方法内部使用,表示对”调用方法的那个对象“的引用。

作者: 陌花╮有意、    时间: 2012-5-21 01:17
对于this代表当前对象的引用,如图:

作者: 陌花╮有意、    时间: 2012-5-21 01:20
对于this,代表当前对象的引用 指向自身,如图:





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