0

静的変数で最終変数にアクセスできないのはなぜですか。コンパイル時に、それらは単にそれらの値で直接置換されるので、静的メソッドでも使用できるようにする必要があります

なぜこの制限なのですか?

4

3 に答える 3

3

static=クラス内。

final =は値を変更しません(ただし、静的でない場合は各インスタンスの値になります)。

たとえば、次のことができます。

public class Weird
{
private static long number = System.getTimeInMilis();
private final long created = System.getTimeInMilis();
}

Weirdオブジェクトを作成するたびに、createdの値が異なります。

ただし、Weird.numberの値は、クラスがロードされた時刻になります。

于 2010-01-13T19:59:51.527 に答える
2

すべてのfinal変数がコンパイル時定数であるとは限りません。static finalコンパイラがコンパイル時定数として置き換えることができるのは変数のみです。final場合によっては、修飾子はconst-correctnessを保証するためにのみ使用されます。

また、staticメソッドは非静的変数にアクセスできません。これらの変数は、同じクラスのインスタンスごとに異なる値を持つ可能性があるためです。

于 2010-01-13T19:59:06.813 に答える
1

staticメソッドがインスタンス変数にアクセスできない理由を尋ねているfinal場合(最終的なメンバー変数は常にコード内でリテラル値または定数値に設定されているという[誤った]仮定に基づいて)、クラスのインスタンスが異なれば、同じfinalインスタンス変数(たとえば、コンストラクターを介して設定できます)。メソッドはクラスのstatic特定のインスタンスに関する知識を持たず、static final変数にしかアクセスできませんでした。

于 2010-01-13T19:59:48.887 に答える