2016-09-29 118 views
0

我从PHP移动到Java因为英文不是我的主要语言,所以很难理解OOP。我想要一个简单的答案(尽可能简单,哈哈)。最新的区别:在第二空的构造函数和没有构造函数有什么区别

class Munikas { 

    public Munikas(){ 
    } 

    public void rytas(){ 
     System.out.println("Labas Rytas"); 
    } 

    public static void main(String[] args){ 
     Munikas labas = new Munikas(); 
     labas.rytas(); 
    } 
} 

而且

class Munikas { 
    public void rytas(){ 
     System.out.println("Labas rytas"); 
    } 

    public static void main(String[] args){ 
     Munikas labas = new Munikas(); 
     labas.rytas(); 
    } 
} 

我不使用constructor。将来如何影响我的代码?

回答

9

您提供的代码片段之间没有区别。用户提供的无参数构造函数基本上与缺省情况下由Java提供的默认无参数构造函数相同。

如果你在那个没有参数的构造函数中做了什么,然后会有区别,但是作为创作,这两个代码示例是等价的。

Java Language Specification为此提供了更多的上下文,其代码示例与您自己的代码示例类似。

+0

所以我需要自己构建构造函数只有当我需要使用它的参数? –

+0

@TomasVilemaitis:通常这就是构造函数的用例,尽管如果你真的想使用构造函数来建立一些默认状态。 – Makoto

+0

@TomasVilemaitis没有。只有当你在构造函数中做某些事情。可以有一个没有参数的构造函数来设置一些字段。 –

5

没有区别。当你的类没有定义任何构造函数时(如你的第二个代码片段),编译器会自动插入一个空参数的构造函数,所以第二个片段等同于第一个片段。

1

您不必使用空的构造函数。编译器会自动生成它。

-1

简单地说,在构造函数允许你创建类的实例对象,使用这样的事情:

Munikas testObject = new Munikas(); 

当您尝试使用非静态方法时,两者之间的区别将很明显。该方法来自Rytas()是非静态的,这意味着你需要调用它使用类的一个实例化的对象,像这样:

testObject.rytas(); 

所以使用来自Rytas时,你将需要使用一个构造函数。正如其他人所提到的,你不需要添加代码来创建空的构造函数,但是有时候你需要为具有参数的对象使用构造函数。主要的STATIC方法无论有没有构造函数都可以,只能使用类(Munikas)本身调用。有关更多信息,请检查this。希望有所帮助。

0

的Java构造是当一个对象被使用new关键字实例化被称为特殊的方法为:

ClassName referenceName = new ClassName();

默认构造:

public ClassName(){ // no statements }

类中的构造函数不是必须是。如果没有在类中定义构造函数,然后JVM添加默认之一。

在第一码:

您已经定义了没有任何语句,以便它什么都不做的默认构造函数。这就像不定义构造函数。

在第二码:

JVM自动定义默认构造函数一样在你的第一个代码。所以,不会有任何不添加构造函数的影响。

相关问题