方法与Java中的构造函数
我刚刚开始用Java编程。 在谈论方法和构造函数时,我们使用的文本是缺乏的。 我不确定什么是方法或构造函数,是什么使每个独特的。 有人能帮我定义他们并区分两者吗?
构造函数和方法之间的重要区别是构造函数创build并初始化尚不存在的对象,而方法则对已经存在的对象执行操作。
构造函数不能直接调用; 当new
关键字创build一个对象时,它们被隐式调用。 可以直接在已经用new
创build的对象上调用方法。
代码中的构造函数和方法的定义看起来很相似。 他们可以采取参数,他们可以有修饰符(如public
),他们有方括号括号。
构造函数必须使用与类名称相同的名称命名。 他们不能返回任何东西,甚至void
(对象本身是隐式返回)。
必须声明方法才能返回某些东西,尽pipe它可能是void
。
主要区别是
1. 构造函数用于初始化对象的状态,其中方法暴露对象的行为。
2. 构造函数不能有返回types,因为方法必须有返回types。
3. 构造函数的名称与类名相同, 方法可以是也可以不是相同的类名。
4. 构造函数隐式调用方法显式调用的地方。
5. 构造函数编译器提供了方法编译器不提供的默认构造函数。
其他教练和助教偶尔会告诉我,施工人员是专门的方法。 我总是争辩说, 在Java构造函数不是专门的方法 。
如果构造函数是方法,我会期望它们具有与方法相同的能力。 至less他们至less会有更多的相似之处。
构造函数与方法有什么不同? 让我来计算一下…
-
构造函数必须用
new
运算符调用,而方法不能用new
运算符调用。 相关:构造函数不能按名称调用,而方法必须按名称调用。 -
构造函数可能没有返回types,而方法必须有返回types。
-
如果一个方法具有与该类相同的名称,则它必须具有返回types。 否则,它是一个构造函数。 事实上,你可以在同一个类定义中有两个MyClass()签名,它们的处理方式不同,应该说服所有的构造函数和方法是不同的实体:
public class MyClass { public MyClass() { } // constructor public String MyClass() { return "MyClass() method"; } // method }
-
构造函数可能会初始化实例常量,而方法可能不会。
-
公共和受保护的构造函数不被inheritance,而inheritance公共和受保护的方法。
-
构造函数可以调用超类或相同类的构造函数,而方法不能调用super()或this()。
那么,关于方法和构造函数有什么相似之处呢?
-
他们都有参数列表。
-
它们都有代码块,当这个块被直接调用(方法)或者通过
new
(构造函数)调用时,它们将被执行。
至于具有相同可见性修饰符的构造函数和方法…字段和方法具有更多的可见性修饰符。
-
构造函数可以是: 私有的 , 受保护的 , 公共的 。
-
方法可能是: private , protected , public , abstract , static , final , synchronized , native , strictfp 。
-
数据字段可能是: private , protected , public , static , final , transient , volatile 。
结论是
在Java中,构造函数的forms和function与方法明显不同。 因此,称它们为专门的方法实际上使新程序员难以了解差异。 它们比类似的东西要多得多,因为不同的实体在Java中是至关重要的。
我认识到,Java在这方面与其他语言不同,即C ++,其中专用方法的概念源自语言规则并受其支持。 但是,在Java中,构造函数根本不是方法,更不用说专门的方法。
甚至javadoc认识到构造方法和方法之间的差异超过了相似之处; 并为构造函数提供了一个单独的部分。
构造函数是一种特殊的方法,可以让你创build一个新的类实例。 它涉及初始化逻辑。
在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 (ie 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方法是对象的function。
一个“方法”是一个“子程序”是一个“程序”是一个“function”是一个“子程序”是一个… …相同的概念下有许多不同的名称,但基本上是一个命名段的代码,你可以“调用“一些其他的代码。 一般来说,代码是以某种方式整齐地打包的,带有某种types的“标题”,其名称和参数以及由BEGIN
& END
或{
& }
或其他类似的BEGIN
的“body”。
“constrructor”是一种特殊的方法,其目的是初始化一个类或一个结构的实例。
在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> )
创build一个新的类实例。)
差异r
:
- 构造函数的名称必须与类相同,但方法可以由任何名称创build。
- 构造函数不是由子类自动inheritance,而是从子类inheritance方法,除非它们受private关键字保护。
- 构造函数
r
调用方法时显式调用。 - 方法有构造函数没有任何返回types。
构造函数是用来初始化数据成员的特殊函数,其中方法是执行特定任务的函数。
构造函数名称与类名称相同,方法名称可以是也可以不是,也可以是类名称。
构造函数不允许任何返回types,其中方法允许返回types。
构造函数通常是Method 。
当我们创build一个类的new操作符的对象时,我们调用了一种特殊的方法,称为构造函数。
构造函数用于执行实例variables的初始化。
码:
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(); } }
`
-
输出:
构造函数中的局部variablesA:构造函数打印我
所以,这里只显示Constructor方法的Diff()语句,因为我们创build了Diff类对象。 在这种情况下,构造函数总是先来实例化这里class Diff()。
通常情况下,
构造函数是build立function。
一切从这里开始,当我们在main方法中调用ob对象的时候,构造函数会接受这个类并创build副本,并将其加载到“Java虚拟机类加载器”中。
这个类加载器将这个副本加载到内存中,所以我们现在可以通过引用来使用它。
构造函数完成它的工作,然后方法来完成它的真正的实现。
在这个程序中,当我们打电话
ob.print();
那么方法就会到来。
谢谢
阿瑞丹姆