Javaのコンストラクター-完全な研究!!

Javaのコンストラクター-完全な研究!!

コンストラクターは、新しく作成されたオブジェクトを初期化するコードブロックです。コンストラクターはJavaのインスタンスメソッドに似ていますが、戻り値の型がないためメソッドではありません。要するに、コンストラクタとメソッドは異なります(これについては、このマニュアルの最後で詳しく説明します)。Javaでは、コンストラクターはしばしば特別なメソッドと呼ばれます。

コンストラクターはクラスと同じ名前を持ち、Javaコードでは次のようになります。

public  class  MyClass { 
   //これはコンストラクタ
   MyClass (){ 
   } 
   .. 
}

コンストラクター名はクラス名と一致し、戻り値の型がないことに注意してください。

コンストラクターはどのように機能しますか?

コンストラクターがどのように機能するかを理解するために例を見てみましょう。クラスがあるとしましょう  MyClass
このようなオブジェクトを作成する場合  MyClass :

MyClass obj =  new  MyClass ()

ここでの  新しいキーワード  は、クラスのオブジェクトを作成し  MyClass 、コンストラクターを呼び出して、この新しく作成されたオブジェクトを初期化します。

初期化の例を示していないので、ここで少し迷うことがあります。次のコードを見てみましょう。

Javaのシンプルなコンストラクタープログラム

ここでは、オブジェクトの作成した  obj クラスを  Hello 、次に表示された  のインスタンス変数name オブジェクトをご覧のとおり、出力は 初期化中にコンストラクターに渡し  BeginnersBook.com た出力です  nameこれは、オブジェクトの作成obj 時にコンストラクターが呼び出されたことを示してます  この例では、現在のオブジェクト、 この例ではオブジェクトを参照するこのキーワードを使用  しました  objこのキーワードについては、次のチュートリアルで詳しく説明します。

パブリック クラス Hello  { 
   文字列; 
   //コンストラクタ
   hello (){ 
      this name =  "BeginnersBook.com" ; 
   } 
   public  static  void main String [] args  { 
      Hello obj =  new  Hello (); 
      システムアウトprintln OBJ ); 
   } 
}

出力:

エントリーブックcom

コンストラクターの種類

コンストラクタには、デフォルト、引数なしのコンストラクタ、およびパラメータ化された3つのタイプがあります。

標準コントラクト

あなたはクラスのコンストラクタを実装していない場合は、Javaコンパイラは、挿入標準のコンストラクタをあなたのコードに あなたに代わってこのコンストラクターは、標準コンストラクターと呼ばれます。コンパイル時にコードに挿入され、.classファイルに存在するため、ソースコード(Javaファイル)にはありません。

コンストラクターを実装すると、Javaコンパイラーから標準コンストラクターを取得できなくなります。

引数なしのコンストラクター:

引数なしのコンストラクターは、非引数コンストラクターとして知られてい  ます。署名は、標準コンストラクターと同じです。ただし、標準のコンストラクターとは異なり、bodyには、コンストラクターの本体が空のコードを含めることができます。

一部の人々は、標準コンストラクタと引数なしのコンストラクタは同じであると言うかもしれませんが、  クラス   にpublic Demo(){}書いても、あなたが書いた  コードなので標準コンストラクタと呼ぶことはできません。Demo

例:引数なしのコンストラクター

クラス Demo 
{ 
     public  Demo ()
     { 
         system アウトprintln "これは引数のないコンストラクタです
     " ); } 
     public  static  void main String args []) { 
    	 new  Demo (); 
     } 
}

出力:
これは引数なしのコンストラクターです

Parametrisierterコンストラクター

引数を持つコンストラクター(またはパラメーターと言うことができます)は、パラメーター化されたコンストラクターと呼ばれ  ます

例:パラメーター化されたコンストラクター

この例では、2つのパラメーターid と  を持つパラメーター化されたコンストラクターがあります  nameオブジェクトobj1 を  作成するときに、  obj1とobj2の作成後にこのコンストラクターが呼び出されるobj2 ように2つの引数を渡しました

パブリック クラスの 従業員 {

   int empId ;   
   文字列empName ;  
	    
   // 2つのパラメータを持つパラメータ化されたコンストラクタ
   Employee int id  String name ){   
       this empId = id ;   
       そのempName = name ;   
   }   
   ボイド情報(){ 
        システムアウトprintln "Id:" + empId + "Name:" + empName ); 
   }  
	   
   public  static  void main String args []){   
	employee obj1 =  new  employee 10245 "Chaitanya" );   
	従業員obj2 =  新しい 従業員92232 " Negan " );   
	OBJ1 info ();   
	obj2がinfo ();   
   }   
}

出力:

ID  10245   Chaitanya 
ID  92232  名前 Negan

例2:パラメーター化されたコンストラクター

この例では、2つのコンストラクター、標準コンストラクターとパラメーター化されたコンストラクターがあります。新しいキーワードを使用してオブジェクトを作成するときにパラメーターが渡されない場合、標準コンストラクターが呼び出されます。ただし、パラメーターを渡すと、渡されたパラメーターのリストに一致するパラメーター化されたコンストラクターが呼び出されます。

