【问题标题】:Java function refuses to take parametersJava函数拒绝接受参数
【发布时间】:2015-03-06 23:50:44
【问题描述】:

在下面的代码中,一个整数被发送到构造函数以返回。问题是,当一个值在构造函数中设置为参数时,它拒绝编译并输出不需要参数。

class test3 extends Value {
   public static void main(String[] args) {
   Value var = new Value(3);
   System.out.println(var);
   }
}
class Value {
   public int Value(int num) {
   return num;
   }
}

当没有参数发送时,编译并输出一个指针值。

Value@15db9742

我在这里做错了什么(我尝试过使用公共课程但它不起作用)?

【问题讨论】:

  • 你认为应该输出什么,为什么?
  • 您对构造函数使用了错误的语法。
  • 构造函数不应该是static,也不应该返回任何类型的值。
  • 我怎么用错了语法?
  • 如果你想删除问题,删除它,不要破坏它。

标签: java class pointers constructor


【解决方案1】:

Java 中的构造函数始终具有以下形式:

{visability} {ClassName}(/* arguments */) {/* body */};

注意缺少返回类型。构造函数不会明确返回任何内容。所以在你的情况下应该是:

public Value(int num) { /* do something with num */ }

【讨论】:

    【解决方案2】:

    Constructors 与它们所在的类同名,但它们从来没有返回类型(甚至void),它们不能是static。如果他们有其中任何一个,那么他们被解释为一个正常的方法。然后 Java 提供了默认的无参数构造函数,这就是为什么你可以在构造函数中不发送任何参数并让它编译的原因。

    1. 删除staticint

      public Value(int num) {
      

    您的类不会覆盖Object's toString() method,它负责您看到的Value@15db9742 输出。您将需要覆盖它以提供在您将其传递给System.out.println 时最终将输出的文本。以任何意义执行此操作:

    1. 将值存储在类内的实例变量中。

      private int num;
      public Value(int num) {
          this.num = num;
      }
      
    2. 然后引用toString()中的实例变量。

      @Override
      public String toString()
      {
          return String.valueOf(num);
      }
      

    此外,您的 test3 类不应扩展 Valuetest3 不是 Value

    【讨论】:

      【解决方案3】:

      构造函数使用visibility classname(params) 形式。在你的情况下,这将是:

      public Value(int num) {...}
      

      static 没有意义,因为您在谈论类的实例,int 没有意义,因为构造函数不返回任何内容(它隐式返回创建的对象)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        • 2016-09-16
        • 1970-01-01
        相关资源
        最近更新 更多