构造函数和方法之间的区别

2022-09-04 23:43:47

Bellow是我在 Tutorials Points 上找到的一个例子,一个构造函数的例子。我得到了其中的大部分,但我只是不明白为什么你需要一个构造函数一个方法。

public Puppy(String name){
    System.out.println("Passed Name is :" + name ); 
}

我的问题是,是什么阻止你这样做?

public static void Puppy(String name){
    System.out.println("Passed Name is: "+name);
}

这两个人一旦被调用,难道不是做同样的事情吗?

以下是完整的程序供参考:

public class Puppy {
    int puppyAge;

    public Puppy(String name) {
        System.out.println("Passed Name is :" + name); 
    }

    public void setAge(int age) {
        puppyAge = age;
    }

    public int getAge() {
        System.out.println("Puppy's age is :" + puppyAge); 
        //what does this return do? since the puppyAge is already printed above.
        return puppyAge;
    }

    public static void main(String []args){
        Puppy myPuppy = new Puppy("tommy");

        myPuppy.setAge(2);
        myPuppy.getAge();

        System.out.println("Variable Value :" + myPuppy.puppyAge); 
    }
}

答案 1

您没有获得实例的基本概念,这在 OOP 中是基本概念。如果你想要一个比喻,让我们谈谈汽车。

我很确定你知道什么是汽车;你知道它能让你从一个地方移动到另一个地方,它有4个轮子,依此类推。这是一个概念,你车库里的实际汽车就是这个概念的一个实例<=>类)。

构造函数的目标是创建一个实例,而不是打印一些文本。如果没有构造函数,您将永远无法调用类的非静态方法。你将无法驾驶汽车的概念,您将首先需要制造一辆汽车。

只要回顾一下这些概念;没有它,你将一无所获。


答案 2

我想你的问题是为什么构造函数是使用...

public Puppy(String name)

...而不是。。。

public static void Puppy(String name)

...,对吧?

如果是这样,首先,您现在应该知道构造函数是类拥有的特殊方法,每当您创建该类的新实例时都会调用该类。因此,例如,如果您有此类...

public class Clazz {
    public Clazz (String s) {
         System.out.println(s);
    }
}

...,然后每当您创建此类的新实例时,例如...

Clazz c = new Clazz("Hello World");

...,将调用构造函数并执行该方法。(在此示例中,它将在屏幕上打印“Hello World”。

也就是说,您可以看到构造函数是一个方法,但它是在实例化类时调用的特殊方法。因此,关于您的问题,构造函数以这种方式而不是常规方法标头正确的原因是向编译器指示它是构造函数而不是常规方法。如果你用 而不是 编写,那么编译器将无法识别你的构造函数,并且会认为它只是一个常规方法。public void Clazz ()public Clazz ()

请注意,构造函数从不返回任何内容,因此没有必要使用 void 关键字。此外,使构造函数成为静态的也没有意义的,因为构造函数是在实例化新对象时调用的。