A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1007886543 中级黑马   /  2014-5-19 21:43  /  1357 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

比如设置日期
public MyDate(int year,int month,int day)
{
this.year=year;
this.month=month;
this.day=day;

}
public MyDate()    //默认构造方法
{
this(1970,1,1)        //调用本类已定义的          //构造方法
}
为什么还要调用本类已定义的构造方法??

10 个回复

倒序浏览
你是问有了一个已经定义的构造方法了为什么还要在默认定义的构造方法里调用一个自己定义的构造方法吗?
要是你问的是这个的话,那是因为在自己定义了一个构造方法以后会覆盖默认的构造方法,要是自己写这个没有参数的构造方法,在new这个类的时候如果忘记使用参数就会报错
  1. public class Test4 {
  2.         int a ;
  3.         public Test4(int a) {
  4.                 this.a = a;
  5.         }
  6.         public static void main(String[] args) {
  7.                 Test4 t = new Test4();//这里在编译时就会提示有错
  8.                 System.out.println(t.a);
  9.         }
  10. }
复制代码

要是写一个默认的构造方法就可以在new一个新的对象时候,不用太麻烦的输入你的测试信息
回复 使用道具 举报

RE: this引用

周俊波 发表于 2014-5-19 22:10
你是问有了一个已经定义的构造方法了为什么还要在默认定义的构造方法里调用一个自己定义的构造方法吗?
要 ...


MyDate()
{this(1970,1,1)}
格式上怎么就对呢?
明显对象名是空参,但里面的内容不是空参而是(1970,1,1)
回复 使用道具 举报
一个类如果写了了自定义带参数的构造函数,就会覆盖掉默认的构造函数。大多时候,在写一个默认构造函数是为了在以后能根据实际需求,方便的创建对象。
回复 使用道具 举报
1007886543 发表于 2014-5-19 22:38

MyDate()
{this(1970,1,1)}

空参构造函数只是说在函数名的内部,就是MyDate()这个括号里不用写参数,这里是空的,但是并不是说他的方法体也必须是空的呢。不知道这样说楼主能不能明白呢?
回复 使用道具 举报
1007886543 发表于 2014-5-19 22:38

MyDate()
{this(1970,1,1)}

空参是说在new的时候不需要传递参数进去,和里面怎么样是没得关系的,就像你的第一个构造方法你拿到了3个参数,那你也可以不使用那3个参数,或者只用一部分参数,只要你喜欢都可以,第二个构造方法是在你构造对象的时候不使用参数的时候会调用它,从而再调用你第一个构造方法,new一个有默认3个参数的对象出来,用了this达到了代码复用,你写成
  1. MyDate() {
  2. this.year=1970;
  3. this.month=1;
  4. this.day=1;
  5. }
复制代码

也可以       不过你不觉的麻烦吗
回复 使用道具 举报
alax 中级黑马 2014-5-20 05:21:04
7#
Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final 使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。

回复 使用道具 举报
pray 高级黑马 2014-5-20 05:38:18
8#
你是问有了一个已经定义的构造方法了为什么还要在默认定义的构造方法里调用一个自己定义的构造方法吗?
要是你问的是这个的话,那是因为在自己定义了一个构造方法以后会覆盖默认的构造方法,要是自己写这个没有参数的构造方法,在new这个类的时候如果忘记使用参数就会报错
public class Test4 {
        int a ;
        public Test4(int a) {
                this.a = a;
        }
        public static void main(String[] args) {
                Test4 t = new Test4();//这里在编译时就会提示有错
                System.out.println(t.a);
        }
}
复制代码

要是写一个默认的构造方法就可以在new一个新的对象时候,不用太麻烦的输入你的测试信息
回复 使用道具 举报
1007886543 来自手机 中级黑马 2014-5-20 16:34:03
9#
周俊波 发表于 2014-5-19 23:01
空参是说在new的时候不需要传递参数进去,和里面怎么样是没得关系的,就像你的第一个构造方法你拿到了3个 ...

谢谢,写得很详,懂了呵呵
回复 使用道具 举报
1007886543 来自手机 中级黑马 2014-5-20 16:36:32
10#
ID1003 发表于 2014-5-19 22:52
空参构造函数只是说在函数名的内部,就是MyDate()这个括号里不用写参数,这里是空的,但是并不是说他的 ...

说的是,谢谢啦
回复 使用道具 举报
1007886543 来自手机 中级黑马 2014-5-20 16:39:38
11#
pray 发表于 2014-5-20 05:38
你是问有了一个已经定义的构造方法了为什么还要在默认定义的构造方法里调用一个自己定义的构造方法吗?
要 ...

嗯,谢谢啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马