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

编辑 :

我已经编辑了代码,我只想abcstatic 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.txt. 但是我需要获取 , , , 和 的值nameshours实现minutessecondsclicks主程序。当我尝试将它实现到我的主程序时,我发现了这个问题。

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

4

7 回答 7

2

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

于 2012-05-16T15:23:07.537 回答
2

abc关于 具有局部范围ABC()。如果你想要它回来,你可以返回一个intfromABC()代替:

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

public static void main(String[] args)
{
    System.out.println(ABC());
}
于 2012-05-16T15:24:52.187 回答
1

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

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.
}

将方法从 更改voidreturn 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

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

public static int abc = 123;
于 2012-05-16T15:24:45.993 回答
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 添加到您需要从 main 访问的方法中。

于 2012-05-16T15:56:43.330 回答