クラッセの 例2 
{ 
      private  int  var ; 
      // Standardkonstruktor 
      public  Example2 ()
      { 
             this var  =  10 ; 
      } 
      //パラメータ
      コンストラクタKonstuktor public  Example2 int num 
      { 
             this var  = num ; 
      } 
      public  int getValue ()
      { 
              return  var ; 
      } 
      public  static  void mainString args [])
      { 
              Example2 obj =  new  Example2 (); 
              Example2 obj2 =  new  Example2 100 ); 
              システムraus println "varがある:" + OBJ のgetValue ()); 
              システムraus println "varがある:" + obj2ののgetValue ()); 
      } 
}

出力:

var  is  10 
var  is  100

クラスにパラメーター化されたコンストラクターのみを実装する場合

クラッセの 例3 
{ 
      private  int  var ; 
      public  Example3 int num 
      { 
             var = num ; 
      } 
      public  int getValue ()
      { 
              return  var ; 
      } 
      public  static  void main String args [])
      { 
              Beispiel3 myobj =  new  Beispiel3 (); 
              システムraus println"varの値は次のとおりです。" + このmyobj GetValueメソッド()); 
      } 
}

出力:コンパイルエラーが出力されます。その理由は、命令 がプログラムにない標準コンストラクタを呼び出すためです  Example3 myobj = new Example3()クラスにコンストラクタを実装しない場合、コンパイラはデフォルトのコンストラクタをコードに挿入します。ただし、コンストラクターを実装する場合(上記の例でintパラメーターを使用してパラメーター化されたコンストラクターを実装した場合)、コンパイラーによってコードに標準コンストラクターを取得することはできません。

上記のコードからパラメーター化されたコンストラクターを削除すると、コンパイラーがコードに標準コンストラクターを挿入するため、プログラムは完全に実行されます。

コンストラクターチェーン

コンストラクターが同じクラスの別のコンストラクターを呼び出す場合、コンストラクターチェーンと呼ばれます。

素晴らしい()

子クラスコンストラクターが呼び出されると、親クラスのコンストラクターが暗黙的に呼び出されます。また、コンパイラ は子クラスコンストラクターの先頭にステートメントを挿入  すると言うこともできます。super();

Klasse  MyParentClass  { 
   MyParentClass (){ 
	システムraus println "MyParentClassコンストラクター" ); 
   } 
} 
Klasse  MyChildClass  erweitert  MyParentClass { 
   MyChildClass () { 
	System raus println "MyChildClassコンストラクター" ); 
   } 
   public  static  void main String args []) { 
	new  MyChildClass(); 
   } 
}

出力:

MyParentClass-  コンストラクト
MyChildClass-  コンストラクト

superキーワードの詳細については、  こちらをご覧ください

Konstruktorüberladung

コンストラクターのオーバーロードは、複数のコンストラクターが異なるパラメーターリストを持つ概念であるため、各コンストラクターは異なるジョブを実行します。

Javaコピーコンストラクター

コピーコンストラクターは、あるオブジェクトの値を別のオブジェクトにコピーするために使用されます。

クラッセ JavaExample {   
   String web ;  
   JavaExample 文字列w ){   
	web = w ; 
   }  

   / *これはコピーコンストラクター
    *オブジェクトの値
    を別のオブジェクト(
    このコンストラクターを呼び出すオブジェクト*)に
   コピー
    * * JavaExample JavaExample je ){   
	web = je Web ;  
   }   
   void disp (){ 
	システムアウトprintln "Website:" + web ); 
   }  

   public  static  void main String args []){   
	JavaExample obj1 =  neues  JavaExample "BeginnersBook" );  
		
	/ *オブジェクトをコンストラクターに引数として渡します
	 *これはコピーコンストラクターを呼び出します
	 * / 
	JavaExample obj2 =  new  JavaExample obj1 );   
	OBJ1 disp ();   
	obj2がdisp ();   
   }   
}

出力:

ウェブサイト BeginnersBook 
ウェブサイト BeginnersBook

簡単な要約

  1. 通常のクラスであるか抽象クラスであるかにかかわらず、すべてのクラスにはコンストラクタがあります。
  2. コンストラクターはメソッドではなく、戻り値の型はありません。
  3. コンストラクター名はクラス名と一致する必要があります。
  4. コンストラクタは任意のアクセス識別子を使用できますが、プライベートとして宣言することもできます。Javaではプライベートコンストラクターが可能ですが、スコープはクラス内のみです。
  5. コンストラクターと同様に、メソッドはクラス名と同じ名前を持つことができますが、戻りタイプを持つため、コンストラクターではなくメソッドであることがわかります。
  6. クラス内にコンストラクターを実装しない場合、コンパイラーが実装します。
  7. this()およびsuper()は、コンストラクターコードの最初のステートメントでなければなりません。 それらに言及しない場合、コンパイラーがそれを行います。
  8. コンストラクターのオーバーロードは可能ですが、上書きはできません。つまり、クラスのコンストラクターをオーバーロードした可能性がありますが、コンストラクターを上書きすることはできません。
  9. コンストラクターは継承できません。
  10. スーパークラスに引数なし(デフォルト)コンストラクターがない場合、コンパイラーは、通常のシナリオの場合のように、子クラスに標準コンストラクターを挿入しません。
  11. インターフェイスに  はコンストラクタがありません
  12. 抽象クラスはコンストラクタを持つことができ、インターフェイスを実装するクラスがインスタンス化されるときに呼び出されます。(つまり、具象クラスのオブジェクト作成)。
  13. コンストラクターは同じクラスの別のコンストラクターをthis()で呼び出すこともできます。パラメーター化されたコンストラクターを呼び出す場合は、次の手順に従います:  this(パラメーターリスト)

Leave a Reply

Your email address will not be published. Required fields are marked *