Java 建造商澄清
鉴于此代码:Java 建造商澄清,java,constructor,Java,Constructor,鉴于此代码: public class Example { public Example(String name) { input = name; } public someMethod() { //some code } } 在java中,当您声明新(对象或实例)时: 这里到底发生了什么? 我的问题是: 是否正在使用类构造函数的参数创建新对象 新对象是否会在大括号中包含构造函数和数据成员的所有参数 给定没有默认构造函数的代码 行Example foo=ne
public class Example
{
public Example(String name)
{
input = name;
}
public someMethod()
{
//some code
}
}
在java中,当您声明新(对象或实例)时:
这里到底发生了什么?
我的问题是:
给定没有默认构造函数的代码 行
Example foo=new Example()代码>将导致编译错误
默认情况下定义默认构造函数,除非添加另一个带参数的构造函数。在这种情况下,您必须显式定义默认构造函数
,否则您只能创建带有参数的构造函数的实例,因为您的代码没有默认构造函数
行Example foo=new Example()代码>将导致编译错误
默认情况下定义默认构造函数,除非添加另一个带参数的构造函数。在这种情况下,您必须显式定义默认构造函数
,否则您只能使用使用参数的构造函数创建实例,正如Rohit所说,由于未指定默认构造函数,您将出现编译器错误
但是,假设您确实有一个默认的ctor:所发生的事情是创建数据成员,即为每个非静态实例成员分配内存
如果类扩展了任何类,则应在子类的构造函数体执行之前调用构造函数(父类的构造函数),然后构造函数体使用局部变量或作为构造函数参数传递的局部变量初始化数据成员
如果构造函数体执行到完成,即没有异常,它将返回对新创建对象的引用
因此:
new
创建对象,如果一切顺利,则返回该对象的引用
构造函数只初始化数据。使用中定义的数据
构造函数体,或来自构造函数提供的参数
呼叫者这些参数不创建对象,而是提供数据
这可能对对象有用
正如Rohit所说,由于没有指定默认的ctor,您将有一个编译器错误
但是,假设您确实有一个默认的ctor:所发生的事情是创建数据成员,即为每个非静态实例成员分配内存
如果类扩展了任何类,则应在子类的构造函数体执行之前调用构造函数(父类的构造函数),然后构造函数体使用局部变量或作为构造函数参数传递的局部变量初始化数据成员
如果构造函数体执行到完成,即没有异常,它将返回对新创建对象的引用
因此:
new
创建对象,如果一切顺利,则返回该对象的引用
构造函数只初始化数据。使用中定义的数据
构造函数体,或来自构造函数提供的参数
呼叫者这些参数不创建对象,而是提供数据
这可能对对象有用
这将无法编译。如果不包含构造函数,Java将自动为您定义一个构造函数。它将不包括参数。因此,如果您从代码中取出公共示例片段,或者添加到无参数构造函数中,Java将编译它
当您创建了一个构造函数,然后试图实例化类的一个对象而不给它任何属性时(导致编译错误),代码将无法编译
此外,值得一提的是,您的代码无论如何都不会工作,因为您使用的输入
没有在任何地方定义。它应该在公开示例之前定义,如下所示:
String input;
如果您这样做了,但没有指定构造函数(即让Java为您创建构造函数),Java将为输入保留值“null”
任何声明为公共且属于该类的实例变量都可以由您创建的对象访问
编辑:现在您已经修改了代码以包含参数的传递,如果您在类中声明字符串输入如我的答案中所示,它将编译。这将不会编译。如果不包含构造函数,Java将自动为您定义一个构造函数。它将不包括参数。因此,如果您从代码中取出公共示例片段,或者添加到无参数构造函数中,Java将编译它
当您创建了一个构造函数,然后试图实例化类的一个对象而不给它任何属性时(导致编译错误),代码将无法编译
此外,值得一提的是,您的代码无论如何都不会工作,因为您使用的输入
没有在任何地方定义。它应该在公开示例之前定义,如下所示:
String input;
如果您这样做了,但没有指定构造函数(即让Java为您创建构造函数),Java将为输入保留值“null”
任何声明为公共且属于该类的实例变量都可以由您创建的对象访问
编辑:现在您已经修改了代码以包含参数的传递,如果您在类中声明字符串输入如我的答案中所示,它将编译。该代码不会编译。请发布实际编译的代码。该代码不会编译。请发布实际编译的代码。