【问题标题】:The static method...should be accessed in a static way [closed]静态方法......应该以静态方式访问[关闭]
【发布时间】:2014-04-12 02:04:50
【问题描述】:
public class Main {
    public static void main(String[] args) {
        Person Gunnar = new Person();
        Person Sven = new Person();
        Dog Doggy = new Dog();
        Dog Doggi = new Dog();

        Gunnar.setName("Gunnar");
        Gunnar.setAge(20);
        Gunnar.setHeight(215);

        Sven.setName("Sven");
        Sven.setAge(55);
        Sven.setHeight(178);

        Sven.sayHello(Gunnar);
    }
}

Java 想让我将 .setName 行中的 Sven 和 Gunnar(两个 Person 对象的名称)更改为 Person,因此它将是 Person.setName("Gunnar"); 和 Person.setName("Sven");。但是,这是行不通的,因为没有办法分辨哪个是哪个。如果我错了,请纠正我。也不要介意狗代码。

这是 Person 类的代码:

public class Person {
    static int age;
    static int height;
    static String name;

    public void sayHello(Person name) {
        System.out.println("Hello!" +name);
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        Person.age = age;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        Person.height = height;
    }

    public static String getName() {
        return name;
    }

    public static void setName(String name) {
        Person.name = name;
    }
}

【问题讨论】:

  • 您还没有向Person 班级提供源代码。很可能你错误​​地声明了它的方法static。
  • 如果方法是静态的,为什么要在变量上调用它们?
  • 尽量遵守命名约定,变量名以小写字母开头。更容易将它们与类区分开来并防止此类错误。
  • 这只是一个风格建议。它仍然会编译并运行正常。
  • @Tony 感谢您试图通过编辑这篇文章来提供帮助,但其中还有许多其他问题。今后,请在提出修改建议之前改进帖子中的所有内容。

标签: java static


【解决方案1】:

您正确地调用了您的方法(从逻辑的角度来看)
但显然你已经错误地声明了它们(作为静态的)。
通过删除静态修饰符使它们成为实例方法。
那应该可以解决您的问题。并了解两者的区别
静态和实例方法(似乎你还没有)。

特别是getName 和setName 不应该是静态的。

【讨论】:

  • 我想我应该开始编写自己的 getter 和 setter,而不是让 eclipse 为我自动生成它们。谢谢:)
  • @Philip3412 嗯,不,Eclipse 很擅长 :) 我一直在使用该功能。当您要求 Eclipse 自动生成 getter 和 setter 时,我猜您的 name 变量是静态的。
  • 完全有可能。再次感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多