Java函数拒绝接受参数

时间:2015-03-06 23:50:45

标签: java class pointers constructor

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:3)

Constructors的名称与他们所在的类名相同,但它们从不具有返回类型(甚至不是void),并且它们不能是static。如果他们有这些,那么他们被解释为一种正常的方法。然后Java提供了默认的no-arg构造函数,这就是为什么你不能在构造函数中发送任何参数并让它编译。<​​/ p>

  1. 删除staticint

    public Value(int num) {
    
  2. 您的课程不会覆盖Object's toString() method,{{3}}负责您看到的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);
      }
      
    3. 此外,您的test3课程不应展开Value; test3不是Value

答案 2 :(得分:1)

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

public Value(int num) {...}

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