在以下代码中,将一个整数发送到要返回的构造函数。问题是,当一个值被设置为构造函数中的参数时,它拒绝编译并输出不需要参数的信息。
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
我在这里做错了什么(我尝试过使用公共课但不起作用)?
答案 0 :(得分:3)
Java中的构造函数始终具有以下形式:
{visability} {ClassName}(/* arguments */) {/* body */};
注意缺少返回类型。构造函数不会返回任何内容。所以在你的情况下它应该是:
public Value(int num) { /* do something with num */ }
答案 1 :(得分:3)
Constructors的名称与他们所在的类名相同,但它们从不具有返回类型(甚至不是void
),并且它们不能是static
。如果他们有这些,那么他们被解释为一种正常的方法。然后Java提供了默认的no-arg构造函数,这就是为什么你不能在构造函数中发送任何参数并让它编译。</ p>
删除static
和int
。
public Value(int num) {
您的课程不会覆盖Object
's toString()
method,{{3}}负责您看到的Value@15db9742
输出。您需要覆盖它以提供最终在将其传递给System.out.println
时输出的文本。要做到这一点有任何意义:
将值存储在类中的实例变量中。
private int num;
public Value(int num) {
this.num = num;
}
然后参考toString()
中的实例变量。
@Override
public String toString()
{
return String.valueOf(num);
}
此外,您的test3
课程不应展开Value
; test3
不是Value
。
答案 2 :(得分:1)
构造函数使用visibility classname(params)
形式。在您的情况下,这将是:
public Value(int num) {...}
static
没有意义,因为你在谈论类的一个实例,int
没有意义,因为构造函数不返回任何内容(它隐式返回创建的对象)。