$ 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
Was Sie definiert haben, ist eigentlich kein Konstruktor, sondern eine Methode namens Const
. Wenn Sie Ihren Code in so etwas geändert haben, würde es funktionieren:
Const c = new Const();
System.out.println( c.Const( "Hello!" ) );
Wenn kein bestimmter Konstruktor explizit definiert ist, erstellt der Compiler automatisch einen Konstruktor ohne Argumente.
Konstruktoren können keinen Wert zurückgeben. Sie geben das konstruierte Objekt sozusagen zurück.
Sie erhalten einen Fehler, weil der Compiler nach einem Konstruktor sucht, der eine Zeichenfolge als Argument verwendet. Da Sie not einen Konstruktor deklariert haben, ist der einzige verfügbare Konstruktor der Standardkonstruktor, der kein Argument benötigt.
Warum sage ich, dass Sie keinen Konstruktor deklariert haben? Denn sobald Sie einen Rückgabewert typ für Ihre Methode angeben, handelt es sich nicht mehr um einen Konstruktor, sondern um eine reguläre Methode.
Aus der/- Java-Dokumentation :
Eine Klasse enthält Konstruktoren, die .__ sind. wird aufgerufen, um Objekte aus der .__ zu erstellen. Klasse Blaupause. Konstrukteur Deklarationen sehen aus wie Methode Deklarationen - außer, dass sie die .__ verwenden. Name der Klasse und keine Rückgabe Art.
Wenn Sie genau definieren, was Sie erreichen wollen, kann Ihnen jemand sagen, wie Sie dieses Ziel erreichen können.
Eigentlich kann Constructor in einer Java-Klasse keinen Wert zurückgeben, der in der folgenden Form vorliegen muss
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
}
}
Überprüfen Sie diese Links http://leepoint.net/notes-Java/oop/constructors/constructor.htmlhttp://Java.Sun.com/docs/books/tutorial/ Java/JavaOO/Konstruktoren.html
Ein Konstruktor kann keinen Wert zurückgeben, da ein Konstruktor implizit die Referenz-ID eines Objekts zurückgibt und da ein Konstruktor auch eine Methode ist und eine Methode nur einen Wert zurückgeben kann. Wir sagen also explizit, dass Konstruktor keinen Rückgabewert hat.
Viele tolle Antworten schon. Ich möchte nur hinzufügen, dass Sie den Konstruktor in einen factory method
einschließen können, wenn Sie vom Objekt selbst einen Rückgabewert erhalten möchten, der sich aus dem Objekt selbst ergibt, der beispielsweise bei der Erstellung einige Datenvalidierungen innerhalb des Objekts ausführen könnte das konstruierte Objekt und gibt abhängig vom Ergebnis eine boolean
zurück.
Der Konstruktor kann keinen Wert zurückgeben. Das ist endgültig. Es ist der gleiche Sinn - es kann keinen Rückgabetyp geben, und deshalb wird der Kompilierungsfehler angezeigt. Sie können sagen, dass der Rückgabewert immer implizit das vom Konstruktor erstellte Objekt ist.
Ein Konstruktor kann keinen Rückgabewert wie eine "normale" Funktion haben. Sie wird aufgerufen, wenn eine Instanz der betreffenden Klasse erstellt wird .. _. Sie wird verwendet, um die Initialisierung dieser Instanz durchzuführen.
Ich denke, der beste Weg, um den gewünschten Effekt zu erzielen, wäre folgender:
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!"));
}
}
Dies ersetzt die public String Const()
-Methode, die Sie zuvor verwendet haben. Durch Überschreiben der public String toString()
-Methode von Object
(von der alle Java-Klassen erben) wird der String-Wert des Objekts beim Drucken des Objekts korrekt gedruckt, sodass die Hauptmethode unverändert bleibt.
Um einen Wert von einem Konstruktor zurückzugeben, übergeben Sie ein Array als Parameter .
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;
}
}
/************************************************
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
}
}
}
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());
}
}