JavaA2Z

KAB-studio > プログラミング > JavaA2Z > staticメソッドとは

staticメソッド

日本語 静的メソッド
英語 static method
ふりがな すたてぃっくめそっど
フリガナ スタティックメソッド

解説

staticで修飾されたメソッド
static 戻り値 メソッド(引数){ 実装 }」のように、メソッド宣言の先頭にstaticが付けられたメソッド
staticメソッドは、呼び出す際にインスタンスを必要としない。
クラス.メソッド()」の形式で呼び出すことができる。呼び出すstaticメソッドが自クラスにある場合には、呼び出し元のメソッドがstaticメソッド、非staticメソッドに関わらず呼び出すことができる。
通常のメソッド(非staticメソッド)は、ポリモーフィズムの関係で「インスタンス作成時に呼び出すメソッドが決められる」事もあり、メソッド呼び出しにはインスタンスが必ず必要となる。
だが、staticメソッドはインスタンスではなく「クラスに属するメソッド」のため、インスタンスを作らずに直接呼び出すことができる。
 
インスタンスと関係ないため、自クラスインスタンスに格納されている普通のフィールド(非staticフィールド)にはアクセスできず、同じく普通のメソッド(非staticメソッド)を呼び出すこともできない。staticからアクセスできるのはstaticだけ、ということになる。
また、staticメソッドはインスタンスと関係ないためポリモーフィズムとも無縁である。
ポリモーフィズムされないこともあり「staticメソッドは呼べば必ずそのメソッドが呼び出される」という分かりやすさがあるが、オブジェクト指向に逆する考えということもあり、Javaの設計思想と異なるため、基本的にはstaticメソッドは多用しない方が良い。staticメソッドは、ポリモーフィズムオブジェクトとは無関係な「ユーティリティメソッド」等に限った方が良い。
 
これとは別に、staticメソッドには「メソッド名のないstaticメソッド」が存在する。これは「static初期化子」と呼ばれるものである。詳しくは「static初期化子」の項目を参考のこと。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    // staticメソッド。
    public static void main( String[] args )
    {
        // クラスがロードされたときに、メソッド名のないstaticメソッドが実行されます。
        // Sample#static
        
        // staticメソッドをstaticメソッドから呼び出します。
        staticMethod();
        // Sample#staticMethod()

        // staticメソッドから非staticメソッドからは呼び出せません。
        // nonStaticMethod();
        // コンパイルエラー:
        // 型 Sample からのメソッド nonStaticMethod() は静的ではありません。

        // 非staticメソッドから呼び出してみます。
        Sample sample = new Sample();
        sample.callingNonStaticMethod();

        // 外から呼び出す際には、クラス名を使って呼び出します。
        Sample.staticMethod();
        // Sample#staticMethod()
        // このように、インスタンスを作らなくても呼べるのが
        // staticメソッドです。

        // ちなみにインスタンスを通してstaticメソッドを呼び出すと
        // エラーにはなりませんが警告にはなります。
        sample.staticMethod();
        // 警告:
        // The static method staticMethod() from the type Sample should be accessed in a static way
    }

    /**
    *   非staticメソッド(呼び出す方)。
    */
    private void callingNonStaticMethod()
    {
        // staticメソッドを非staticメソッドから呼び出します。
        staticMethod();
        // Sample#staticMethod()

        // 非staticメソッドから非staticメソッドを呼び出します。
        nonStaticMethod();
        // Sample#nonStaticMethod()
    }

    /**
    *   staticメソッド。
    */
    private static void staticMethod()
    {
        System.out.println( "Sample#staticMethod()" );
    }

    /**
    *   非staticメソッド。
    */
    private void nonStaticMethod()
    {
        System.out.println( "Sample#nonStaticMethod()" );
    }
}
// Sample.java
public class Sample
{
    // staticメソッド。
    public static void main( String[] args )
    {
        // クラスがロードされたときに、メソッド名のないstaticメソッドが実行されます。
        // Sample#static
        
        // staticメソッドをstaticメソッドから呼び出します。
        staticMethod();
        // Sample#staticMethod()

        // staticメソッドから非staticメソッドからは呼び出せません。
        // nonStaticMethod();
        // コンパイルエラー:
        // 型 Sample からのメソッド nonStaticMethod() は静的ではありません。

        // 非staticメソッドから呼び出してみます。
        Sample sample = new Sample();
        sample.callingNonStaticMethod();

        // 外から呼び出す際には、クラス名を使って呼び出します。
        Sample.staticMethod();
        // Sample#staticMethod()
        // このように、インスタンスを作らなくても呼べるのが
        // staticメソッドです。

        // ちなみにインスタンスを通してstaticメソッドを呼び出すと
        // エラーにはなりませんが警告にはなります。
        sample.staticMethod();
        // 警告:
        // The static method staticMethod() from the type Sample should be accessed in a static way
    }

    /**
    *   非staticメソッド(呼び出す方)。
    */
    private void callingNonStaticMethod()
    {
        // staticメソッドを非staticメソッドから呼び出します。
        staticMethod();
        // Sample#staticMethod()

        // 非staticメソッドから非staticメソッドを呼び出します。
        nonStaticMethod();
        // Sample#nonStaticMethod()
    }

    /**
    *   staticメソッド。
    */
    private static void staticMethod()
    {
        System.out.println( "Sample#staticMethod()" );
    }

    /**
    *   非staticメソッド。
    */
    private void nonStaticMethod()
    {
        System.out.println( "Sample#nonStaticMethod()" );
    }
}

この単語を含むページ

「みだし」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/07/14
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。