オブジェクト指向プログラミングであるJavaでインスタンスを理解することは必須条件と言えます。
しかし勉強し始めたばかりですと、インスタンスとは何なのか?どうやってインスタンス化するのか?なぜインスタンスが大切なのか?など分からないことがたくさん出てきます。
私も学び始めた当初はインスタンスってなんだ?なんでインスタンス化などという面倒な作業をするのだろうか?という疑問がありました。
そういったお悩みを抱えている方は多いと思います。
今回はそのようなお悩みを解決できるようにインスタンスについて解説していきます。
インスタンスとは?
ではまずインスタンスとは何なのかについて解説していきます。
インスタンスとは簡単に言うと設計図であるクラスを実体化させたものです。
クラスに関しては下記記事で説明していますので、わからないという方は一度参照してみてください。
【Java】クラスとは何か?メソッドとは何か? | エンジニアKISARAGIの備忘録 (kisaragi-it.com)
ただ上記記時ではクラスはモノと表現していましたが、厳密には実体のないまだ設計段階のモノと言えます。
その設計段階のモノを実際に具現化したモノがインスタンスとなります。
なのでクラスのみとなると設計図しかない状態のため、実際に操作することはできません。
そのためインスタンスへ変換するための操作であるインスタンス化が重要となってくるのです。
インスタンス化について
クラスからインスタンスを生成することを「インスタンス化する」といいます。
このインスタンス化の方法について解説していきます。
基本的なインスタンス化の方法は下記の通りとなります。
クラス名 インスタンス変数=new クラス名();
そして実際の使用例と実行結果は下記の通りとなります。
【使用方法】
class ex2 {
private int lastaction=0;
public void setLastAction(int action) {
this.lastaction=action;
}
public int getLastAction() {
return this.lastaction;
}
}
public class ex1 {
public static void main(String[] args) {
int action=1;
ex2 lastaction=new ex2();
if(lastaction.getLastAction()==0) {
System.out.println("前回の動作はシャットダウンでした");
}
else {
System.out.println("前回の動作は起動でした");
}
lastaction.setLastAction(action);
if(lastaction.getLastAction()==0) {
System.out.println("今回の動作はシャットダウンでした");
}
else {
System.out.println("今回の動作は起動でした");
}
}
}
【実行結果】
前回の動作はシャットダウンでした
今回の動作は起動でした
上記コードはPCの動作について確認するためのコードで、前回と今回の動作がシャットダウンだったのか?起動だったのか?について判断してくれるものです。
因みに0だとシャットダウン、1だと起動と判断しています。
「ex2 lastaction=new ex2();」でインスタンス化することでex2クラスが実体化してgetLastActionメソッドとsetLastActionメソッドへアクセスできるようになりました。
getLastActionメソッドでは前回、今回の動作パラメータ値を取得してきてくれるように「return this.lastaction;」と記載しています。
「this」と記載することでex2クラスに定義しているlastaction変数へアクセスできるようになります。
今回の場合は「this」を使用しなくても問題ありませんが、ex2クラスにあるactionをすべてlastactionとした場合困ったこととなります。
クラスの先頭に定義した変数をメンバ変数、メソッド内で定義したものをローカル変数と言います。
この2つが同じ変数名だとどちらを指定しているのか分からなくなります。
そこで「this」を使用することで「こっちはメンバ変数ですよ」ということを分かるようにしているのです。
そしてsetLastActionメソッドでは今回の動作をlastactionに新しく書き込むためのメソッドとなっています。
これで前回の動作と今回の動作が何なのか判断できるようにしたものが今回のコードとなっています。
インスタンスメソッドとインスタンス変数
最後に解説するのはインスタンスメソッドとインスタンス変数です。
「インスタンス化について」の所でも少し触れましたが、他のクラス内のメソッドや変数へはインスタンス化することで基本的にはアクセス可能となります。
先ほどのコード内の「lastaction.getLastAction()」がインスタンスメソッドの使用例となっています。
インスタンス化した元クラス内のメソッドをインスタンスの後ろにくっつけるだけです。
そしてインスタンスクラスも使用方法はほぼ同じで下記の通りとなります。
インスタンス名.インスタンス変数
先ほどの「インスタンス化について」でご紹介したコード中ですと「private int lastaction=0;」となっており、外部クラスからのアクセスができない状態です。
この状態ですと一度他のメソッドにアクセスしてそこからインスタンス変数にアクセスするという方法がよくとられます。
今回のコードでもsetLastActionメソッドやgetLastActionメソッドでアクセスしています。
仮に直接アクセスしたいとなった場合は「public int lastaction=0;」として「lastaction.lastaction」とすることでインスタンス変数へアクセスが可能となります。
まとめ
今回の記事ではインスタンスについて下記の順番で解説してきました。
- インスタンスとは?
- インスタンス化について
- インスタンスメソッドとインスタンス変数
インスタンスはオブジェクト指向プログラミングであるJavaでは必須の知識となっていますので、ぜひこの機会に理解していってください。
以上で今回の解説は終了となります。
コメント