【问题标题】:how to access static and non static method in static method如何在静态方法中访问静态和非静态方法
【发布时间】:2016-03-21 17:28:52
【问题描述】:
public class Car {

    static int model = 2005;
    static String name = "corvert";
    private String color;

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    static void show() {
        System.out.println("model" + amodel + "name" + name + "color" + this.color);

    }
}

此方法不适用于无法从静态上下文引用的错误非静态变量。

【问题讨论】:

  • 好吧,鉴于不同的汽车可以有不同的颜色,但在静态方法中,您不在任何一辆汽车的上下文中,您期望打印哪种颜色? (我的猜测是,现在是修改static 含义的好时机 - 希望它会变得更加明显。)
  • 您还需要考虑将模型和名称更改为非静态。如果您希望它保持静态,为什么要将颜色设为非静态?
  • 所有的汽车都是护卫舰吗?
  • 是时候拿起你的 Java 书,重新阅读关于 static 及其含义的章节了。

标签: java static non-static


【解决方案1】:

您可以在任何地方访问公共静态方法,但您只能通过类的实例访问静态方法中的非静态方法

【讨论】:

    【解决方案2】:

    我建议将所有内容都设为静态(或使用构造函数本地化)。

    将其设为本地时,构造函数可能如下所示:

    private int model;
    private String name, color;
    public Car(int model, String name, String color) {
        this.model = model;
        this.name = name;
        this.color = color;
    }
    
    // setters and getters
    
    public void show() {
        System.out.println("model" + amodel + "name" + name + "color" + this.color);
    }
    

    现在您可以使用Car car = new Car(2005, "Corvet", "Blue");,然后使用car.show(),而不必担心静态和非静态访问。

    【讨论】:

      【解决方案3】:

      就像 Jon Skeet 在他的评论中所说,你可能不希望你的方法是静态的,这意味着类的所有成员都有一个方法。

      如果觉得需要使用静态方法,可以传入:static void show(String color)

      【讨论】:

        【解决方案4】:

        你应该使用类名访问的静态变量

        static void show() {
            System.out.println("model" + amodel + "name" + name + "color" + Car.color);
        
        }
        

        【讨论】:

          【解决方案5】:

          您可以考虑将 Car 对象传递给静态方法,而不是创建它的新实例。 “规则”是静态方法不能访问实例变量和方法,但它可以接收外部对象并与之玩耍。

          static void show(Car car) {
                  System.out.println("model" + model + "name" + name + "color" + car.color);
          
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2018-05-30
            • 2012-03-30
            • 1970-01-01
            • 2013-02-13
            • 1970-01-01
            • 2016-01-13
            • 2020-12-27
            • 1970-01-01
            • 2015-10-21
            相关资源
            最近更新 更多