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

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で指定した変数は同じメモリ上に格納されたところ見るよ。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2008年01月15日 21:42
ツールボックス

下から選んでください:

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