Java:构造函数如何返回值?

时间:2010-04-04 11:45:45

标签: java constructor return-value

$ cat Const.java 
public class Const {
    String Const(String hello) {
        return hello; 
 }
 public static void main(String[] args) {
     System.out.println(new Const("Hello!"));
 }
}
$ javac Const.java 
Const.java:7: cannot find symbol
symbol  : constructor Const(java.lang.String)
location: class Const
  System.out.println(new Const("Hello!"));
                     ^
1 error

11 个答案:

答案 0 :(得分:24)

您定义的内容实际上不是构造函数,而是名为Const的方法。如果您将代码更改为此类代码,则可以使用:

Const c = new Const();
System.out.println( c.Const( "Hello!" ) );

如果没有显式定义特定的构造函数,编译器会自动创建一个无参构造函数。

答案 1 :(得分:22)

构造函数无法返回值;他们可以说是返回构造的对象。

您收到错误,因为编译器正在查找以字符串作为参数的构造函数。由于您声明构造函数,因此唯一可用的构造函数是不带任何参数的默认构造函数。

为什么我说你没有声明构造函数?因为只要为方法声明返回值/类型,它就不再是构造函数,而是常规方法。

来自Java Documentation

  

一个类包含的构造函数   调用从中创建对象   班级蓝图。构造函数   声明看起来像方法   声明 - 除了他们使用   类的名称,没有回报   类型。

如果你详细说明你想要实现的目标,那么某人可能会告诉你如何实现这一目标。

答案 2 :(得分:9)

实际上,java类中的构造函数不能返回必须采用以下格式的值

public class Test {
 public Test(/*here the params*/) {
   //this is a constructor
   //just make some operations when you want to create an object of this class
 }
}

检查这些链接 http://leepoint.net/notes-java/oop/constructors/constructor.html http://java.sun.com/docs/books/tutorial/java/javaOO/constructors.html

答案 3 :(得分:5)

构造函数无法返回值,因为构造函数隐式返回对象的引用ID,并且构造函数也是方法,并且方法不能返回多个值。所以我们说explicitely构造函数没有返回值。

答案 4 :(得分:2)

已经有很多好的答案。我想补充一点,如果你想通过调用一个构造函数来获得一些与对象本身分开的返回代码,你可以将构造函数包装在一个factory method中,在创建时,它可以例如做在构造的对象中进行一些数据验证,并根据结果返回boolean

答案 5 :(得分:1)

构造函数无法返回值。那是最后的。它有同样的意义 - 它不能有返回类型,这就是你得到编译错误的原因。您可以说返回值始终隐含在构造函数创建的对象中。

答案 6 :(得分:1)

构造函数不能具有类似“普通”函数的返回值。当创建所讨论的类的istance时调用它。 它用于执行该实例的初始化。

答案 7 :(得分:0)

public class Const {
  private String myVar;

  public Const(String s) {
    myVar = s; 
  }

  public String getMyString()
  {
      return myVar;
  }

  public static void main(String[] args) {
    Const myConst = new Const("MyStringHere"); 
    System.out.println(myConst.getMyString());
  }
}

答案 8 :(得分:0)

我认为产生所需效果的最佳方法如下:

public class Const {

    private String str;

    public Const(String hello) {
        str = hello; 
    }

    public String toString() {
        return str;
    }

    public static void main(String[] args) {
        System.out.println(new Const("Hello!"));
    }
}

这将取代您之前使用的public String Const()方法,并通过覆盖public String toString()的{​​{1}}方法(所有Java类继承自的方法)正确打印对象的String值你想打印对象,所以你的主要方法保持不变。

答案 9 :(得分:0)

从构造函数传回一个值 - 只需将数组作为参数传入。 说明原则:

Test() {
    Boolean[] flag = new Boolean[1];
    flag[0] = false;
    new MyClass(flag);
    System.out.println(flag[0]); // Will output 'true'
}

class MyClass {
    MyClass(Boolean[] flag) {
        // Do some work here, then set flag[0] to show the status
        flag[0] = true;
    }
}

答案 10 :(得分:0)

/************************************************
   Put the return value as a private data member, which gets
   set in the constructor. You will need a public getter to
   retrieve the return value post construction
******************************************************/

class MyClass
{
   private Boolean boolReturnVal;

   public Boolean GetReturnVal() { return(boolReturnVal); }
   MyClass() // constructor with possibly args
    {
       //sets the return value boolReturnVal
    }

 public static void main(String args[])
 {
     MyClass myClass = new MyClass();

    if (myClass.GetReturnVal())
    {
       //success
    }

 }

}