1. オブジェクトの作成

さて、オブジェクトの作成に到達しました。すでにこの問題に遭遇しましたが、ここではこのトピックをさらに詳しく分析します。実際、オブジェクトを作成するのは非常に簡単です。

オブジェクトを作成するには、new演算子を使用する必要があります。オブジェクトの作成はおおよそ次のようになります。

new Class(arguments)

オブジェクトを作成した後、ほとんどの場合、そのオブジェクトへの参照を変数にすぐに保存します。多くの場合、その変数は、作成されたオブジェクトと同じ型を共有します。つまり、オブジェクトを作成するときは、通常、次のようなコードが表示されます。

Class name = new Class(arguments)

ここで、 は新しい変数の作成を示し、等号の右側のコードは、タイプが である新しいオブジェクトの作成を示します。Class nameClass

例:

コード ノート
Object o = new Object();
Objectオブジェクトを作成する
Cat pet = new Cat();
Catオブジェクトを作成する
Scanner console = new Scanner(System.in)
Scannerオブジェクトを作成する

プログラマーは多くの場合、変数にクラスの名前を付けますが、小文字を使用します。初心者プログラマにとって、このようなコードは混乱を招く可能性があります。

コード
BufferedReader bufferedReader = new BufferedReader( reader );
Cat cat = new Cat();
PersonInfo personInfo = new PersonInfo()

このコードには何も問題はありません。これは最も普通のコードであり、変数が作成され、すぐに同じ型のオブジェクトによって初期化されます。

等号の左側には変数の作成があります。右側はオブジェクトの作成です。それでおしまい。

2. コンストラクター

おそらく、オブジェクトの作成時に一部の引数が頻繁に渡されるのを見たことがあるでしょう。さらに、一部のオブジェクトには引数が渡​​されますが、他のオブジェクトには渡されません。引数を伴うこのメカニズム全体はどのように機能するのでしょうか?

ここでもすべてが単純です。各クラスには、オブジェクトの作成時に渡される引数を処理する特別なメソッド (複数のメソッド) があります。これらのメソッドはコンストラクターと呼ばれます。あるいは、コンストラクターという 1 つだけについて話している場合もあります。

コンストラクター メソッドと通常のメソッドを区別するのは簡単です。この方法には 2 つの際立った特徴があります。

  • コンストラクターの名前はそのクラスの名前と同じです (大文字で始まります)。
  • コンストラクターには戻り値の型がありません。

一般に、通常は次のようになります。

modifiers Class(arguments)
{
   Code
}

例:

コード ノート
public class Point
{
   public int x;
   public int y;

   Point(int x, int y)
   {
      this.x = x;
      this.y = y;
   }
}
Pointクラス




Pointクラス コンストラクター
public class Solution
{
   public static void main(String[] args)
   {
      Point point = new Point(5, 10);
   }
}




クラスのオブジェクトを作成しますPoint。クラスのコンストラクターが呼び出されます。

コンストラクターがどのようになっているかに注目してください。コンストラクターには戻り値の型がなく、その名前はクラス名と同じです。

そしてもう 1 つ、コンストラクター内のコードを見てください。コンストラクターのパラメーターは、クラスのフィールドと同じ名前 (x および y) を持ちます。新しいパラメータ名を作成しないようにするのが標準的な方法です。名前はクラスのフィールドの名前と同じです。名前の競合は、this キーワードを使用して解決されます。

3. コンストラクターの呼び出し

new演算子と「new Class ( argument )」などのコマンドを使用して新しいオブジェクトを作成すると、次の 2 つのことが起こります。

  • Java マシンは、タイプがClassであるオブジェクトを作成します。
  • Java マシンはオブジェクトのコンストラクターを呼び出し、引数を渡します。

プログラマーは、クラスにどのコンストラクターが必要か、およびこれらのコンストラクターにどのようなパラメーターが必要かを決定できます。

動物保護施設で猫を追跡するクラスを作成することにしたとします。その場合、Catクラスは次のようになります。

class Cat
{
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }
}
Cat cat = new Cat("Whiskers", 2);
これは許可されています
Cat cat = new Cat("Whiskers");
ただし、これは許可されていません。このコードはコンパイルできません。
Cat cat = new Cat();
そして、これは許されません。このコードはコンパイルされません。

このCatクラスには、name パラメーターと age パラメーターを持つコンストラクターが 1 つだけあります。他にコンストラクターがないため、オブジェクトの作成時に猫の名前 ( name) と年齢 ( ) を引数として渡す必要があります。ageコンストラクターに引数を渡すことはオプションではありません

4. 複数のコンストラクター

ただし、必要に応じて、クラスに複数のコンストラクターを追加できます。コンストラクターやそのパラメーターの数に制限はありません。オブジェクトを作成すると、コンパイラはパラメータに一致するコンストラクタを自動的に選択します。

コード ノート
class Cat
{
   public static final int UNKNOWN = -1;
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }
   public Cat(String name)
   {
      this.name = name;
      this.age = UNKNOWN; // Unknown
   }
}
Cat cat = new Cat("Whiskers", 2);
これは許可されます。最初のコンストラクターが呼び出されます。
Cat cat = new Cat("Whiskers");
これは許可されます。2 番目のコンストラクターが呼び出されます。
Cat cat = new Cat();
ただし、これは許可されていません。このコードはコンパイルできません。

私たちは、猫の年齢がわからない可能性があるという事実を考慮することにしました。このケースを処理するために、UNKNOWNパラメータが 1 つだけ (猫の名前) を持つコンストラクターとともに特別な定数を追加しました。

両方のコンストラクター内で両方の変数を初期化することに注意してください。不明または欠落しているパラメーターを定数に置き換えますUNKNOWN

age 変数に値が割り当てられていない場合、デフォルト値は 0 になります。結局のところ、道で見つかった子猫は丸 0 歳である可能性があります。つまり、年齢変数のゼロは必ずしも「年齢不明」を意味するわけではありません。

5. デフォルトのコンストラクター

オブジェクトをパラメータなしでインスタンス化したい場合は、クラスで引数なしのコンストラクターを宣言する必要があります。

パラメーターのないコンストラクターは、必ずしもコードのないコンストラクターであるとは限りません。このようなコンストラクターには、変数を開始値で初期化するコードを含めることができます。

コード ノート
class Cat
{
   public static final int UNKNOWN = -1;
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }

   public Cat()
   {
      this.name = "Nameless";
      this.age = UNKNOWN; // Unknown
   }
}
Cat cat = new Cat("Whiskers", 2);
これは許可されます。最初のコンストラクターが呼び出されます。
Cat cat = new Cat();
これは許可されます。2 番目のコンストラクターが呼び出されます。

デフォルトのコンストラクター

知って覚えておくべき非常に重要な点があります。

クラスでコンストラクターが 1 つも宣言されていない場合、コンパイラーはデフォルトのコンストラクターを追加します。これは、 public 修飾子を持つ引数のないコンストラクターです。

ただし、クラスでコンストラクターが 1 つでも宣言されている場合、デフォルトのコンストラクターは追加されないため、必要に応じて自分で追加する必要があります。

コード ノート
class Cat
{
   public String name;
   public int age;
}
Cat cat = new Cat();
これは許可されます。デフォルトのコンストラクターが呼び出されます。