「スタティックフィールドとスタティックメソッド」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
*[[java]]
**メソッドとフィールドへのアクセス
|修飾子|意味|
|public|任意の場所からアクセス可|
|private|フィールドまたはメソッドが定義されたクラス内のみアクセス可|
|protected|フィールドまたはメソッドが定義されたクラス内、そのクラスのサブクラス、そのクラスと同じパッケージ内のクラスからアクセス可|
|無指定|フィールドまたはメソッドが定義されたクラス内及びそのクラスと同じパッケージないのクラスからアクセス可|
**sample
package test;
public class PubClass
{
private int counter = 20;
protected String message = "メッセージ";
public String getMessage(){ return message; }
protected void setMessage(String s){ message = s; }
public int getCounter(){ return counter;}
private void setCounter(int c){ counter = c; }
}
import test.PubClass
public class PubTest
{
public static void main(Strint[] args)
{
PubClass obj = new PubClass();
// ※1 System.out.println("protected message ----->" + obj.message);
// ※2 System.out.println("private message ----->" + obj.counter);
// ※1 obj.setMessage("TEST PROGRAM");
System.out.println("PubClass.getMessage() ----->" + obj.getMessage());
// ※2 obj.setCounter(20);
System.out.println("PubClass.getCounter() ----->" + obj.getCounter());
}
}
※1 PubClassのprotectedメンバには、パッケージの外からアクセスは不可
※2 PubClassのprivateメンバには、PubClassクラスの外からアクセスすることは不可
*スタティックメソッドとスタティックフィールド
- メソッドやフィールドの宣言にstaticを指定すると、クラスに一つのみ存在するクラス、フィールドとなる。
- staticを指定しない場合には、インスタンスメソッド、インスタンス変数と呼ぶ。
- インスタンスメソッド、インスタンス変数はそれぞれのオブジェクトに属する。
- 各オブジェクトで共有し、値が変更されないフィールドは、&bold(){static final}として定義できる。
**sample
public class StaticTest
{
public static void main(String[] args)
{
StaticClass obj1 = new StaticClass();
StaticClass obj2 = new StaticClass();
System.out.println("object 1 ---> start!");
for(int i=0; i<5; i++)
{
System.out.println("static ---> " + obj1.counter() + "instance ---> " + obj1.localCounter());
System.out.println("object 1 ---> end!\n);
}
System.out.println("object 2 ---> start!");
for(int i=0; i<5; i++)
{
System.out.println("static ---> " + obj2.counter() + "instance ---> " + obj2.localCounter());
System.out.println("object 2 ---> end!\n);
}
}
class StaticClass
{
private static int counter = 0;
private int localCounter = 0;
public static int counter() -----> クラスメソッド
{
return counter++;
}
public int localCounter() -----> インスタンスメソッド
{
return localCounter++;
}
}
+ クラスメソッドはオブジェクト共有で値を持つ
+ インスタンスメソッドはオブジェクト固有で値を持つ
*[[java]]
**メソッドとフィールドへのアクセス
|修飾子|意味|
|public|任意の場所からアクセス可|
|private|フィールドまたはメソッドが定義されたクラス内のみアクセス可|
|protected|フィールドまたはメソッドが定義されたクラス内、そのクラスのサブクラス、そのクラスと同じパッケージ内のクラスからアクセス可|
|無指定|フィールドまたはメソッドが定義されたクラス内及びそのクラスと同じパッケージないのクラスからアクセス可|
**sample
package test;
public class PubClass
{
private int counter = 20;
protected String message = "メッセージ";
public String getMessage(){ return message; }
protected void setMessage(String s){ message = s; }
public int getCounter(){ return counter;}
private void setCounter(int c){ counter = c; }
}
import test.PubClass
public class PubTest
{
public static void main(Strint[] args)
{
PubClass obj = new PubClass();
// ※1 System.out.println("protected message ----->" + obj.message);
// ※2 System.out.println("private message ----->" + obj.counter);
// ※1 obj.setMessage("TEST PROGRAM");
System.out.println("PubClass.getMessage() ----->" + obj.getMessage());
// ※2 obj.setCounter(20);
System.out.println("PubClass.getCounter() ----->" + obj.getCounter());
}
}
※1 PubClassのprotectedメンバには、パッケージの外からアクセスは不可
※2 PubClassのprivateメンバには、PubClassクラスの外からアクセスすることは不可
*スタティックメソッドとスタティックフィールド
- メソッドやフィールドの宣言にstaticを指定すると、クラスに一つのみ存在するクラス、フィールドとなる。
- staticを指定しない場合には、インスタンスメソッド、インスタンス変数と呼ぶ。
- インスタンスメソッド、インスタンス変数はそれぞれのオブジェクトに属する。
- 各オブジェクトで共有し、値が変更されないフィールドは、&bold(){static final}として定義できる。
**sample
public class StaticTest
{
public static void main(String[] args)
{
StaticClass obj1 = new StaticClass();
StaticClass obj2 = new StaticClass();
System.out.println("object 1 ---> start!");
for(int i=0; i<5; i++)
{
System.out.println("static ---> " + obj1.counter() + "instance ---> " + obj1.localCounter());
System.out.println("object 1 ---> end!\n);
}
System.out.println("object 2 ---> start!");
for(int i=0; i<5; i++)
{
System.out.println("static ---> " + obj2.counter() + "instance ---> " + obj2.localCounter());
System.out.println("object 2 ---> end!\n);
}
}
class StaticClass
{
private static int counter = 0;
private int localCounter = 0;
public static int counter() -----> クラスメソッド
{
return counter++;
}
public int localCounter() -----> インスタンスメソッド
{
return localCounter++;
}
}
+ クラスメソッドはオブジェクト共有で値を持つ
+ インスタンスメソッドはオブジェクト固有で値を持つ
+ staticで指定した変数は同じメモリ上に格納されたところ見るよ。