インスタンスとコンストラクタ
インスタンスとは
インスタンスとはjavaにおいてMainメソッドにおいてあるクラスの要素を使いたいときに生成するものである
例えばMainメソッドにおいてAクラスのhogeメソッドを使用したいとする
Mainメソッド内でhoge();としてもどこの何のhogeかわからない
そもそもプログラムを読み取ると最初にstatic修飾子がついているものがヒープ領域のstatic領域に生成される
そこからstatic領域にMainメソッドがあるのでそれを起動するシステムとなっている
なので他のクラスについてはこの時点では読み込まれていない
そこでMainメソッド内でクラスの要素を使いたいときはクラスからヒープ領域にデータを写すことから始める必要がある
public class Main{ public static void main(String[] args) { A a = new A(); a.hoge(); } }
上記Mainクラスを見て欲しい
Mainメソッドではまず最初に「A a = new A();」と書かれている
ここでは「Aクラスを参照してヒープ領域にAクラスの写しを新しく作って、それの参照アドレスをaとする」という意味になる
これでmainメソッドないではAクラスを使用することができるようになった
次にクラス内のメソッドや変数の使い方だが、「a.hoge();」とする
まず使いたいクラスの写しのアドレスが書いてある「a」を宣言して続けてそのaにあるメソッドを宣言する
変数も同様である
これで使うことができる
このようにクラスの要素を使えるようにヒープ領域に写しを作ることを”インスタンス”を生成するという
このインスタンスだが生成された時点でメソッドが実行されてしまうものがある
それを”コンストラクタ”という
コンストラクタって??
以下のAクラスとMainクラスを見て欲しい
まずはAクラス
public class A{ public A(){ System.out.println("A"); } public void hoge(){ System.out.println("hoge"); } }
続いてMainクラス
public class Main{ public static void main(String[] args) { A a = new A(); } }
これでMainメソッドを実行しただけで出力では”A"と出る
それはコンストラクタができているからである
Mainメソッドでインスタンスを生成した
そのとき、対象のクラスの中に同じ名前で戻り値がないメソッドがあればそのメソッド内は実行される
つまり上記のコードは
public class Main{ public static void main(String[] args) { A a = new A(); a.A(); } }
と自動的になっているのである
これをコンストラクタという
このコンストラクタは複数所持することも可能である
public class A{ public A(){ System.out.println("A"); } public A(int num){ System.out.println(num); } }
上記のAクラスの場合、A()とA(int num)のコンストラクタがある
A()を使いたいときは、「A a = new A();」、
A(int num)を使いたいときは、「A a = new A(10);」とする
このように引数の種類で判断して実行してくれる