スタティックフィールドとスタティックメソッド


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

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を指定しない場合には、インスタンスメソッド、インスタンス変数と呼ぶ。
  • インスタンスメソッド、インスタンス変数はそれぞれのオブジェクトに属する。
  • 各オブジェクトで共有し、値が変更されないフィールドは、 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++;
  }
}
  1. クラスメソッドはオブジェクト共有で値を持つ
  2. インスタンスメソッドはオブジェクト固有で値を持つ
  3. staticで指定した変数は同じメモリ上に格納されたところ見るよ。
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。