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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 侯鹏成 中级黑马   /  2014-12-17 23:38  /  1389 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个有参构造方法能否通过this([参数1,参数2....])来调用其他构造方法

9 个回复

倒序浏览
当然可以 , this代表当前类对象 ~
回复 使用道具 举报
其他有参构造方法。。。
回复 使用道具 举报
曛丨黯淡浮华 发表于 2014-12-17 23:39
当然可以 , this代表当前类对象 ~

如果用this调用一个有参构造方法,比如参数类型为int a,调用形式是this(int a);吗
回复 使用道具 举报
本帖最后由 曛丨黯淡浮华 于 2014-12-17 23:50 编辑
侯鹏成 发表于 2014-12-17 23:44
如果用this调用一个有参构造方法,比如参数类型为int a,调用形式是this(int a);吗 ...
你看看我写的,
  1. public class Test {

  2.         private String name;
  3.         private int age;

  4.         Test(String name)
  5.         {
  6.                 this.name = name;
  7.         }

  8.         Test(String name, int age)
  9.         {
  10.                 this(name);
  11.                 this.age = age;
  12.         }

  13.     public static void main(String[] args) {
  14.         
  15.             Test t1 = new Test("张三");

  16.             Test t2 = new Test("李四",18);

  17.             System.out.println(t1.name+"..."+t1.age);
  18.       
  19.               System.out.println(t2.name+"..."+t2.age);
  20.     }

  21. }
复制代码



回复 使用道具 举报

恩试了可以运行,但是为什么主函数没有类
回复 使用道具 举报

我的意思是这样测,你看看问题在哪里
public class Test {

        private String name;
        private int age;

        Test(String name)
        {
                this.name = name;
                                System.out.println(this.name);
        }

        Test(int age)
        {
                this(name);
                this.age = age;
                                System.out.println(this.age);
        }
class Testt
{

    public static void main(String[] args) {
        
           Test t1 = new Test(18);

           // Test t1 = new Test("李四",18);

           // System.out.println(t1.name+"..."+t1.age);
      
             // System.out.println(t2.name+"..."+t2.age);
    }

}
回复 使用道具 举报
本帖最后由 曛丨黯淡浮华 于 2014-12-18 08:56 编辑
侯鹏成 发表于 2014-12-18 00:19
我的意思是这样测,你看看问题在哪里
public class Test {
你写的让我头晕晕 ,首先,this()是有带参数的, 你需要传递一个参数,不能直接传name进去,name还没进内存,所以导致引用不到name。
你可以给name用static修饰 , 因为static 是随着类的加载而加载的 ——
然后是,一个java文件里,可以存在多个类 , 但是只能有一个类能被public 修饰,且该java文件名也必须是被public修饰的类名.java . 否则报错。
例:  public class Test{}  , class Test1{}  -------------  那么该文件名是 Test.java    ----JVM虚拟机就会找到它,并且默认它为入口地址


  1. class Test
  2. {
  3.     private String name;
  4.     private int age;

  5.     public Test(String name)
  6.     {
  7.         this.name = name;
  8.         System.out.println("name:"+this.name);
  9.     }

  10.     Test(String name, int age)
  11.     {
  12.         this(name);
  13.         this.age = age;
  14.         System.out.println(this.name);
  15.         System.out.println(this.age);
  16.     }
  17. }

  18. public class Test1
  19. {
  20.     public static void main(String[] args) {

  21.         Test t1 = new Test("张三");
  22.         Test t2 = new Test("李四",18);
  23.     }
  24. }
复制代码








回复 使用道具 举报
曛丨黯淡浮华 发表于 2014-12-18 08:33
你写的让我头晕晕 ,首先,this()是有带参数的, 你需要传递一个参数,不能直接传name进去,name还没进内存 ...

谢谢你的耐心解答:handshake:handshake,大致上看懂了,我的理解是用this调用带参的构造方法时调用者必须有和被调用者一样的参数(调用者和被调用者本身也可以由共同的参数),thank you!!!
回复 使用道具 举报
曛丨黯淡浮华 发表于 2014-12-18 08:33
你写的让我头晕晕 ,首先,this()是有带参数的, 你需要传递一个参数,不能直接传name进去,name还没进内存 ...

忽略括号里的内容:L我有表达障碍:Q
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马