方法与Java中的构造函数

时间:2013-09-27 23:31:29

标签: java methods constructor

我刚开始用Java编程。在谈论方法和构造函数时,我们使用的文本缺乏。我不确定方法或构造函数究竟是什么以及每个方法的唯一性。有人可以帮我定义它们并区分它们吗?

10 个答案:

答案 0 :(得分:54)

构造函数和方法之间的重要区别在于构造函数初始化使用new运算符创建的对象,而方法对已存在的对象执行操作。

不能直接调用构造函数;当new关键字创建对象时,它们会被隐式调用。可以直接在已使用new创建的对象上调用方法。

构造函数和方法的定义在代码中看起来类似。他们可以接受参数,他们可以有修饰符(例如public),并且它们在大括号中有方法体。

构造函数的名称必须与类名相同。他们不能返回任何东西,甚至void(对象本身就是隐式返回)。

必须声明方法以返回某些内容,尽管它可以是void

答案 1 :(得分:7)

主要区别是

1. 构造函数用于初始化对象的状态,其中方法公开对象的行为。

2. 构造函数必须不具有返回类型,因为方法必须具有返回类型。

3. 构造函数名称与类名相同,其中方法可能是同一个类名,也可能不是。

4. 构造函数隐式调用方法显式调用的位置。

5. 构造函数编译器提供默认构造函数,而方法编译器不提供。

答案 2 :(得分:5)

其他教师和助教偶尔会告诉我,构造者是专门的方法。我一直认为Java构造函数中的不是专门的方法

如果构造函数完全是方法,我希望它们具有与方法相同的能力。他们至少在很多方面与他们不同的方式相似。

构造函数与方法有何不同?让我算一下......

  1. 必须使用new运算符调用构造函数,而不能使用new运算符调用方法。相关:可能不会按名称调用构造函数,而必须按名称调用方法。

  2. 构造函数可能没有返回类型,而方法必须具有返回类型。

  3. 如果方法与类同名,则必须具有返回类型。否则,它是一个构造函数。您可以在同一个类定义中有两个 MyClass()签名,这些签名被区别对待,这应该说服所有构造函数和方法是不同的实体:

    public class MyClass {
       public MyClass() { }                                   // constructor
       public String MyClass() { return "MyClass() method"; } // method
    }
    
  4. 构造函数可能会初始化实例常量,而方法可能不会。

  5. 继承public和protected方法时,不会继承公共和受保护的构造函数。

  6. 构造函数可以调用超类或同一类的构造函数,而方法可能不会调用super()或this()。

  7. 那么,方法和构造函数有什么相似之处?

    1. 他们都有参数列表。

    2. 它们都有代码块,当该块直接调用(方法)或通过new(构造函数)调用时将执行。

    3. 对于具有相同可见性修饰符的构造函数和方法...字段和方法具有更多可见性修饰符。

      1. 构造函数可能是:私有受保护公开

      2. 方法可能是:私有受保护公开抽象静态最终已同步原生 strictfp

      3. 数据字段可能是:私有受保护公开静态最终瞬态易失性

      4. 结论

        在Java中,构造函数的形式和功能与方法明显不同。因此,将它们称为专用方法实际上使新程序员更难以了解差异。它们与类似的不同,并且学习它们,因为不同的实体在Java中是至关重要的。

        我确实认识到Java在这方面与其他语言不同,即C ++,其中专门方法的概念起源于语言规则并受其支持。但是,在Java中,构造函数根本不是方法,更不用说专门的方法。

        即使是javadoc也认识到构造函数和方法之间的差异大于相似之处;并为构造函数提供单独的部分。

答案 3 :(得分:4)

在Java中,您编写的类是Objects。构造函数构造这些对象。例如,如果我有这样的Apple.class

public class Apple {
    //instance variables
    String type; // macintosh, green, red, ...

    /**
     * This is the default constructor that gets called when you use
     * Apple a = new Apple(); which creates an Apple object named a.
     */

    public Apple() {
        // in here you initialize instance variables, and sometimes but rarely
        // do other functionality (at least with basic objects)
        this.type = "macintosh"; // the 'this' keyword refers to 'this' object. so this.type refers to Apple's 'type' instance variable.
    }

