0

variableメソッドからアクセスしたいstatic

例えば ​​:

public class ABC
{
    public static void ABC()
    {
        int abc = 123;
        int bcd = 234;
    }
    public int getabc()
    {
        int tempabc = abc;
        return tempabc;
    }
    public int getbcd()
     {
        int tempbcd = bcd;
        return tempbcd;
    }
   public static void main(String[] args)
    {
        System.out.println(ABC.getabc());
    }
}

エラーコードは次のとおりです。

error: cannot find symbol
        int tempabc = abc;
                      ^
symbol:   variable abc
location: class ABC

error: cannot find symbol
        int tempbcd = bcd;
                      ^
symbol:   variable bcd
location: class ABC

error: non-static method getabc() cannot be referenced from a static context
        System.out.println(ABC.getabc());
                              ^
3 errors

では、静的メソッドからにアクセスするvalueにはどうすればよいでしょうか?variable

編集 :

abcコードを編集しました。から の値を取得したいだけですstatic ABC()。しかし、上記のサンプルコードに基づいて、コンパイルするとエラーが表示されます。

サンプル コードは、プログラム コードのスタイルと同じです。

OK、ここに私のプログラムコードがあります:

import java.io.*;
import java.util.*;

public class ReadHighestScoreFile
{   
    public static void ReadHighestScoreFile() throws IOException
    {
        final int NAME_SIZE = 35;
        String name = "";
        public static String names = 0;
        static int hours, minutes, seconds, clicks;

        File file = new File("Highest.txt");
        RandomAccessFile out = new RandomAccessFile(file, "rw");

        for (int i = 0; i < NAME_SIZE; i++)
        {
            name += out.readChar();
        }

        names = name;
        hours = out.readInt();
        minutes = out.readInt();
        seconds = out.readInt();
        clicks = out.readInt();

        System.out.println(">> Name : " + names);
        System.out.println(">> Hour : " + hours);
        System.out.println(">> Minute: " + minutes);
        System.out.println(">> Second : " + seconds);
        System.out.println(">> Click : " + clicks);     

        out.close();
    }
}

私のプログラムは、という名前のファイルにアクセスするために使用されますHighest.txt。しかし、メイン プログラムに実装するにはnameshoursminutesseconds、およびの値を取得する必要があります。clicksメインプログラムに実装しようとしたときに、この問題が見つかりました。

個別に行う場合、つまりmainこのコードのメソッドを作成する場合、問題なく動作します。しかし、メイン プログラムが他の操作を実行するには、これらの値を取得する必要があります。

4

7 に答える 7

2

abcメソッドのローカル変数です。そのメソッドの外ではアクセスできません。

于 2012-05-16T15:23:07.537 に答える
1

投稿に矛盾するステートメントがあります:

1. how to access variable from a static class?  

コードには静的クラスが定義されていませんが、クラスABCと同じ名前の静的メソッドがあります。

2. static method that has same name as class `ABC`.

それが静的クラスを作成する方法だと思っているのなら、それは間違っています。静的クラスは、外部クラスの内部にのみ存在できます。

3. tempabc = abc.

静的クラスを定義したとしても、非静的変数へのアクセスはこの方法ではありません。変数も静的でない限り、静的クラスのインスタンスを作成し、適切な方法で変数値にアクセスする必要があります。

投稿の2番目の部分への回答
以下に定義されているように、前述のフィールドをカプセル化するクラスを定義する必要があります。

class HighestData {
    String names;  
    int hours;  
    int minutes;  
    int seconds;  
    int clicks;  

    // define setter, getter methods or a constructor with input params for above fields.
}

メソッドをからvoidに変更しreturn object of HighestDataます。

public static HighestData ReadHighestScoreFile() throws IOException {  
    // your code here  
    // ...  
    HighestData data = new HighestData();  
    data.setName( name );  
    data.setHours( out.readInt() );  
    data.setMinutes( out.readInt() );  
    data.setSeconds( out.readInt() );  
    data.setClicks( out.readInt() );  
    // ...  
    return data;  
}  

メソッドの呼び出し元は、オブジェクトへ のReadHighestScoreFile()ハンドルを持ち、それを使用してさらに処理できるようになりました。HighestData

最後に重要なのは、Cとは異なり、Javaでローカル静的フィールドを定義できないことです。それらはクラスレベルでなければなりません。

于 2012-05-16T16:20:10.123 に答える
0

文字列を返すgetを追加してみてください。

public static String getABC()
{
    string i = "abc";
    return i;
}

次に、その関数を呼び出します。

System.out.println(getABC());
于 2012-05-16T15:28:50.703 に答える
0

あなたの変数はクラス変数ではなく、メソッド変数です。静的変数を使用する場合は、何をしているのかを確認してください。それらを使用することはしばしば悪い考えです。静的変数にアクセスする方法は次のとおりです。

public static class ABC {
  public static int someInt = 123;
}

public static class MainClass {

  public static void main(String[] args) {
    System.out.println(ABC.someInt);
  }
}
于 2012-05-16T15:41:57.623 に答える
0

本当にコードをコンパイルしようとしましたか? はいの場合、コードに多くの問題があることに気付いていない可能性があります。

  1. ここで「int tempabc = abc;」宣言されたメソッドの外では見えない別のメソッドで変数にアクセスしようとしています

  2. 上記の同じ事件がここにある "int tempbcd = bcd;"

3.あなたの質問に対する答えは、静的メソッドから非静的メソッドにアクセスすることはできないということです。メインからアクセスする必要があるメソッドにアクセス指定子 static を追加します。

于 2012-05-16T15:56:43.330 に答える