我无法使该Java代码正常工作。我已经阅读了多个示例,但是都没有解释为什么代码不起作用。
代码:
class Main {
public static void main(String[] args) {
class UserInfo {
public String Name = "Example Name";
public int Age = 13;
static int GetAge() {
return (Age);
}
}
UserInfo.GetAge();
}
}
请注意,我是Java的新手。
答案 0 :(得分:4)
如果不创建新的UserInfo对象,则不能从静态上下文调用非静态方法。您需要创建新的UserInfo对象
class Main {
public static void main(String[] args) {
class UserInfo {
public String Name = "Example Name";
public int Age = 13;
int GetAge() {
return (Age);
}
}
UserInfo userInfo = new UserInfo();
userInfo.GetAge();
}
}
答案 1 :(得分:3)
您不能从静态上下文中调用非静态方法 我将类移到了方法之外,并使其变为静态
尝试下面的代码
class Main {
public static void main(String[] args) {
System.out.println(UserInfo.GetAge());
}
static class UserInfo {
public String Name = "Example Name";
static int Age = 13;
static int GetAge() {
return (Age);
}
}
}
如果您想在其中定义名称和年龄的动态类中使用此代码,
class Main {
public static void main(String[] args) {
UserInfo userInfo = new UserInfo("John", 13);
System.out.println(String.format("Name: %s Age: %s", userInfo.getName(), userInfo.getAge()));
}
static class UserInfo {
String name;
int age;
UserInfo(String name, int age){
this.name = name;
this.age = age;
}
int getAge() {
return age;
}
String getName() {
return name;
}
}
}
答案 2 :(得分:1)
错误1:
age
是instance
变量,您不能在static
方法GetAge()
中使用它
因此,可以将Age
设为静态,或将getAge
实例设为...
static int GetAge() {
return (Age);
}
错误2:您无法使用类名称引用访问实例变量GetAge()
。要更正它,您必须创建对象并使用此引用进行访问。
UserInfo.GetAge(); // does not compile
代替使用:
UserInfo userInfo = new UserInfo();
userInfo.GetAge();
通常,实例变量不能用在静态方法中,并且不能使用类引用来访问Java中的实例成员。
答案 3 :(得分:-1)
首先,您不能从静态上下文中调用非静态方法,您需要将内部类从main方法中移出并使其变为静态。
尝试这个:
public class Main {
public static void main(String[] args) {
System.out.println(UserInfo.GetAge());
}
static class UserInfo {
public String Name = "Example Name";
public static int Age = 13;
static int GetAge() {
return (Age);
}
}
}