【问题标题】:java question: Is it a method?java问题:它是一种方法吗?
【发布时间】:2011-01-28 17:11:09
【问题描述】:

我不是 Java 人,所以我问自己这意味着什么:

public Button(Light light) {
        this.light = light;
}

按钮是一种方法吗?我问自己,因为它需要一个输入参数 light。但是如果是一个方法,为什么会以大写字母开头,没有返回数据类型呢?

完整示例如下:

public class Button {
  private Light light;

  public Button(Light light) {
    this.light = light;
  }

  public void press() {
    light.turnOn();
  }
}

我知道,这个问题真的很琐碎。但是,我与 Java 无关,也没有找到上面 Button 的描述。我只是感兴趣。

【问题讨论】:

    标签: java class oop variables


    【解决方案1】:

    按钮是constructor

    【讨论】:

      【解决方案2】:

      这是 Button 对象的 constructor

      所以当你写的时候:

      Button myButton = new Button(new Light());
      

      这个方法就是被调用的

      【讨论】:

      • 构造函数不是方法。
      【解决方案3】:

      它是constructor

      创建类的实例时,必须将光作为参数传递。

      例如

      Light l = new Light();
      Button b = new Button(l);
      b.press();
      

      【讨论】:

        【解决方案4】:

        这是一个非常有效的问题。

        你看到的方法constructor基本上具备你刚才提到的特点:

        • 没有返回类型(因为它正在构造类的实例)
        • 它们以类名命名,在这种情况下,类是Button(大写没什么特别的,只是一种编码约定,java类应该以大写开头,因此构造函数也以大写开头)

        还有关于您发布的代码的附加说明。

        如果你没有定义构造函数,编译器会为你插入一个无参数的构造函数:

        所以这是有效的:

        public class Button {
            // no constructor defined
            // the compiler will create one for you with no parameters
        }
        
        .... later 
        Button button = new Button(); // <-- Using no arguments works.
        

        但是,如果您提供另一个构造函数(例如在您的情况下),则不能再使用 no args 构造函数。

        public class Button(){
            public Button( Light l  ){ 
                this.light = l;// etc
            }
            // etc. etc. 
         }
         .... later 
        
         Button b = new Button(); // doesn't work, you have to use the constructor that uses a Light obj
        

        【讨论】:

        • 好的,这是有道理的。谢谢大家非常详细的答案。这让我很喜欢。
        【解决方案5】:

        它是 Button 类的可能构造函数之一。 每个包含类名且没有返回值的语句都是构造函数。

        您可以定义多个构造函数,例如用于区分参数的数量和类型:

        public Button();
        public Button(int i);
        public Button(int i, int j);
        public Button(String s,int i, double d);
        

        等等。

        【讨论】:

          【解决方案6】:

          按钮是一个构造函数

          【讨论】:

            【解决方案7】:

            它是一个自定义构造函数,写在一个Button类中,它接受输入参数作为自定义变量Light。 因此,在Button 类中,您将拥有两个构造函数:

            1. 默认即Button bt = new Button();
            2. 我们需要传递的参数,即Button bt = new Button( Light l)

            初始化期间的输入参数。

            【讨论】:

            • 编译器不会生成默认构造函数,所以你的句子“因此,在Button 类中你将有两个构造函数”是错误的。
            猜你喜欢
            • 2016-06-24
            • 1970-01-01
            • 1970-01-01
            • 2014-12-19
            • 1970-01-01
            • 2021-01-06
            • 2014-06-18
            • 1970-01-01
            • 2012-07-19
            相关资源
            最近更新 更多