$ 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
定義したのは、実際にはコンストラクタではなく、Const
というメソッドです。コードを次のように変更した場合、機能します。
Const c = new Const();
System.out.println( c.Const( "Hello!" ) );
特定のコンストラクターが明示的に定義されていない場合、コンパイラーは引数のないコンストラクターを自動的に作成します。
コンストラクタは値を返すことができません。いわば、構築されたオブジェクトを返します。
コンパイラが文字列を引数として取るコンストラクタを探しているため、エラーが発生します。 notコンストラクタを宣言したため、使用できるコンストラクタは、引数を取らないデフォルトのコンストラクタのみです。
コンストラクタを宣言しなかったと言うのはなぜですか?メソッドの戻り値/型を宣言するとすぐに、コンストラクタではなく通常のメソッドになるためです。
クラスには、クラスブループリントからオブジェクトを作成するために呼び出されるコンストラクターが含まれます。コンストラクターの宣言はメソッドの宣言に似ていますが、クラスの名前を使用し、戻り値の型がない点が異なります。
あなたが達成しようとしていることを詳しく説明すると、誰かがその目標にどのように到達できるかを教えてくれるかもしれません。
実際に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.htmlhttp://Java.Sun.com/docs/books/tutorial/Java /javaOO/constructors.html
コンストラクタは暗黙的にオブジェクトの参照IDを返すため、またコンストラクタはメソッドでもあり、メソッドは複数の値を返すことができないため、コンストラクタは値を返すことができません。したがって、明示的にコンストラクタには戻り値がないと言います。
すでに多くの素晴らしい答え。これを追加したいのですが、コンストラクターを呼び出した結果としてオブジェクト自体とは別の戻りコードを取得したい場合は、コンストラクターをfactory method
でラップすることができます。構築されたオブジェクト内の一部のデータ検証と、結果に応じてboolean
を返します。
コンストラクタは値を返すことができません。それが最後です。それは同じ意味です。戻り値の型を持つことはできません。そのため、コンパイルエラーが発生します。戻り値は常に、暗黙的にコンストラクタによって作成されたオブジェクトであると言えます。
コンストラクタは、「通常の」関数のような戻り値を持つことはできません。問題のクラスのインスタンスが作成されるときに呼び出されます。そのインスタンスの初期化を実行するために使用されます。
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());
}
}
あなたが望む効果を生み出す最良の方法は次のようになると思います:
_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()
メソッドを置き換え、Object
のpublic String toString()
メソッドをオーバーライドすることで(すべてのJavaクラスは、 )オブジェクトを印刷するときにオブジェクトの文字列値が正しく印刷されるため、メインメソッドは変更されません。
コンストラクタから値を返すには、配列をパラメータとして渡すだけです。原理を説明するには:
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
}
}
}