2017-05-31 17 views
1

私はこのロットについて検索し、我々はコンストラクタと簡単な初期化の両方を使用することができると述べている given answer hereなぜコンストラクタを使用するのか、変数の単純な初期化を必ずしも使用しないのはなぜですか?

しかし、私はこの

の回答をしたいスタックオーバーフローでこの答えを得るしています
  • が、なぜそれが自動的にコンパイルすることによって行われていれば、コンストラクタの初期化を使用しますr!新しいオブジェクトを作成するには
+2

私はその質問と回答を読んだ後、まだあなたには分かりません。 –

+1

最も単純な答えは、例えばint型の変数には常に0に割り当てられます。デフォルトを1にする必要がある場合、コンストラクタ内で ""(空文字列)を使用してインスタンス変数を初期化すると、ヌルポインタを気にする必要があります。 – Abhishek

答えて

5

コンストラクタの単純な定義:

クラスのオブジェクトを初期化する特別なメソッド。クラスのインスタンスを作成するには、常に、newキーワードと一緒に使用します。

  1. クラス名と同じ名前です。
  2. 1つ以上の引数を取ることができます。
  3. でも無効でない戻り値を持っていません。
  4. デフォルトのコンストラクタにはパラメータはありません。
  5. 複数のコンストラクタは、(メソッドのオーバーロード)が存在します。

が、なぜそれが自動的に コンパイラによって行われていれば、コンストラクタの初期化を使用します!

コンストラクタは、コンストラクタを実装していない場合は、コンパイラ(デフォルトのコンストラクタ)によって初期化されます。

、なぜ我々はコンストラクタを実装する必要がありますか?

  • その仕事は、ローカル変数の初期値のすべて、 を伝えるために、おそらくクラスの目的に向けて、より 何かをするために、クラス内の別の方法をオフに開始することです。
  • 利用可能である、すなわち何を、あなたが持っているもののデータに依存します。
  • オブジェクトを作成するさまざまな方法。
  • すべてのクラス変数は、コンストラクタで初期化する必要があります。例として

  • すべてRectangle()名前、いくつかの異なるコンストラクタを提供java.awtパッケージ内Rectangleクラスを考慮したが、引数の数が異なる、又はより引数の異なるタイプの各新しいRectangleオブジェクトは初期状態になります。

  • public Rectangle()

  • public Rectangle(int width, int height)
  • public Rectangle(int x, int y, int width, int height)
  • public Rectangle(Dimension size)
  • public Rectangle(Point location)
  • public Rectangle(Point location, Dimension size)
  • public Rectangle(Rectangle r)
  • :ここ java.awt.Rectangleクラスからのコンストラクタの署名がありますあなたのメンバ変数が private(セキュリティ上の理由)であればどのような

?他のクラスにメンバー変数を渡したくない場合は、getterとsetterを使用する必要がありますが、最初はコンストラクタで初期化してから、必要に応じて後でgetterとsetterを使用して変更できますそれを変更/更新する。

1

、我々は、我々はクラスで定義する必要がparamaetrizedコンストラクタを実行する場合、デフォルトconstructor.Butを追加し、自動的にデフォルトコンストラクタコンパイラを作成constructor.Ifを実行する必要があります。..

関連する問題