1
class Trial 
{   static int i; 
    int getI() 
    {       return i;} 
    void setI(int value) 
    {       i = value;} 
} 
public class ttest 
{  public static void main(String args[]) 
   {    Trial t1 = new Trial(); 
        t1.setI(10); 
        System.out.println(t1.getI()); 
        Trial t2 = new Trial(); 
        t2.setI(100); 
        System.out.println(t1.getI()); 
        System.out.println(t2.getI()); 
   } 
}

ここで、trial は非静的クラスで、i は静的変数です。static main メソッドからこれにアクセスするにはどうすればよいですか。この方法は正しいですか?

4

5 に答える 5

3

はい、正しい方法です。

クラスが静的でない場合、 new キーワードでインスタンス化する必要があります。あなたがしたように

Trial t1 = new Trial(); 

すべての Trial オブジェクト間で値を共有したくない場合は、静的変数 i を静的にしないでください。この値を (「共有モード」で) 使用したい場合は、その方法で行うことができます。この変数を public にすると、Trial.i = "your value"... を実行できます。

于 2008-12-09T13:30:35.963 に答える
2

基本的にはい。ただし、アクセサーを public static と宣言すると、Trial.getI(); などのクラス名でアクセサーにアクセスできるはずです。

于 2008-12-09T13:31:37.303 に答える
1

セッターとゲッターは静的変数にアクセスするため、静的にしたい場合があります。ソースコードを非静的のままにしておくと、ソースコードが表示されないと、クラスのユーザーが非常に混乱する可能性があります。

于 2008-12-09T13:47:25.523 に答える
0

静的メンバー変数が本当に必要ですか?上記のように、静的変数はすべてのインスタンス間で共有されるため、t2.setI(x)はt1.getI()==xも意味します。

セッターとゲッターを静的と宣言すると、インスタンスではなくクラスを介してアクセスできます。Trial.setI(x)。これで、xがすべてのインスタンス間で共有されることは誰にでも明らかです。

しかし、私はあなたが本当に必要としているのは非静的変数のようです。

class Trial {   
    private int i; 
    int getI() { return i;} 
    void setI(int value) {i = value;} 
} 

main-methodを実行すると、出力は1010100になります。

静的変数を使用するのとは対照的に、10100100を出力します

于 2008-12-09T14:54:04.547 に答える
0

get メソッドと set メソッドは静的変数を参照しているため、静的であるべきだと述べている人もいます。

さらに、 Javaには静的クラスのようなものはありません。また、その静的変数をプライベートにする必要があります。その意味で、@Daok の公開の提案には反対です。

例としてこれは機能しますが、実際の使用例を説明すると、特定できる設計エラーがいくつかある可能性があります。

于 2008-12-09T14:31:09.977 に答える