Java 在构造函数中创建对象和在声明中创建对象之间的区别

Java 在构造函数中创建对象和在声明中创建对象之间的区别,java,swing,object,constructor,Java,Swing,Object,Constructor,这两段代码的区别是什么 第一个 第二 就功能而言,没有。但是,如果在第二种情况下有多个构造函数,并且通过非默认构造函数创建对象,那么实例变量将保持null。在特定情况下没有太大差异 但一般来说,如果您想用一些自定义值初始化对象,那么可以在构造函数中进行初始化 例如: public Mainframe(String name, String number) { nameLbl = new JLabel( name ); nameTf = new JTextField( number

这两段代码的区别是什么

第一个 第二
就功能而言,没有。但是,如果在第二种情况下有多个构造函数,并且通过非默认构造函数创建对象,那么实例变量将保持null。

在特定情况下没有太大差异

但一般来说,如果您想用一些自定义值初始化对象,那么可以在构造函数中进行初始化

例如:

public Mainframe(String name, String number) {
    nameLbl = new JLabel( name );
    nameTf = new JTextField( number );
}

在内部,实例变量声明和构造函数代码在字节码中变得相同。甚至初始值设定项块也按以下顺序合并:-

1)Instance member declaration
2)All initializer block declarations in the order of their occurence
3)Constructor code

编译后,字节码将其视为一个

编译器将对象字段的显式初始化复制到每个构造函数(非参数构造函数或参数构造函数)中。

在构造函数和声明中创建任何变量的对象是类似的

请参见下面的示例:

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对象。

在您决定使用final之前没有什么不同,例如private final JLabel nameLbl=new JLabel(“Name”);阅读,它解释了很多像这样的基本事情。
1)Instance member declaration
2)All initializer block declarations in the order of their occurence
3)Constructor code
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();

  }
}