static final
| 日本語 | 静的最終 |
| 英語 | static final |
| ふりがな | すたてぃっくふぁいなる |
| フリガナ | スタティックファイナル |
staticとfinalのふたつの予約語で修飾されたもの。
フィールドに「static final 型 フィールド名 = 初期値;」の形式で使用する。
このstatic finalフィールドは、staticフィールドのためインスタンスを作らずに使用でき、final変数のため値が変更できない。そのため、定数値を宣言する場合に使用される。
リテラルは、プログラム上に直接書くと修正が難しくなる。
たとえば「int i = 100;」と書かれている場合に、この「100」という値の意味が分からず、また、プログラム上に複数の「100」がある場合、それぞれの値が同じ意味を持つのかそれとも別の意味の「100」なのかが判別できない。
そのため、リテラルはstatic finalフィールドとして宣言し、それを使い回すことが推奨される。
通常、static finalフィールドの変数名は大文字小文字の間を_で継なぎ、さらに全て大文字で記述する。
static finalフィールドをクラスの中でのみ使用する場合にはprivateフィールドに、外からも使用できるようにする場合にはpublicフィールドにした方が良いだろう。
ただし、publicフィールドとする場合、それぞれのクラスに作ると検索や修正が面倒になるため、通常は専用のクラスをひとつ作り、その中にまとめてpublic static finalフィールドを宣言した方が良いだろう。
フィールドに「static final 型 フィールド名 = 初期値;」の形式で使用する。
このstatic finalフィールドは、staticフィールドのためインスタンスを作らずに使用でき、final変数のため値が変更できない。そのため、定数値を宣言する場合に使用される。
リテラルは、プログラム上に直接書くと修正が難しくなる。
たとえば「int i = 100;」と書かれている場合に、この「100」という値の意味が分からず、また、プログラム上に複数の「100」がある場合、それぞれの値が同じ意味を持つのかそれとも別の意味の「100」なのかが判別できない。
そのため、リテラルはstatic finalフィールドとして宣言し、それを使い回すことが推奨される。
通常、static finalフィールドの変数名は大文字小文字の間を_で継なぎ、さらに全て大文字で記述する。
static finalフィールドをクラスの中でのみ使用する場合にはprivateフィールドに、外からも使用できるようにする場合にはpublicフィールドにした方が良いだろう。
ただし、publicフィールドとする場合、それぞれのクラスに作ると検索や修正が面倒になるため、通常は専用のクラスをひとつ作り、その中にまとめてpublic static finalフィールドを宣言した方が良いだろう。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
/**
* static finalフィールド。
* アクセス修飾子は付けていませんが、通常、
* クラス内でのみ使用するときはprivateフィールド、
* 他のクラスから使う時にはpublicフィールドにします。
* finalで定数値化されているので、publicでも問題
* ありません。ただ、publicフィールドの場合には
* 定数値を入れる専用のクラスを作り、その中にまとめた方が
* いいでしょう。
*/
static final String SYSTEM_NAME = "JavaA2Z";
public static void main( String[] args )
{
// 定数値SYSTEM_NAMEを使用します。
System.out.println( SYSTEM_NAME );
// JavaA2Z
// staticなのでstaticメソッドからも
// 普通のメソッドからも使えます。
// finalなので変更できません。
// SYSTEM_NAME = "あいうえお";
// コンパイルエラー:
// final フィールド Sample.SYSTEM_NAME に値を割り当てられません。
// SYSTEM_NAMEはStringクラスの参照型変数なので、
// 参照が指し示す先のインスタンスの中身は
// 変えうることができます。ただし、この場合は
// Stringクラスなので、Stringクラスの性質として
// 中身を変更できないため定数値として使用できます。
// 逆に言えば、そういうクラスを使用すべきということです。
}
// static finalではなく、逆のfinal staticでも同じです。
final static int MAX = 300;
}
public class Sample
{
/**
* static finalフィールド。
* アクセス修飾子は付けていませんが、通常、
* クラス内でのみ使用するときはprivateフィールド、
* 他のクラスから使う時にはpublicフィールドにします。
* finalで定数値化されているので、publicでも問題
* ありません。ただ、publicフィールドの場合には
* 定数値を入れる専用のクラスを作り、その中にまとめた方が
* いいでしょう。
*/
static final String SYSTEM_NAME = "JavaA2Z";
public static void main( String[] args )
{
// 定数値SYSTEM_NAMEを使用します。
System.out.println( SYSTEM_NAME );
// JavaA2Z
// staticなのでstaticメソッドからも
// 普通のメソッドからも使えます。
// finalなので変更できません。
// SYSTEM_NAME = "あいうえお";
// コンパイルエラー:
// final フィールド Sample.SYSTEM_NAME に値を割り当てられません。
// SYSTEM_NAMEはStringクラスの参照型変数なので、
// 参照が指し示す先のインスタンスの中身は
// 変えうることができます。ただし、この場合は
// Stringクラスなので、Stringクラスの性質として
// 中身を変更できないため定数値として使用できます。
// 逆に言えば、そういうクラスを使用すべきということです。
}
// static finalではなく、逆のfinal staticでも同じです。
final static int MAX = 300;
}
// Sample.java
public class Sample
{
/**
* static finalフィールド。
* アクセス修飾子は付けていませんが、通常、
* クラス内でのみ使用するときはprivateフィールド、
* 他のクラスから使う時にはpublicフィールドにします。
* finalで定数値化されているので、publicでも問題
* ありません。ただ、publicフィールドの場合には
* 定数値を入れる専用のクラスを作り、その中にまとめた方が
* いいでしょう。
*/
static final String SYSTEM_NAME = "JavaA2Z";
public static void main( String[] args )
{
// 定数値SYSTEM_NAMEを使用します。
System.out.println( SYSTEM_NAME );
// JavaA2Z
// staticなのでstaticメソッドからも
// 普通のメソッドからも使えます。
// finalなので変更できません。
// SYSTEM_NAME = "あいうえお";
// コンパイルエラー:
// final フィールド Sample.SYSTEM_NAME に値を割り当てられません。
// SYSTEM_NAMEはStringクラスの参照型変数なので、
// 参照が指し示す先のインスタンスの中身は
// 変えうることができます。ただし、この場合は
// Stringクラスなので、Stringクラスの性質として
// 中身を変更できないため定数値として使用できます。
// 逆に言えば、そういうクラスを使用すべきということです。
}
// static finalではなく、逆のfinal staticでも同じです。
final static int MAX = 300;
}




