Java のクラスとオブジェクト
Java では、クラスとオブジェクトはオブジェクト指向プログラミング (OOP) の基本概念であり、現実世界の概念とエンティティを表すために使用されます。このクラスは、同様のプロパティと動作を持つオブジェクトのグループを表します。たとえば、動物の種類 犬 という名前の特定の犬がいる間のクラスです。 トミー のオブジェクトです 犬 クラス。
この記事では、Java オブジェクトとクラス、およびそれらをプログラムに実装する方法について説明します。
Javaクラス
Java のクラスは、共通の特性/動作および共通のプロパティ/属性を共有するオブジェクトのセットです。これは、オブジェクトの作成元となるユーザー定義のブループリントまたはプロトタイプです。たとえば、Student はクラスですが、Ravi という名前の特定の学生はオブジェクトです。
Java クラスのプロパティ
- クラスは現実世界の実体ではありません。これは、オブジェクトの作成元となる単なるテンプレート、青写真、またはプロトタイプにすぎません。
- クラスはメモリを占有しません。
- クラスは、さまざまなデータ型の変数のグループとメソッドのグループです。
- Java のクラスには以下を含めることができます。
- データメンバー
- 方法
- コンストラクタ
- 入れ子になったクラス
- インターフェース
Java でのクラス宣言
access_modifier class < class_name>{ データメンバー;方法;コンストラクタ;入れ子になったクラス。インターフェース; }> Javaクラスの例
ジャワ
// Java Program for class example> class> Student {> > // data member (also instance variable)> > int> id;> > // data member (also instance variable)> > String name;> > public> static> void> main(String args[])> > {> > // creating an object of> > // Student> > Student s1 => new> Student();> > System.out.println(s1.id);> > System.out.println(s1.name);> > }> }> |
ジャワ
// Java program to Illustrate Creation of Object> // Using new Instance> // Main class> class> GFG {> > // Declaring and initializing string> > String name => 'GeeksForGeeks'> ;> > // Main driver method> > public> static> void> main(String[] args)> > {> > // Try block to check for exceptions> > try> {> > Class cls = Class.forName(> 'GFG'> );> > // Creating object of main class> > // using instance method> > GFG obj = (GFG)cls.newInstance();> > // Print and display> > System.out.println(obj.name);> > }> > catch> (ClassNotFoundException e) {> > e.printStackTrace();> > }> > catch> (InstantiationException e) {> > e.printStackTrace();> > }> > catch> (IllegalAccessException e) {> > e.printStackTrace();> > }> > }> }> |
ジャワ
// Java program to Illustrate Creation of Object> // Using clone() method> // Main class> // Implementing Cloneable interface> class> GFG> implements> Cloneable {> > // Method 1> > @Override> > protected> Object clone()> > throws> CloneNotSupportedException> > {> > // Super() keyword refers to parent class> > return> super> .clone();> > }> > String name => 'GeeksForGeeks'> ;> > // Method 2> > // main driver method> > public> static> void> main(String[] args)> > {> > GFG obj1 => new> GFG();> > // Try block to check for exceptions> > try> {> > GFG obj2 = (GFG)obj1.clone();> > System.out.println(obj2.name);> > }> > catch> (CloneNotSupportedException e) {> > e.printStackTrace();> > }> > }> }> |
出力1
0 null
出力2
GeeksForGeeks
成果3
GeeksForGeeks
Java クラスのコンポーネント
一般に、クラス宣言には次のコンポーネントを次の順序で含めることができます。
- 修飾子 : クラスはパブリックにすることも、デフォルトのアクセス権を持つこともできます (参照 これ 詳細については)。
- クラスキーワード: class キーワードはクラスを作成するために使用されます。
- クラス名: 名前は頭文字 (慣例により大文字) で始める必要があります。
- スーパークラス(存在する場合): クラスの親 (スーパークラス) がある場合、その名前の前にキーワード extends が続きます。クラスは 1 つの親のみを拡張 (サブクラス化) できます。
- インターフェース(ある場合): クラスによって実装されるインターフェイスのコンマ区切りのリスト (存在する場合) の前にキーワードが続きます。クラスは複数のインターフェイスを実装できます。
- 体: クラス本体は中括弧 { } で囲まれています。
コンストラクターは、新しいオブジェクトを初期化するために使用されます。フィールドはクラスとそのオブジェクトの状態を提供する変数であり、メソッドはクラスとそのオブジェクトの動作を実装するために使用されます。
リアルタイム アプリケーションで使用されるクラスには、次のようなさまざまな種類があります。 入れ子になったクラス 、 匿名クラス 、 そして ラムダ式 。
Javaオブジェクト
Java のオブジェクトはオブジェクト指向プログラミングの基本単位であり、現実の実体を表します。オブジェクトは、クラスの属性とメソッドを使用するために作成されるクラスのインスタンスです。典型的な Java プログラムは多くのオブジェクトを作成し、ご存知のとおり、メソッドを呼び出すことで相互作用します。オブジェクトは次のもので構成されます。
- 州 : オブジェクトの属性によって表されます。また、オブジェクトのプロパティも反映されます。
- 行動 : オブジェクトのメソッドによって表現されます。また、オブジェクトと他のオブジェクトの反応も反映します。
- 身元 : オブジェクトに一意の名前を付け、あるオブジェクトが他のオブジェクトと対話できるようにします。
オブジェクトの例: 犬
Javaオブジェクト
オブジェクトは現実世界にあるものに対応します。たとえば、グラフィックス プログラムには、円、四角形、メニューなどのオブジェクトが含まれる場合があります。オンライン ショッピング システムには、ショッピング カート、顧客、製品などのオブジェクトが含まれる場合があります。
注記: 非プリミティブ データ型のオブジェクトを作成すると、そのオブジェクトは常にヒープ メモリに割り当てられます。
オブジェクトの宣言 (クラスのインスタンス化とも呼ばれます)
クラスのオブジェクトが作成されるとき、そのクラスは次のように言われます。 インスタンス化された 。すべてのインスタンスは、クラスの属性と動作を共有します。ただし、これらの属性の値、つまり状態はオブジェクトごとに一意です。単一のクラスは任意の数のインスタンスを持つことができます。
例:
Javaオブジェクト宣言
(型名;) のように変数を宣言します。これは、タイプが type であるデータを参照するために名前を使用することをコンパイラーに通知します。プリミティブ変数の場合、この宣言は変数用に適切な量のメモリも予約します。したがって、参照変数の場合、型は厳密に具体的なクラス名である必要があります。一般的に、私たちは できない 抽象クラスまたはインターフェイスのオブジェクトを作成します。
Dog tuffy;
このように参照変数(tuffy)を宣言すると、実際にオブジェクトを作成して代入するまでその値は不定(null)となります。参照変数を宣言するだけではオブジェクトは作成されません。
Java オブジェクトの初期化
new 演算子は、新しいオブジェクトにメモリを割り当て、そのメモリへの参照を返すことによってクラスをインスタンス化します。 new 演算子はクラス コンストラクターも呼び出します。
例:
ジャワ
// Class Declaration> public> class> Dog {> > // Instance Variables> > String name;> > String breed;> > int> age;> > String color;> > // Constructor Declaration of Class> > public> Dog(String name, String breed,> int> age,> > String color)> > {> > this> .name = name;> > this> .breed = breed;> > this> .age = age;> > this> .color = color;> > }> > // method 1> > public> String getName() {> return> name; }> > // method 2> > public> String getBreed() {> return> breed; }> > // method 3> > public> int> getAge() {> return> age; }> > // method 4> > public> String getColor() {> return> color; }> > @Override> public> String toString()> > {> > return> (> 'Hi my name is '> +> this> .getName()> > +> '.
My breed,age and color are '> > +> this> .getBreed() +> ','> +> this> .getAge()> > +> ','> +> this> .getColor());> > }> > public> static> void> main(String[] args)> > {> > Dog tuffy> > => new> Dog(> 'tuffy'> ,> 'papillon'> ,> 5> ,> 'white'> );> > System.out.println(tuffy.toString());> > }> }> |
出力
Hi my name is tuffy. My breed,age and color are papillon,5,white
メソッド/関数を使用して初期化します。
ジャワ
public> class> GFG {> > // sw=software> > static> String sw_name;> > static> float> sw_price;> > static> void> set(String n,> float> p)> > {> > sw_name = n;> > sw_price = p;> > }> > static> void> get()> > {> > System.out.println(> 'Software name is: '> + sw_name);> > System.out.println(> 'Software price is: '> > + sw_price);> > }> > public> static> void> main(String args[])> > {> > GFG.set(> 'Visual studio'> ,> 0> .0f);> > GFG.get();> > }> }> |
出力
Software name is: Visual studio Software price is: 0.0
このクラスには 1 つのコンストラクターが含まれています。コンストラクターを認識できるのは、その宣言でクラスと同じ名前が使用され、戻り値の型がないためです。 Java コンパイラは、引数の数と型に基づいてコンストラクターを区別します。のコンストラクター 犬 クラスは 4 つの引数を取ります。次のステートメントは、これらの引数の値として tuffy、papillon,5、white を提供します。
Dog tuffy = new Dog('tuffy','papillon',5, 'white'); このステートメントの実行結果は次のようになります。
Java オブジェクトのメモリ割り当て
注記: すべてのクラスには少なくとも 1つ コンストラクタ。クラスが明示的に何も宣言していない場合、Java コンパイラーは、デフォルト コンストラクターとも呼ばれる、引数のないコンストラクターを自動的に提供します。このデフォルトのコンストラクターは、クラスの親の引数なしのコンストラクター (ステートメントが 1 つだけ含まれているため、つまり super();) を呼び出すか、 物体 クラスに他の親がない場合は、クラス コンストラクターを使用します (Object クラスは直接的または間接的にすべてのクラスの親であるため)。
クラスのオブジェクトを作成する方法
Java でオブジェクトを作成するには 4 つの方法があります。厳密に言えば、方法は 1 つだけです( 新しい キーワード)、残りは内部的に使用されます。 新しい キーワード。
1. 新しいキーワードを使用する
これは、Java でオブジェクトを作成する最も一般的かつ一般的な方法です。
例:
// creating object of class Test Test t = new Test();
2. Class.forName(String className)メソッドの使用
java.lang パッケージには、Class という名前の事前定義クラスがあります。 forName(String className) メソッドは、指定された文字列名のクラスに関連付けられた Class オブジェクトを返します。クラスには完全修飾名を付ける必要があります。この Class オブジェクトで new Instance() メソッドを呼び出すと、指定された文字列名を持つクラスの新しいインスタンスが返されます。
// creating object of public class Test // consider class Test present in com.p1 package Test obj = (Test)Class.forName('com.p1.Test').newInstance(); 3. clone() メソッドの使用
clone() メソッドは Object クラスに存在します。オブジェクトのコピーを作成して返します。
// creating object of class Test Test t1 = new Test(); // creating clone of above object Test t2 = (Test)t1.clone();
4. デシリアライゼーション
逆シリアル化は、ファイルに保存された状態からオブジェクトを読み取る技術です。参照する Java でのシリアル化/逆シリアル化
FileInputStream file = new FileInputStream(filename); ObjectInputStream in = new ObjectInputStream(file); Object obj = in.readObject();
1 つのタイプのみで複数のオブジェクトを作成する (良い習慣)
リアルタイムでは、クラスのさまざまなオブジェクトがさまざまなメソッドで必要になります。参照を保存するために多数の参照を作成することは良い習慣ではないため、静的参照変数を宣言し、必要に応じてそれを使用します。この場合、メモリの浪費は少なくなります。参照されなくなったオブジェクトは、 ガベージコレクター ジャワの。
例:
Test test = new Test(); test = new Test();
継承システムでは、親クラス参照変数を使用してサブクラス オブジェクトを格納します。この場合、同じ参照変数を使用して、異なるサブクラス オブジェクトに切り替えることができます。
例:
class Animal {} class Dog extends Animal {} class Cat extends Animal {} public class Test { // using Dog object Animal obj = new Dog(); // using Cat object obj = new Cat(); } Java の匿名オブジェクト
匿名オブジェクトは、インスタンス化されるが、参照変数には格納されないオブジェクトです。
- これらは即時のメソッド呼び出しに使用されます。
- これらはメソッド呼び出し後に破棄されます。
- これらはさまざまな図書館で広く使用されています。たとえば、AWT ライブラリでは、イベントのキャプチャ時に何らかのアクション (キーの押下など) を実行するために使用されます。
- 以下の例では、キー ボタン (btn で参照) が押されたときに、ハンドル メソッドを呼び出すためだけに EventHandler クラスの匿名オブジェクトを作成しています。
btn.setOnAction(new EventHandler() { public void handle(ActionEvent event) { System.out.println('Hello World!'); } }); Javaクラスとオブジェクトの違い
Java におけるクラスとオブジェクトの違いは次のとおりです。
| クラス | 物体 |
|---|---|
| クラスはオブジェクトの設計図です。オブジェクトを作成するために使用されます。 | オブジェクトはクラスのインスタンスです。 |
| クラスの宣言時にはメモリは割り当てられません。 | オブジェクトが作成されるとすぐにメモリが割り当てられます。 |
| クラスとは、類似したオブジェクトのグループです。 | オブジェクトとは、本や車などの現実世界の実体です。 |
| クラスは論理的なエンティティです。 | オブジェクトは物理的な実体です。 |
| クラスは 1 回だけ宣言できます。 | オブジェクトは要件に応じて何度でも作成できます。 |
| クラスの例としては車が挙げられます。 | クラスカーのオブジェクトには、BMW、メルセデス、フェラーリなどが含まれます。 |