这两个代码段有什么区别
import javax.swing.*;
public class Mainframe extends JFrame {
private JLabel nameLbl = new JLabel( "Name" );
private JTextField nameTf = new JTextField( "10" );
}
import javax.swing.*;
public class Mainframe extends JFrame {
private JLabel nameLbl;
private JTextField nameTf;
public Mainframe() {
nameLbl = new JLabel( "Name" );
nameTf = new JTextField( "10" );
}
}
答案 0 :(得分:1)
您的具体情况没有太大区别。
但通常情况下,如果您想使用某些自定义值初始化对象,则可以在构造函数中执行此操作。
示例:
public Mainframe(String name, String number) {
nameLbl = new JLabel( name );
nameTf = new JTextField( number );
}
答案 1 :(得分:1)
在构造函数和声明中创建任何变量的对象是类似
见下面的例子:
public class DemoClass {
String str;
String newStr = new String("I am initialized outside");
public DemoClass() {
System.out.println(newStr);
str = new String("I am initialized inside");
System.out.println(this.str+"\n");
}
public static void main(String[] args) throws Exception {
DemoClass dc = new DemoClass();
}
}
在上面的例子中你可以看到 - 在构造函数中,变量被初始化,作为DemoClass的对象 在调用构造函数之前,JVM已经在内存中创建了它。
构造函数仅用于初始化任何实例变量。
创建对象的流程: 在创建DemoClass对象之前,JVM将创建依赖的对象,即首先创建 newStr ,然后将创建DemoClass对象。
答案 2 :(得分:0)
功能明智没有。但是如果你在第二种情况下有多个构造函数,并且如果你通过非默认构造函数创建Object,那么实例变量将保持为null。
答案 3 :(得分:0)
在内部,实例变量声明和构造函数代码在字节码中变得相同。即使初始化程序块按以下顺序合并: -
1)Instance member declaration
2)All initializer block declarations in the order of their occurence
3)Constructor code
编译后,字节码将其视为一个
答案 4 :(得分:0)
通过编译器将对象字段的显式初始化复制到每个构造函数(非参数构造函数或参数构造函数)中。