private abstract array
このチュートリアルでは、Javaのプライベートコンストラクタ、抽象、文字列、配列、インターフェイス、Javaのデストラクタなどの特別なコンストラクタについて説明します。
Javaのコンストラクターに関する前回のチュートリアルでは、Javaのコンストラクターに関連する重要な概念を学びました。コンストラクターの作成方法やコンストラクターを定義するルール、コンストラクターの種類などについて説明しました。
また、コンストラクターのオーバーロードとコンストラクターの連鎖についても学びました。ここで、Javaのプライベートコンストラクター、抽象コンストラクター、文字列と配列のコンストラクターなど、特定の特別なコンストラクターについて説明します。次に、Javaのデストラクタについて説明し、最後に、メソッドとコンストラクタの違いについて説明します。
Javaのプライベートコンストラクタから始めましょう。
アニメテレビはすべて無料です
学習内容:
- Javaのプライベートコンストラクタ
- Javaの抽象クラスコンストラクタ
- Javaのインターフェースコンストラクター
- Javaの文字列コンストラクタ
- Javaの配列コンストラクタ
- Javaのデストラクタ
- Javaのコンストラクターとメソッド
- よくある質問
- 結論
- 推奨読書
Javaのプライベートコンストラクタ
すでに述べたように、Javaクラスのコンストラクターには、アクセス指定子を関連付けることができます。したがって、プライベートまたはパブリックのコンストラクターを持つことができます。アクセス指定子については、以降のチュートリアルで詳しく説明します。また、コンストラクターについてももう一度説明します。
コンストラクターがプライベートとして宣言されている場合、クラス内でのみアクセスできます。別のクラスを介して派生クラスにアクセスすることはできません。したがって、このパブリックメソッドがプライベートコンストラクターにアクセスできるように、プライベートコンストラクターを持つクラスにパブリックメソッドを提供する必要があります。
Javaでは、プライベートコンストラクタは次の状況で使用できます。
- シングルトンの実装用。
- ファクトリメソッドを組み込むため。
- 静的メンバー(変数とメソッド)のみを持つクラスの場合。
- 最終メンバーがいるクラスの場合。 (定数–最終および静的)。
- タイプセーフな列挙を使用するには。
例として 、シングルトンクラスを受講しましょう。シングルトンクラスは、一度に1つのオブジェクトのみを許可するクラスです。プライベートコンストラクターを使用して、複数のオブジェクトの作成を許可しないようにすることができます。
以下のプログラムは、プライベートコンストラクターを使用してシングルトンクラスを実装します。
class SingleTonClass { //Static Class Reference private static SingleTonClass obj=null; private SingleTonClass(){ System.out.println('SingleTonClass::Private constructor'); } public static SingleTonClass create_object(){ //logic to create only one instance if(obj==null){ obj= new SingleTonClass(); } return obj; } public void display(){ System.out.println('This is SingleTonClass !!'); } } class Main { public static void main(String args()){ //cannot call private constructor directly. SingleTonClass myobject= SingleTonClass.create_object(); myobject.display(); } }
出力:
上記のプログラムはシングルトンクラスを宣言します。プライベートコンストラクターとプライベートコンストラクターにアクセスし、オブジェクトの数を1つだけに制限するためのパブリックメソッドを提供しました。 mainメソッドでは、publicメソッドを実行してシングルトンクラスオブジェクトを作成します。
Javaの抽象クラスコンストラクタ
Javaの抽象クラスはC ++ですが、C ++とは異なり、Javaの抽象キーワードを使用して抽象クラスを宣言します。 Javaの抽象クラスはコンストラクターを持つことができます。この抽象クラスコンストラクターは、(抽象クラスを継承する)実装クラスのインスタンスを作成するときに呼び出されます。
次の抽象クラスコンストラクタの例を考えてみましょう。
//abstract class declaration abstract class BaseClass { BaseClass() { System.out.println('BaseClass::Constructor Called'); } abstract void func1(); } class DerivedClass extends BaseClass { DerivedClass() { System.out.println('DerivedClass::Constructor Called'); } void func1() { System.out.println('DerivedClass::func1() called'); } } class Main { public static void main(String args()) { DerivedClass d = new DerivedClass(); } }
出力:
抽象クラスはインスタンス化できないため、この抽象クラスから新しいクラスを継承します。プログラムの出力は、mainメソッドで派生クラスのオブジェクトを作成すると、最初に抽象クラスのコンストラクターが呼び出され、次に派生クラスのコンストラクターが呼び出されることを示しています。
Javaのインターフェースコンストラクター
Javaのインターフェースは、抽象クラスに似ています。インターフェイスはデフォルトでパブリック抽象であり、メソッドのプロトタイプのみがあります。これらのプロトタイプは、インターフェイスを実装するクラスに実装されます。
では、コンストラクターはインターフェイスに存在しますか?
いいえ。インターフェースにはコンストラクターがありません。これは、インターフェイスのメソッドが単なるプロトタイプであり、インターフェイスのオブジェクトをインスタンス化または作成する必要がないためです。これは、インターフェイスをまったく使用しないためです。したがって、インターフェースにコンストラクターを含める必要もありません。
以下のJavaプログラムは、このロジックを示しています。
//interface declaration interface Interface_Add{ public int addNumbers(int num1, int num2); //method prototype } class AddClass implements Interface_Add{ public int addNumbers(int num1, int num2){ //method implementation int result= num1+num2; return result; } } class Main{ public static void main(String args()) { AddClass obj= new AddClass(); System.out.println('Result of addition:' + obj.addNumbers(2, 3)); } }
出力:
ここに、1つのメソッド「addNumbers」プロトタイプを持つインターフェース「Interface_add」があります。次に、クラス「AddClass」がこのインターフェースとメソッドaddNumbersを実装します。
mainメソッドでは、クラスがインスタンス化され、メソッドが実行されます。したがって、このインターフェースにはコンストラクターは必要ありません。
次に、JavaのようなStringやArrayの既存のクラスのコンストラクターについて説明します。
Javaの文字列コンストラクタ
Javaの文字列オブジェクトは、Stringクラスのオブジェクトとして定義できます。 Stringクラスは、Stringオブジェクトを作成および初期化するための次のコンストラクターを提供します。
これらのコンストラクターのいくつかを以下で説明します。
#1)String(byte () myArray)
指定されたバイト配列から新しいStringオブジェクトを構築します。文字列オブジェクトを作成するために、デフォルトのプラットフォーム文字セットを使用し、バイト配列をデコードします。
例:
byte() myArray = {65, 66, 67, 68, 69}; String str =new String(myArray); //ABCDE
#2)String(byte () myArray、Charset char_set)
このコンストラクターは、コンストラクター呼び出しで指定されたchar_setを使用してバイト配列をデコードすることにより、新しい文字列オブジェクトを作成します。
例:
byte() myArray = {65, 66, 67, 68, 69}; Charset cs = Charset.defaultCharset(); String str = new String(myArray, cs); //ABCDE
#3)String(char () myArray)
文字配列からStringオブジェクトを作成できます。
例:
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray); //Paris
#4)String(char () myArray、int start_index、int count)
ここでは、start_indexからcountまでの文字数を含めることにより、文字配列からStringオブジェクトを作成します。
例:
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray, 0,2); //Pa
#5)String(int () intArray、int offset、int count)
上記のコンストラクターは、int配列から新しいStringオブジェクトを割り当てます。文字列の文字数は、オフセットとカウントによって定義されます。
2〜3年の経験のためのSQL開発者インタビューの質問
例:
int() intArray = {65, 69,73,79,85 }; String s = new String (intArray, 0, 5); //AEIOU
#6)String(StringBuffer strbuffer)
このコンストラクターでは、新しいStringオブジェクトがStringBufferオブジェクトから構築されます。
例:
StringBuffer strbuffer = new StringBuffer('SoftwareTestingHelp'); String s = new String (strbuffer); //SoftwareTestingHelp
#7)String(StringBuilder strbuilder)
StringBuilderオブジェクトを使用して、新しいStringオブジェクトが作成されます。
例:
Webアプリケーションテストの面接の質問と回答
StringBuilder strbuilder = new StringBuilder('SoftwareTestingHelp'); String s = new String(strbuilder); // SoftwareTestingHelp
Javaの配列コンストラクタ
配列は、コンストラクターを使用して、以下に示すように、新しいキーワードを使用して配列を作成および初期化します。
int() data = new int(4);
上記のステートメントは、4つの要素の配列をデフォルトの0に初期化します。
配列を初期化する別の方法を以下に示します。
int() data = new int(){2, 4, 6, 8};
Javaのデストラクタ
これまで、オブジェクトの作成に使用するJavaのコンストラクターを見てきました。オブジェクトがジョブを終了し、不要になったら、オブジェクトに割り当てられたメモリを解放するか、割り当てを解除する必要があります。これはJavaのデストラクタの仕事です。
Javaでは、ガベージコレクターは、使用されなくなったオブジェクトや到達不能になったオブジェクトを解放する責任があります。 Javaのデストラクタはファイナライザと呼ばれ、非決定論的であるため、実行されることを保証できません。
Javaでは、デストラクタについて心配する必要はありません。デストラクタには、Javaの特定の構文はありません。オブジェクトは破棄されますが、C ++で呼び出す方法でデストラクタを呼び出すことはありません。
上記のように、デストラクタの仕事は、ガベージコレクタによって呼び出されるファイナライザによって行われます。
参考までに、Javaのファイナライザーメソッドを以下に示します。
class Main { public static void main(String() args) { Main dm = new Main(); //create object dm = null; System.gc(); //call garbage collector System.out.println('Main Mathod'); } protected void finalize() //finalize method { System.out.println('Finalize method :: object is garbage collected'); } }
出力:
上記のプログラムでは、クラスオブジェクトを作成します。 nullに設定してから、System.gc()メソッドを呼び出します。これで、オブジェクトに到達できなくなり、finalizeメソッド(デストラクタ)が暗黙的に呼び出されます。
Javaのコンストラクターとメソッド
Javaのコンストラクタとメソッドの違いのいくつかを表にまとめてみましょう。
コンストラクター | 方法 |
---|---|
新しいオブジェクトを作成します。 | 既存のオブジェクトを操作します。 |
オブジェクトの作成時にクラスメンバーを初期化するために使用されるコードのブロック。 | 実行時に結果を生成するプログラミングステートメントのコレクション。 |
オブジェクトの初期化を実行するために使用されます。 | Javaによって実行される一連のステートメント。初期化ルーチンが含まれる場合と含まれない場合があります。 |
暗黙的に呼び出されます。 | プログラムで明示的に呼び出す必要があります。 |
newキーワードを使用して新しいオブジェクトが作成されたときに呼び出されます。 | メソッドがプログラマーによって呼び出されたときに呼び出されます。 |
クラスと同じ名前です。 | プログラミング言語で許可されている任意の名前を付けることができます。 |
戻り値の型はありません。 | 戻り値の型が必要です。そうでない場合は、voidを返す必要があります。 |
クラスには、多くのオーバーロードされたコンストラクターを含めることができます。 | クラスには、個別のメソッドだけでなくオーバーロードも含めることができます。 |
子クラスに継承することはできません。 | 子クラスに継承され、オーバーライドされることもあります。 |
よくある質問
Q#1)コンストラクターをプライベートにすることはできますか?
回答: はい。 Javaのコンストラクターはプライベートにすることができます。抽象クラスを含むすべてのクラスは、プライベートコンストラクターを持つことができます。プライベートコンストラクターを使用すると、クラスがインスタンス化されないようにしたり、そのクラスのオブジェクトの数を制限したりできます。
Q#2)Javaでの抽象クラスコンストラクタの使用は何ですか?
回答: 抽象クラスコンストラクターは、抽象クラスを継承する派生クラスのオブジェクトを作成するときに呼び出されます。さらに、抽象クラスにいくつかのメンバー変数がある場合は、抽象クラスコンストラクターでそれらを初期化できます。
Q#3)Javaの抽象クラスでパラメーター化されたコンストラクターを定義できますか?
回答: はい、抽象クラスにパラメーター化されたコンストラクターを含めることができます。次に、super()呼び出しを使用して、抽象クラスを継承した派生クラスからこのコンストラクターを呼び出すことができます。
Q#4)Javaにデストラクタがない理由を知っていますか?
回答: Javaにはガベージコレクタがあるため、特定のデストラクタは必要ありません。このガベージコレクタは、到達不能なオブジェクトを破棄し、メモリを解放します。 finalizeという名前のメソッドも、非決定論的に実行され、リソースの解放などのデストラクタの機能を実行するガベージコレクタの一部です。
Q#5)抽象クラスは本体を持つことができますか?
回答: いいえ。抽象クラスは、メソッド宣言とコンストラクターのみを持つことができます。そのメソッドは実装されていません。この抽象クラスを継承するクラスは、メソッドを実装します。プロトタイプまたは宣言とは別に、可視性またはアクセス指定子を持つこともできます。
結論
これで、Javaのコンストラクターに関するチュートリアルは完了です。ここでは、コンストラクターの定義、作成、およびタイプについて説明しました。また、Javaでのコンストラクターのオーバーロードとコンストラクターのチェーンについても説明しました。
Javaで抽象コンストラクターとプライベートコンストラクターを調べ、インターフェイスにコンストラクターを含めることができない理由を学びました。配列クラスと文字列クラスで使用されるコンストラクターを見ました。
また、コンストラクターとは逆の機能を実行するJavaのデストラクタについても説明しました。コンストラクタはオブジェクトを作成し、デストラクタはオブジェクトを破棄します。 Javaでは、デストラクタ関数は、ガベージコレクション中に実行されるファイナライザによって実行されます。
したがって、Javaには特定のデストラクタがなく、C ++のように定義する必要はありません。また、メソッドとコンストラクターの違いについても説明しました。コンストラクターはメソッドと同じではないことはわかっていますが、コンストラクターは特別なメソッドと見なすことができます。
=> EasyJavaトレーニングシリーズをお読みください。