Java のクラスとオブジェクト
Java では、クラスとオブジェクトがオブジェクト指向プログラミング (OOP) の基礎を形成します。これらは、現実世界のエンティティをモデル化し、構造化された方法でコードを整理するのに役立ちます。
- クラスは、共通のプロパティと動作を共有するオブジェクトを作成するために使用される設計図です。
- オブジェクトはクラスのインスタンスです。これは、クラス テンプレートから作成された特定のエンティティを表します。
たとえば、Dog はクラスです。Tommy はそのクラスのオブジェクトです。
クラスとオブジェクト (ここでは Dog がクラス、Bobby がオブジェクトです) Javaクラス
クラスは、オブジェクトのデータと動作を定義する設計図です。関連するフィールドとメソッドを 1 つのユニットにグループ化します。そのメンバーのメモリは、オブジェクトの作成時にのみ割り当てられます。
- 共有構造を持つオブジェクトを作成するためのテンプレートとして機能します。
- インスタンス化されるまでフィールドのメモリを占有しません。
- フィールド、メソッド、コンストラクター、ネストされたクラスおよびインターフェイスを含めることができます。
class Student { int id ; String n ; public Student ( int id String n ) { this . id = id ; this . n = n ; } } public class Main { public static void main ( String [] args ) { Student s1 = new Student ( 10 'Alice' ); System . out . println ( s1 . id ); System . out . println ( s1 . n ); } }
出力
10 Alice
Javaオブジェクト
オブジェクトは、そのデータと操作にアクセスするために作成されたクラスのインスタンスです。各オブジェクトは独自の状態を保持します。
- 州 : フィールドに格納された値。
- 行動 : メソッドを通じて定義されたアクション。
- 身元 : あるオブジェクトを別のオブジェクトから区別します。
オブジェクトは、顧客の製品やサークルなどの現実世界のアイテムを反映します。非プリミティブ オブジェクトはヒープに格納されますが、その参照はスタック上に残ります。
Java オブジェクト (犬の例) オブジェクトのインスタンス化
オブジェクトの作成はインスタンス化として知られています。クラスのすべてのインスタンスは、異なる状態値を格納しながら構造と動作を共有します。
Javaオブジェクト宣言 宣言:
犬のタフィー。
これは参照を宣言するだけです。オブジェクトは作成されず、参照は null を保持します。
初期化:
tuffy = new Dog('Tuffy' 'Papillon' 5 'White');
初期化 new 演算子はメモリを割り当て、コンストラクターを呼び出します。
例: クラスの定義と使用
Java public class Dog { String name ; String breed ; int age ; String color ; public Dog ( String name String breed int age String color ) { this . name = name ; this . breed = breed ; this . age = age ; this . color = color ; } public String getName () { return name ; } public String getBreed () { return breed ; } public int getAge () { return age ; } public String getColor () { return color ; } @Override public String toString () { return 'Name is: ' + name + 'nBreed age and color are: ' + breed + ' ' + age + ' ' + color ; } public static void main ( String [] args ) { Dog tuffy = new Dog ( 'tuffy' 'papillon' 5 'white' ); System . out . println ( tuffy ); } }
出力
Name is: tuffy Breed age and color are: papillon 5 white
注記: すべてのクラスには少なくとも 1 つのコンストラクターがあります。何も定義されていない場合、Java は親コンストラクターを呼び出すデフォルトの引数なしのコンストラクターを提供します。
メソッド/関数を使用してオブジェクトを初期化する
Java public class Geeks { static String name ; static float price ; static void set ( String n float p ) { name = n ; price = p ; } static void get () { System . out . println ( 'Software name is: ' + name ); System . out . println ( 'Software price is: ' + price ); } public static void main ( String [] args ) { Geeks . set ( 'Visual Studio' 0.0f ); Geeks . get (); } }
出力
Software name is: Visual Studio Software price is: 0.0
Java でオブジェクトを作成する方法
Java は 4 つの標準的なアプローチをサポートしています。
1. 新しいキーワードの使用
オブジェクトを作成する最も直接的な方法。
Java // creating object of class Test Test t = new Test ();
2. リフレクションの使用
Spring などのフレームワークで見られる動的クラスの読み込みに使用されます。
Java class Student { public Student () {} } public class Main { public static void main ( String [] args ) { try { Class > c = Class . forName ( 'Student' ); Student s = ( Student ) c . getDeclaredConstructor (). newInstance (); System . out . println ( s ); } catch ( Exception e ) { e . printStackTrace (); } } }
出力
Student@1dbd16a6
3. clone() メソッドの使用
clone() は既存のオブジェクトのコピーを作成します。クラスは Cloneable を実装する必要があります。
Java class Geeks implements Cloneable { String name = 'GeeksForGeeks' ; @Override protected Object clone () throws CloneNotSupportedException { return super . clone (); } public static void main ( String [] args ) { try { Geeks g1 = new Geeks (); Geeks g2 = ( Geeks ) g1 . clone (); System . out . println ( g2 . name ); } catch ( Exception e ) { e . printStackTrace (); } } }
出力
GeeksForGeeks
4. デシリアライゼーションの使用
逆シリアル化は、ファイルに保存された状態からオブジェクトを読み取る技術です。オブジェクトは保存されたバイト ストリームから再作成されます。
参照 Java でのシリアル化/逆シリアル化 。
Java import java.io.* ; class Student implements Serializable { private String name ; public Student ( String name ) { this . name = name ; } public String toString () { return 'Student: ' + name ; } } public class Main { public static void main ( String [] args ) { try ( ObjectOutputStream out = new ObjectOutputStream ( new FileOutputStream ( 'student.ser' ))) { out . writeObject ( new Student ( 'Alice' )); } catch ( IOException e ) { e . printStackTrace (); } try ( ObjectInputStream in = new ObjectInputStream ( new FileInputStream ( 'student.ser' ))) { Student s = ( Student ) in . readObject (); System . out . println ( s ); } catch ( Exception e ) { e . printStackTrace (); } } }
出力
Student: Alice
単一の参照は、異なる時点で異なるオブジェクトを指すことができます。
Java Test test = new Test (); test = new Test ();
継承では、子オブジェクトの親参照を使用するのが一般的です。
Java Animal obj = new Dog (); obj = new Cat ();
参照されていないオブジェクトはガベージ コレクションの対象になります。
匿名オブジェクト
匿名オブジェクトは参照なしで作成され、1 回限りの操作にすぐに使用されます。
- 参照変数がありません: オブジェクトを再利用できません。
- 作成してすぐに使用すると、短期間のタスク用にメモリが節約されます。
- イベント処理 (ボタンのクリックなど) で一般的です。
new Dog ( 'Max' 'Labrador' 3 'Black' ). getName ();
UI イベント処理で一般的です。
クイズの作成