我刚刚开始使用 Java 编程。在谈论方法和构造函数时,我们使用的文本是缺失的。我不确定一个方法或构造函数到底是什么,以及是什么让它们变得独一无二。有人可以帮我定义它们并区分两者吗?
11 回答
构造函数和方法之间的重要区别在于构造函数初始化使用new
运算符创建的对象,而方法对已经存在的对象执行操作。
不能直接调用构造函数;new
当关键字创建对象时,它们会被隐式调用。可以直接在已经用 . 创建的对象上调用方法new
。
构造函数和方法的定义在代码中看起来很相似。它们可以接受参数,可以有修饰符(例如public
),并且它们有大括号中的方法体。
构造函数的名称必须与类名相同。他们不能返回任何东西,甚至void
(对象本身就是隐式返回)。
方法必须声明为返回一些东西,尽管它可以是void
.
主要区别是
1.构造函数用于初始化对象的状态,其中方法是暴露对象的行为。
2.构造函数不能有返回类型,而方法必须有返回类型。
3.构造函数名称与类名相同,其中方法可能与类名相同或不同。
4.构造函数隐式调用,而方法显式调用。
5.构造函数编译器提供默认构造函数,而方法编译器不提供。
其他讲师和助教偶尔会告诉我,构造函数是专门的方法。我总是争辩说,Java 构造函数不是专门的方法。
如果构造函数完全是方法,我希望它们具有与方法相同的能力。他们至少在更多方面是相似的,而不是不同的。
构造函数与方法有何不同?让我来计算一下...
构造函数必须用
new
操作符调用,而方法不能用new
操作符调用。相关:不能按名称调用构造函数,而必须按名称调用方法。构造函数可能没有返回类型,而方法必须有返回类型。
如果方法与类同名,则它必须具有返回类型。否则,它是一个构造函数。您可以在同一个类定义中有两个不同处理的MyClass()签名这一事实应该让所有构造函数和方法都是不同的实体:
public class MyClass { public MyClass() { } // constructor public String MyClass() { return "MyClass() method"; } // method }
构造函数可以初始化实例常量,而方法不能。
公共和受保护的构造函数不被继承,而公共和受保护的方法被继承。
构造函数可以调用超类或同一个类的构造函数,而方法不能调用 super() 或 this()。
那么,方法和构造函数有什么相似之处呢?
它们都有参数列表。
它们都有代码块,当该块被直接调用(方法)或通过
new
(构造函数)调用时,这些代码块将被执行。
至于具有相同可见性修饰符的构造函数和方法......字段和方法具有更多共同的可见性修饰符。
构造函数可能是:private、protected、public。
方法可能是:private、protected、public、abstract、static、final、synchronized、native、 strictfp。
数据字段可能是:private、protected、public、static、final、transient、volatile。
综上所述
在 Java 中,构造函数的形式和功能与方法有很大不同。因此,称它们为专门的方法实际上使新程序员更难了解这些差异。它们比相似的要不同得多,并且将它们作为不同的实体来学习在 Java 中是至关重要的。
我确实认识到 Java 在这方面不同于其他语言,即 C++,其中专门方法的概念起源于语言规则并受到语言规则的支持。但是,在 Java 中,构造函数根本不是方法,更不用说专门的方法了。
甚至 javadoc 也认识到构造函数和方法之间的差异大于相似之处。并为构造函数提供了一个单独的部分。
在 Java 中,您编写的类是对象。构造函数构造这些对象。例如,如果我有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);
}
}
希望我在代码的注释中解释了所有内容,但这里有一个摘要:构造函数“构造”类类型的对象。构造函数的名称必须与类相同。它们主要用于初始化实例变量方法是对象的功能。
构造函数是一种特殊的方法,它允许您创建类的新实例。它与初始化逻辑有关。
一个“方法”是一个“子程序”是一个“过程”是一个“函数”是一个“子程序”是一个......相同的概念有许多不同的名称,但基本上是一个命名的代码段,你可以“从其他代码调用”。通常,代码以某种方式整齐地打包,带有某种给出其名称和参数的“标题”以及由BEGIN
&END
或{
&}
或类似的“主体”。
“构造函数”是一种特殊形式的方法,其目的是初始化类或结构的实例。
在 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> )
。)
区别r
:
- 构造函数必须与类同名,但方法可以使用任何名称。
- 子类不会自动继承构造函数,而子类从父类继承方法,除非它们受 private 关键字保护。
- 显式调用构造
r
函数,而隐式调用方法。 - 构造函数没有任何返回类型,而方法有。
构造函数是用于初始化数据成员的特殊函数,其中方法是执行特定任务的函数。
构造函数名称与类名称相同,其中方法名称可能是也可能不是类名称。
构造函数不允许任何返回类型,其中方法允许返回类型。
主要区别如下 -
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");
}
}
构造函数通常是Method。
当我们创建类 new 运算符的对象时,我们调用了一种特殊的方法,称为构造函数。
构造函数用于执行实例变量的初始化。
代码:
public class Diff{
public Diff() { //same as class name so constructor
String A = "Local variable A in Constructor:";
System.out.println(A+ "Contructor Print me");
}
public void Print(){
String B = "Local variable B in Method";
System.out.println(B+ "Method print me");
}
public static void main(String args[]){
Diff ob = new Diff();
}
}
`
输出:
构造函数中的局部变量 A:构造函数打印我
因此,这里只显示 Constructor 方法 Diff() 语句,因为我们创建了 Diff 类对象。在这种情况下,构造函数总是首先在此处实例化 Class Diff()。
通常,
构造函数是设置功能。
一切都从这里开始,当我们在 main 方法构造函数中调用 ob 对象时,将获取该类并创建副本并将其加载到“Java 虚拟机类加载器”中。
这个类加载器获取这个副本并加载到内存中,所以我们现在可以通过引用来使用它。
构造函数完成它的工作,然后方法来完成它的真正实现。
在这个程序中当我们调用
ob.print();
然后方法会来。
谢谢
阿林丹
以下是java中构造函数和方法之间的一些主要区别
- 构造函数在对象创建时被自动调用。但是在对象创建期间不会自动调用方法。
- 构造函数名称必须与类名称相同。方法没有这样的协议。
- 构造函数不能有任何返回类型。甚至不作废。但是方法可以有一个返回类型,也可以是无效的。 点击了解详情——Java中构造函数和方法的区别