这两种方法有什么优势吗?
范例1:
class A {
B b = new B();
}
范例2:
class A {
B b;
A() {
b = new B();
}
}
{
a = new A();
}
但是,字段声明不是任何方法的一部分,因此它们不能像语句那样执行。相反,Java编译器会自动生成实例字段初始化代码,并将其放入该类的一个或多个构造函数中。初始化代码按照在源代码中出现的顺序插入到构造函数中,这意味着字段初始化器可以使用在其之前声明的字段的初始值。
此外,你可能需要延迟初始化字段。如果初始化字段是一项昂贵的操作,则可以在需要时立即对其进行初始化:
ExpensiveObject o;
public ExpensiveObject getExpensiveObject() {
if (o == null) {
o = new ExpensiveObject();
}
return o;
}
最终(如Bill所指出的那样),为了进行依赖管理,最好避免new
在类中的任何地方使用运算符。相反,最好使用“ 依赖注入” -即让其他人(另一个类/框架)实例化并将依赖注入到你的类中。
问题内容: 这行得通吗? 我只是想弄清楚构造函数。如果将其称为方法,那么我认为它的工作原理与方法类似。您可以在调用该方法时使用的方法中创建局部变量,因此我不明白为什么在构造函数使用它们之前必须先声明实例变量。 问题答案: 在您的示例中,速度和权重不是实例变量,因为它们的范围仅限于构造函数。您可以在外部声明它们,以使它们在整个类(即整个类的对象)中可见。构造函数的目的是初始化它们。 例如以这种方式:
问题内容: 当我基于C ++知识使用Java时,我喜欢使用以下方式初始化变量。 一段时间后,我改变了习惯 我碰到了其他源代码,有些使用1st约定,有些使用2nd约定。 我可以知道大家都推荐哪种惯例,为什么? 问题答案: 我发现第二种样式(一口气声明和初始化)更出色。原因: 一目了然,该变量是如何初始化的。通常,在读取程序并遇到变量时,首先会去声明它(在IDE中通常是自动的)。使用样式2,你会立即看
问题内容: 在React / React-Native中使用ES6 +语法,当 在构造函数外部 定义变量时,通过调用将其转换为实例变量。我的主张正确吗?如果在构造函数中未实例化,为什么它甚至还能工作?这里是相应的React Native代码片段: 关于ES7属性初始化器的讨论显示了如何在React / React Native中以这种方式显着使用变量。 到目前为止,相关的堆栈溢出讨论我通读不能回答
问题内容: 嗨,我在使用Java进行初始化时遇到问题,以下代码给了我一个编译错误,叫做:Expected instanceInt = 100; 但我已经宣布了 如果这些东西与堆栈和堆的东西有关,请用简单的术语进行解释,我是Java的新手,并且我对这些领域不了解。 问题答案: 您不能在课程中间使用语句。它必须与声明位于同一块或同一行中。 做您想要的事情的常用方法是: 声明期间的初始化 } 通常,如果
问题内容: 如何从Java的构造函数中获取实例化对象? 我想为某些GUI类存储对父对象的引用,以模拟事件冒泡-调用父处理程序-但我不想更改所有现有代码。 问题答案: 简短的回答:Java没有办法做到这一点。(您可以找到哪个班级叫您,但以下较长的答案在大多数情况下也适用于您。) 长话大说:依赖于被调用的地方,魔术地表现不同的代码几乎总是一个坏主意。这会使必须维护您代码的人感到困惑,并且严重损害了您的
我正在从事一个C语言的项目,当我显式实例化模板类时,很难理解模板类的哪些成员被显式实例化。我编写了以下文件,然后使用Visual C 2008 Express Edition的发布配置编译该文件,然后将其放入反汇编程序。 忽略这个文件目前并不真正需要模板,这可以很好地编译。我将exe放入反汇编程序,它告诉我该测试 这导致测试