【问题标题】:Can I call default constructor from parameterized constructor inside public class in java?我可以从java中公共类中的参数化构造函数调用默认构造函数吗?
【发布时间】:2012-10-12 13:27:03
【问题描述】:

我想从公共 java 类中的参数化构造函数调用默认构造函数。

我能做到吗?

【问题讨论】:

    标签: java


    【解决方案1】:

    在参数化构造函数的第一行使用this();,它将调用您的默认构造函数。确保您有默认构造函数,因为如果您声明参数化构造函数,编译器将不会提供默认构造函数。

    【讨论】:

      【解决方案2】:

      对于 Java:您可能是指没有参数的构造函数。 如果是这样,您可以使用以下代码:

      public class MyClass {
         // no params constructor 
         public MyClass() {
            ...
         }
      
         // parametrized constructor
         public MyClass(int p1, String p2) {
             this();
         }
      }
      

      希望对你有帮助

      【讨论】:

      • 值得注意的是this();必须是参数化构造函数的第一行——如果你把其他东西放在前面,它就不起作用了。
      【解决方案3】:

      您可以使用 new 运算符调用默认构造函数(例如:new Test();)或 this();。 只是 Test() 是被禁止的,因为它不是类的方法。

      package org.gpowork.test;
      
      public class Test {
          private String field;
          private Long time = 0L; 
          public Test(){
              this.time = System.currentTimeMillis();
              System.out.println("Default constructor. "+this.time);
          }
          public Test(String field){
                  this();
              Test instance = new Test();
              this.field = field;
          }
          public static void main(String[] args){
              System.out.println("start...");
              Test t1 = new Test();
              System.out.println("-------");
              Test t2 = new Test("field1");
          }
      }
      

      【讨论】:

        【解决方案4】:

        在 Java 中,默认构造函数是编译器隐式提供的无参数构造函数。如果您引入任何带参数的构造函数,编译器将不会提供。

        在这种情况下,您必须显式定义一个无参数构造函数(顺便说一下,这不是默认的,因为它不是由编译器提供的),例如public MyClass() { }

        您可以从其他构造函数调用它为this();,它必须是构造函数中被调用的第一个语句。

        【讨论】:

          【解决方案5】:

          是的,你可以

          public YourClass() {
              public YourClass() { super();}
              public YourClass(int x) { this();}
          }
          

          只要你有相同的参数构造函数。这行不通

          public YourClass() {
              public YourClass(int x, int y) { this(); } // compiler error here
              public YourClass(int x) { super(); }
          }
          

          注意: super() 调用匹配相同数量参数的超级构造函数(在本例中为 Object 类,因为 MyClass 隐式扩展了 Object 并且 Object 类具有无参数构造函数)。

          this() 调用匹配相同数量参数的当前类的构造函数。

          【讨论】:

            【解决方案6】:

            一旦创建了带参数的构造函数,就不能调用默认构造函数。您必须自己创建无参数构造函数才能从参数化构造函数进行调用。

            【讨论】:

            • 我已经尝试过了,它正在工作:字符串名称; Test() { System.out.println("欢迎"); } 测试(字符串输入) { this(); this.name = 输入; System.out.println(this.name); } public static void main(String[] args) { new Test("Hello"); }
            • 是的,这会起作用。您已经创建了 Test() 无参数构造函数。这就是我所说的。当您创建 arg 构造函数时,编译器不提供默认的无参数构造函数。默认构造函数是您不必在类中显式编写的构造函数。编译器为您完成这项工作。尝试不使用 Test() 构造函数的代码,它会报错。
            猜你喜欢
            • 2013-03-05
            • 1970-01-01
            • 1970-01-01
            • 2013-09-14
            • 2021-08-31
            • 1970-01-01
            • 2015-04-20
            • 2014-09-09
            • 1970-01-01
            相关资源
            最近更新 更多