为什么我不能调用子功能?

问题描述 投票:-1回答:4

我无法使用这个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很新。

java
4个回答
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;
        }
    }
}

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
投票

错误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中的实例成员。


-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);

    }
}

}

© www.soinside.com 2019 - 2024. All rights reserved.