我们可以说构造函数是Java中的方法吗?

我们知道Java是一种面向对象的语言。 一切都是Java中的对象。 我们也知道对象有一些东西(实例变量/字段)和做某事(方法)。 我们使用方法更改实例变量的状态是安全的,即; 二传手和吸气鬼。 所以在构造函数中我们初始化实例变量。 换句话说,构造函数正在为对象做一些事情。 因此,假设构造函数是一种实用方法,就像设置值的setter一样,这是不正确的? 区别在于setter甚至我们有返回类型void,在构造函数中我们没有任何返回类型。 并且可以在对象上调用setter任意次数,但构造函数可以在对象的生命周期中调用一次。

我们可以说Contructors是Java中的方法吗?

如果您是Java新手并且第一次尝试掌握这个概念,您可以将构造函数视为工厂方法。 (比如在Python中,例如构造函数只是一个名为__init__的方法。)然而,您应该继续前进,并了解存在许多差异。 仅举几例:

  • 构造函数没有返回类型。
  • 在初始化最终成员变量时,它有特殊的义务(一种方法甚至不能分配给最终成员)。
  • 它是静态的,你可以在没有被调用者的情况下调用它,但在你有this引用的意义上它是非静态的。
  • 它使用特殊关键字new调用,并且具有特殊的字节码, invokespecial ,而实例方法由obj.method()调用,它通常编译为obj.method()字节码。
  • 必须调用超级构造函数,除非在超类中有一个无参数构造函数。
  • 它们永远不会被inheritance,也不能被覆盖。

直接来自JLS(第8章)

构造函数用于创建作为类实例的对象(第12.5节,第15.9节)。 ConstructorDeclarator中的SimpleTypeName必须是包含构造函数声明的类的简单名称; 否则会发生编译时错误。

在所有其他方面,构造函数声明看起来就像没有结果的方法声明(第8.4.5节)。

构造函数声明不是成员。 它们永远不会被遗传,因此不会被隐藏或覆盖。

Java中的构造函数

在创建对象时调用Java构造函数。 它构造值,即为对象提供数据,这就是它被称为构造函数的原因。 构造函数实际上返回当前的类实例(您不能使用返回类型,但它返回一个值)。 基本上为构造函数定义了两个规则。

1)构造函数名称必须与其类名相同2)构造函数必须没有显式返回类型

构造函数的类型

1)默认构造函数(no-arg构造函数)

 class Bike1{ Bike1(){System.out.println("Bike is created");} public static void main(String args[]){ Bike1 b=new Bike1(); } } 

2)参数化构造函数

 class Student4{ int id; String name; Student4(int i,String n){ id = i; name = n; } void display(){System.out.println(id+" "+name);} public static void main(String args[]){ Student4 s1 = new Student4(111,"Karan"); Student4 s2 = new Student4(222,"Aryan"); s1.display(); s2.display(); 

}
}

constructor用于初始化变量,它不是方法。 但是,您可以选择创建构造函数,如果不这样,JVM将创建默认constructor