2013-08-28 9 views
10

Javaは、クラスの名前と型void(Like void constructor)を持つメソッドを作成することができます。コンストラクターには型がなく、コンストラクターの関数を実行します。しかし、上記の種類のメソッドの使用法はありますか?あなたはJavaがクラス名と型を持つメソッドを許可する理由void

サンプルコード、それらの使用法の例を与えることができます:

//my class 
class MyClass{ 

    //constructor 
    public MyClass(.....){ 
    } 

    //What is the use of the below method 
    public void MyClass(....){ 
    } 
} 
+0

これはあなたが http://stackoverflow.com/questions/3401444/methods-with-same-name-を探しているかもしれないものas-constructor-why –

+0

'コンストラクタ'は "特別な"タイプのメソッドです。これは、コンパイラと言語によって異なって扱われます。これは明示的にあなたのクラスのインスタンスを返します(つまり、 'public MyClass MyClass(...){...}')、それは通常のメソッドの命名制限をエスケープします。これらのことをすべて言って、大文字で始まるメソッドを作成するには、[Java命名規則(http://www.oracle.com/technetwork/java/codeconv-138413.html)]に違反します;) – MadProgrammer

+0

コンストラクタ名前が「」で、戻り値の型がバイトコードレベルで 'void'であるため、競合はありません。静的クラス初期化子はと呼ばれます –

答えて

10

質問にお答えします:いいえ、それは特別な使用はありません。実際、それは直観的ではなく、混乱しています。コンパイラの中には、"このメソッドはコンストラクタ名"という警告を生成するものもあります。

しかし、技術的にはではない可能性があります。はコンパイルエラーですので、私はそれから離れて滞在しています。より説明的で同じ目的を果たすことができるいくつかの異なるメソッド名があります。

+2

私はすべてのJavaコンパイラがこれについて警告するとは思わないと思います... –

+0

これは安全な仮定です。一定。 – rocketboy

1

使用法は、他の方法と同じです。戻り値の型はvoidである必要はありません。それはしばしば混乱することがありますが、メソッドにクラス名と同じ名前を付けるのは完全に合法です。それは通常あなたが望むより多くの混乱を引き起こしますが、それは法的な行為です。このメソッドには、他のクラスメソッドとは別に特別なプロパティはありません。

2

はい、新鮮なJavaはこれと混同する可能性があります。コンストラクタには戻り値の型はありません。しかし、一部の人々は、 "ノーリターンタイプ"と "ボイド"はいくつかは同等であるが、そうではないことを誤解している。コンストラクターは異なるストーリーで、クラス名とその他の戻り値の型(void、String、int、.......)を持つメソッドは異なります。しかし、それはもっと混乱しています。

2

のように、これらの名前がクラス名と同じであるため、の意味がありません。

  • スタイル違反です。公式のJavaスタイルのガイドによると、Javaメソッドの名前は小文字で始まるはずです。

  • 表面的にはコンストラクタのように見えるので混乱します。

  • このような方法を使用すると、クラス名を誤って使用しているように見えるので、混乱します。

  • これは、クラス名とメソッド名のあいまいさに起因する予期しない動作や予期しないコンパイルエラーを招く可能性があります。


Javaはクラス名とvoid型を持っている方法を可能になぜ?

基本的にJava言語ではが適用されないため、識別子スタイル規則が適用されます。 (IMO、それはルールを実施した方が良いだろう...しかし、その決定はずっと前になされたものであり、互換性の理由から変更することはできない)。

2

いいえ特別なことはないクラス内の他のメソッドと同様に扱われます。

これは、記事の下に読んで価値があるだろう:メソッド名はクラス名と同じであり、それはそのおっとに特別な用法を持っていconstructorとして知られている何の戻り値の型を持っていない

http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html

場合。

このような名前をメソッドとして保持すると、混乱とコードの読みやすさしか生じません。リンクの下の

readibility事項なぜあなたを助けるかもしれないでしょう。 http://java.dzone.com/articles/why-code-readability-matters

関連する問題