为什么不能调用子功能?

时间:2018-10-11 09:00:59

标签: java

我无法使该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的新手。

4 个答案:

答案 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: ageinstance变量,您不能在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);

    }
}

}

相关问题