    /**
     * this is another constructor with a parameter. You can have more than one
     * constructor as long as they have different parameters. It creates an Apple
     * object when called using Apple a = new Apple("someAppleType");
     */
    public Apple(String t) {
        // when the constructor is called (i.e new Apple() ) this code is executed
        this.type = t;
    }

    /**
     * methods in a class are functions. They are whatever functionality needed
     * for the object
     */
    public String someAppleRelatedMethod(){
        return "hello, Apple class!";
    }

    public static void main(String[] args) {
        // construct an apple
        Apple a = new Apple("green");
        // 'a' is now an Apple object and has all the methods and
        // variables of the Apple class.
        // To use a method from 'a':
        String temp = a.someAppleRelatedMethod();
        System.out.println(temp);
        System.out.println("a's type is " + a.type);
    }
}

希望我在代码的注释中解释了所有内容,但这里有一个摘要: 构造函数构造“类的类型的对象”。必须将构造函数命名为与类相同的名称。它们主要用于初始化实例varibales 方法是对象的功能。

答案 4 :(得分:3)

构造函数是一种特殊的方法,允许您创建类的新实例。它关注的是初始化逻辑。

答案 5 :(得分:1)

“方法”是“子程序”是“程序”是“功能”是“子程序”是......同样的概念在许多不同的名称下,但基本上是一个命名的代码段,你可以从其他一些代码“调用”。通常,代码以某种方式整齐地打包,带有某种“标题”,它给出了它的名称和参数以及由BEGIN& END{& }或其他一些。

“consrtructor”是一种特殊形式的方法,其目的是初始化类或结构的实例。

在Java中,方法的标题为<qualifiers> <return type> <method name> ( <parameter type 1> <parameter name 1>, <parameter type 2> <parameter name 2>, ...) <exceptions>,方法体由{}括起来。

您可以从其他方法告诉构造函数,因为构造函数具有其<method name>的类名,并且没有声明<return type>

(当然,在Java中,您使用new运算符创建了一个新的类实例 - new <class name> ( <parameter list> )。)

答案 6 :(得分:1)

差异r

  1. 构造函数的名称必须与类相同,但方法可以使用任何名称。
  2. 子类自动继承构造函数,而子类从父类继承方法,除非它们受私有关键字保护。
  3. 构造函数r在方法隐式时显式调用。
  4. 构造函数没有任何返回类型,而方法有。

答案 7 :(得分:1)

构造函数是用于初始化数据成员的特殊函数,其中方法是执行特定任务的函数。

构造函数名称与类名相同,其中方法名称可能是也可能不是,或者是类名。

构造函数不允许任何返回类型,其中方法允许返回类型。

答案 8 :(得分:0)

主要区别在于以下 -

1:构造函数必须与类名具有相同的名称,而方法不是这样的

class Calendar{
    int year = 0;
    int month= 0;

    //constructor
    public Calendar(int year, int month){
        this.year = year;
        this.month = month;
        System.out.println("Demo Constructor");
    }

    //Method
    public void Display(){

        System.out.println("Demo method");
    }
} 

2:构造函数初始化类的对象,而方法则不。方法对已存在的对象执行操作。换句话说,要调用方法,我们需要类的对象。

public class Program {

    public static void main(String[] args) {

        //constructor will be called on object creation
        Calendar ins =  new Calendar(25, 5);

        //Methods will be called on object created
        ins.Display();

    }

}

3:构造函数没有返回类型,但方法必须具有返回类型

class Calendar{

    //constructor – no return type
    public Calendar(int year, int month){

    }

    //Method have void return type
    public void Display(){

        System.out.println("Demo method");
    }
} 

答案 9 :(得分:-1)

以下是Java中的构造函数和方法之间的一些主要关键区别

  1. 在创建对象时会自动调用构造函数。但是在对象创建时不会自动调用方法。
  2. 构造函数名称必须与类名称相同。方法没有这样的协议。
  3. 构造函数不能有任何返回类型。甚至没有空。但是方法可以具有返回类型,并且也可以无效。 Click to know details - Difference between constructor and method in Java