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




