02-3: INSTANCEメソッドプログラミング(自クラス呼出し)
前節では、静的な(Staticな)メソッドベースでメソッドを管理しました
今度はインスタンスメソッドを管理してみましょう。
インスタンスメソッドは、クラスを利用して、インスタンスオブジェクトを生成する必要があります。
クラスからインスタンスを生成する方法は以下の通りです。
String instance = new String();
いつもの文字列型の宣言では、文字列のStringクラスからinstance
という名前のインスタンスを生成しています。
では、自クラス呼び出しではどうなるかというと...
public class InstanceMethodTest{
public static void main(String[] args){
InstanceMethodTest instance = new InstanceMethodTest(); //自クラス呼び出し
instance.iMethod(); //メソッド呼び出し
}
//インスタンスメソッド `iMethod`
void iMethod(){
System.out.println("Hello, Instance!");
}
}
これは、普段文字列型からstr.subString()
やstr.charAt()
をしているのと同じ要領です。
グローバル変数・メンバー変数(フィールド)とローカル変数、変数スコープについて
変数は、宣言する場所によって、変数を確認できる範囲(スコープ)が異なります。また、Javaにはこのほかにアクセス修飾子(public
やprivate
など)を付記することも可能です。
カテゴリ | 用語名 | 宣言例 | 説明 | スコープ |
---|---|---|---|---|
一般的用語として | グローバル変数 | - | どこからでも確認できる変数 | プログラム上の全てのところから |
一般的用語として | ローカル変数 | - | 宣言した場所でのみ確認できる変数 | 宣言した関数やメソッドの範囲内 |
Javaにおける | メンバー変数(フィールド) | int hoge; グローバル変数相当。クラスのメンバーになるので。クラス宣言の直下のブロックをフィールドというので、フィールド変数とも。 | クラスのインスタンス全体から。 | |
Javaにおける | クラス変数 | static int hoge; グローバル変数相当。クラスに紐づくので。 | クラス全体から。 | |
Javaにおける | ローカル変数 | int hoge; | 一般的ローカル変数相当。 | インスタンスのメソッド内やブロック内({} )でのみ確認できる |
Javaにおいて、例えば、メンバー変数でstatic int hogebar
と宣言したとします。あるメソッド内で、同じくint hogebar
と宣言したとします。そうすると、hogebar
でアクセスできるのは、後者のほうです。
public class ScopeTest{
static int hogebar = 10; // クラス変数
int hogefoo = 10; //メンバー変数
public static void main(String[] args){
int hogebar = 100;
System.out.println("hogebar ->"+ hogebar);
////////////////////////////////
// インスタンス生成
ScopeTest instance = new ScopeTest(); // 自クラス呼び出し
System.out.println("instance.hogefoo ->"+ instance.hogefoo);
System.out.println("call -> instance.controlHoge();");
instance.controlHoge();
System.out.println("instance.hogefoo ->"+ instance.hogefoo);
}
////////////////////////////////////
// インスタンスメソッドの場合
void controlHoge(){
int hogefoo = 1;
System.out.println("hogefoo ->"+ hogebar);
System.out.println("this.hogefoo ->"+ this.hogefoo);
this.hogefoo = 10000;
System.out.println("this.hogefoo = 10000;");
System.out.println("this.hogefoo ->"+ this.hogefoo);
}
}
インスタンス変数で同様のことがあった場合は、this
をつけることによって、メンバー変数を
サンプルプログラム
public class InstanceMethodTest{
/*
¦* インスタンス変数`ins`と
¦* クラス変数`cls`を定義
¦*/
String ins = "hoge";
static String cls = "foo";
public static void main(String[] args){
/*
* 4つのインスタンスを生成
*/
InstanceMethodTest i1 = new InstanceMethodTest();
InstanceMethodTest i2 = new InstanceMethodTest();
InstanceMethodTest i3 = new InstanceMethodTest();
InstanceMethodTest i4 = new InstanceMethodTest();
/*
* 値を操作しながら、順に呼び出してみる
*/
i1.iMethod(); // 1. `i1`(インスタンス操作なし)を呼び出してみる
i2.ins = "fuga"; // 2. インスタンス`i2`の`ins`を変える
i2.iMethod(); // 3. `i2`(`ins`操作済)を呼び出してみる
cls = "bar"; // 4. クラス変数`cls`を変更してみる
i3.iMethod(); // 5. `i3`(インスタンス操作なし)を呼び出してみる
i4.iMethod("hoga"); // 6. `i4`を呼び出してみる
i4.iMethod();
}
/*
* iMethod - 変数を表示する
*/
void iMethod(){
System.out.println("CLS変数:" + cls);
System.out.println("INS変数:" + ins);
System.out.println("-----------------------------");
}
/*
* iMethod - 変数を表示する
* @param str this.insに挿入する文字列
*/
void iMethod(String str){
String ins = "moo";
this.ins = str;
System.out.println("CLS変数:" + cls);
System.out.println("INS変数:" + ins);
System.out.println("THIS.INS変数:" + this.ins);
System.out.println("-----------------------------");
}
}
最終更新日: 2021年4月30日