黑马程序员技术交流社区
标题:
为什么调用构造函数用this不用类名啊??
[打印本页]
作者:
韩慧阳
时间:
2012-5-10 17:50
标题:
为什么调用构造函数用this不用类名啊??
今天回答问题的时候突然发现个问题。问题就如题了哈!
为什么在调用构造函数时使用的this而不能用类名啊??
作者:
Gao23616
时间:
2012-5-10 17:55
构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的
作者:
杨威
时间:
2012-5-10 18:06
不是太明白楼主的问题
构造函数名它是与类名同名的,一般对事物进行描述时而该事物具备一些特有属性时,使用构造函数,因为对象已建立这些属性就被赋给对象。
楼主说的是不是在构造函数中为什么用类似this.name=name;的语句,如果是,那原因是这样的
如果不用this关键字,也就是name=name;也就相当于局部变量赋给局部变量,当在主函数中为对象初始化时,你赋予的name属性值,确实传给了构造函数的name,但是它就不会将其赋予给构造函数中的name,而加上this后,哪一个对象调用,this就等于那个对象。相应代码也就不贴了,楼主应该明白的。
作者:
郭振
时间:
2012-5-10 18:30
构造方法是在产生对象时被java系统自动调用的,我们不能在程序中像调用其他方法一样去调用构造方法(必须通过关键词new自动调用它)。但我们可以在一个构造方法里调用其他重载的构造方法,不是用构造方法名,而是用this(参数列表)的形式,根据其中的参数列表,选择相应的构造方法。例如:
public class Person{
String name;
int age;
public Person(String name){
this.name = name;
}
public Person(String name,int age){
this(name);
this.age = age;
}
}
作者:
It's_Zero
时间:
2012-5-10 19:20
this 指向的是 new 出来的对象的地址 而 类名.属性调用的是静态属性
package com.cn;
public class ThisDemo {
int age;
public ThisDemo(int age,String s){
this.age=age;
System.out.println(ThisDemo.this);//输出 com.cn.ThisDemo@de6ced
System.out.println(this);//输出 com.cn.ThisDemo@de6ced
}
public static void main(String[] args){
ThisDemo t = new ThisDemo(2,"s");
System.out.println(t);//输出 com.cn.ThisDemo@de6ced
}
}
复制代码
this 地址的来源于new
你可以通过这个代码发现 三个输出地址的内容是一样的
用类名的就静态变量和方法
作者:
于陈
时间:
2012-5-10 19:26
楼主的意思我怎么看懂
分两种情况讲吧,首先在构造函数里面的this
class Clerk {
public Clerk(String name, int num, float sal) {
this.name = name;// 名字
this.num = num;// 员工号
this.sal = sal;// 薪水
}
}
this是指代当前对象,当你new的时候,this就指代你当前的这个对象。
但是要注意this不能在静态方法中使用,this方便了程序的书写,
也增加了程序可读性。
另外一种情况:
构造函数是不需要你去调用的,在你创建对象的时候jvm会自动的去调用它,但是还是有这么几种情况可以去调用的
对构造函数的调用可以
通过反射来实现
,或者是下面这种情况
public class Test {
[/color]
public static void main(String[] args) {
new Son();
}
}
class Person{
public Person(){
System.out.println("aaa");
}
public Person(int x){
this();
System.out.println("bbb");
}
}
class Son extends Person{
Son(){
super(1);
}
}
复制代码
这断代码就可以看出子类一般会自动调用父类的,但是如果在带参数的构造函数里面写上
this()
;就可以通过在子类里面super(x);....x是参数,来
调用父类的构造函数
。
作者:
黄坚声
时间:
2012-5-10 21:16
在一个Java类中,其方法可以分为成员方法和构造方法两种。构造方法是一个与类同名的方法, 在Java类中必须存在一个构造方法。如果在代码中没有显示的体现构造方法的话,那么编译器在编译的时 候会自动添加一个没有形式参数的构造方法。这个构造方法跟普通的成员方法还是有很多不同的地方。如 构造方法的话一律是没有返回值的。而且也不用void关键字来说明这个构造方法没有返回值。而普通的方 法可以有返回值、也可以没有返回值,程序员可以根据自己的需要来定义。不过如果普通的方法没有返回 值的话,那么一定要在方法定义的时候采用void关键字来进行说明。其次构造方法的名字有严格的要求, 即必须与类的名字相同。也就是说,Java编译器发现有个方法与类的名字相同才把其当作构造方法来对待 。而对于普通方法的话,则要求不能够与类的名字相同,而且多个成员方法不能够采用相同的名字。在一 个类中可以存在多个构造方法,这些构造方法都采用相同的名字。只是形式参数不同。Java语言就凭用户 参数的参数来判断调用那个构造方法。
this关键字除了可以调用成员变量之外,还可以调用构造方 法。如下面的代码:
public class Student{ //定义一个类,类的名字为student
public Student(){ //定义一个方法,名字与类相同故为构造方法
this(“luobo”) }
public Student(String name){ //定义一个带形式参数的构造方法
}
}
作者:
黄坚声
时间:
2012-5-10 21:19
也可以这样理解:
如果在当前类的内部调用当前类的构造方法,就必须这样this(参数列表);规定放在构造方法的第一行上。
new ClassName(参数列表);是用来构造对象的。
作者:
李啸
时间:
2012-5-10 22:01
用类名点构造函数说明那个构造函数是静态的 那么你见过静态的构造吗
this关键字代表当前对象
作者:
成都校区
时间:
2012-5-11 12:24
看了各种答案,我就一个晕啊,不过总算想起来了,这个问题老师说过,不过其实我也忘记了,查了半天才想想起来。
简单的说下:
this指代的是本类中的对象,而这里的对象指的是本类new出来的对象。举例:有一个Person类,那么this引用的时候指的是Person p=new Person();里面的p,也就是说这里this=p------this()=p();注意这里的this指代的是“对象”---->p,(如果楼主的意思是Person(),没有产生对象,这样的调用有什么意义呢)所以如果你直接使用类名的话,就必须new Person()这样的形式,这就意味着你每次使用这个构造方法的时候,会重新再产生一个对象,也就是说不再
作者:
成都校区
时间:
2012-5-11 12:24
上面的没发表完,看下面
作者:
成都校区
时间:
2012-5-11 12:27
看了各种答案,我就一个晕啊,不过总算想起来了,这个问题老师说过,不过其实我也忘记了,查了半天才想想起来。
简单的说下:
this指代的是本类中的对象,而这里的对象指的是本类new出来的对象。
举例:有一个Person类,那么this引用的时候指的是Person p=new Person();里面的p,也就是说这里this=p------this()=p();
注意这里的this指代的是“对象”---->p,(如果楼主的意思是Person(),,没有new就没有产生对象,没有产生对象,这样的调用有什么意义呢) 所以如果你直接使用类名的
话,就必须new Person()这样的形式,这就意味着你每次使用这个构造方法的时候,会重新再产生一个对象,你就不能把属性赋给到你自己生成的对象 。
希望我的回答还算满意!
作者:
王怡然
时间:
2012-5-11 13:30
this代表当前对象的引用。使用的时候,谁调用方法,this就代表谁。
用于局部变量隐藏成员变量,写功能的时候,可能用到this.
构造函数中使用this,如果此类继承了其他类,在此类加载的同时,构造函数会默认的去找父类构造函数,加上this()就是手动指定本类构造函数;并且这个this()必须在程序的第一行;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2