我们可以说构造函数是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
。