我想从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.txt
,names
,hours
,minutes
和seconds
的值来实现我的主程序。当我尝试将它实现到我的主程序时,我发现了这个问题。
如果我单独执行此操作,意味着我为此代码创建了clicks
方法,它将正常工作。但现在我需要为我的主程序获取这些值以执行其他操作。
答案 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)
您是否真的尝试过编译代码?如果是,那么您可能没有注意到代码中存在很多问题。
在这里“int tempabc = abc;”您试图在另一个方法中访问该变量,该方法在声明方法之外是不可见的
上述同样的事件是“int tempbcd = bcd;”
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中定义本地静态字段。他们必须在班级。