如何从静态方法访问变量

时间:2012-05-16 15:21:39

标签: java variables static

我想从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的{​​{1}}?

编辑:

我已编辑了代码,我只想从variable abc获取static的值。但根据上面的示例代码,它在编译时显示错误。

示例代码与程序代码的风格相同。

好的,这是我的程序代码:

ABC()

我的程序用于访问名为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.txtnameshoursminutesseconds的值来实现我的主程序。当我尝试将它实现到我的主程序时,我发现了这个问题。

如果我单独执行此操作,意味着我为此代码创建了clicks方法,它将正常工作。但现在我需要为我的主程序获取这些值以执行其他操作。

7 个答案:

答案 0 :(得分:2)

abc是一个方法局部变量。它无法在该方法之外访问。

答案 1 :(得分:2)

abc具有与ABC()相关的本地范围。如果您想要它,则可以从int返回ABC()

public static int ABC()
{
    int abc = 123;
    return abc;
}

public static void main(String[] args)
{
    System.out.println(ABC());
}

答案 2 :(得分:0)

您需要在类范围中声明它:

public static int abc = 123;

答案 3 :(得分:0)

尝试添加一个返回String的get:

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

然后调用该函数:

System.out.println(getABC());

答案 4 :(得分: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);
  }
}

答案 5 :(得分:0)

您是否真的尝试过编译代码?如果是,那么您可能没有注意到代码中存在很多问题。

  1. 在这里“int tempabc = abc;”您试图在另一个方法中访问该变量,该方法在声明方法之外是不可见的

  2. 上述同样的事件是“int tempbcd = bcd;”

  3. 3.问题的答案是,您无法从静态方法访问非静态方法。将访问说明符static添加到您需要从main访问的方法。

答案 6 :(得分:0)

你的帖子有相互矛盾的陈述:

1. how to access variable from a static class?  

您的代码没有定义静态类,但是静态方法与ABC类同名。

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

如果您认为这是创建静态类的方式,那就错了。静态类只能是外部类的内部。

3. tempabc = abc.

即使您定义了一个静态类,访问非静态变量也不是这样的。除非变量也是静态的,否则您需要创建静态类的实例并以适当的方式访问变量值。

回答您发布的第二部分
您应该定义一个类来封装下面定义的所述字段:

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中定义本地静态字段。他们必须在班级。