java – 在实例化领域和实例化构造函数有什么区别?

前端之家收集整理的这篇文章主要介绍了java – 在实例化领域和实例化构造函数有什么区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这样做有什么区别?
public class SomeClass {
    SomeObject obj = new SomeObject();
    //rest of the code
}

和这个

public class SomeClass {
    SomeObject obj;
    public SomeClass(){
       obj = new SomeObject();
    }
    //rest of the code
}

解决方法

根据Java语言规范第 12.5 Creation of New Class Instances章:

Just before a reference to the newly
created object is returned as the
result,the indicated constructor is
processed to initialize the new object
using the following procedure:

  1. Assign the arguments for the constructor to newly created parameter
    variables for this constructor
    invocation.
  2. If this constructor begins with an explicit constructor invocation of
    another constructor in the same class
    (using this),then evaluate the
    arguments and process that constructor
    invocation recursively using these
    same five steps. If that constructor
    invocation completes abruptly,then
    this procedure completes abruptly for
    the same reason; otherwise,continue
    with step 5.
  3. This constructor does not begin with an explicit constructor
    invocation of another constructor in
    the same class (using this). If this
    constructor is for a class other than
    Object,then this constructor will
    begin with an explicit or implicit
    invocation of a superclass constructor
    (using super). Evaluate the arguments
    and process that superclass
    constructor invocation recursively
    using these same five steps. If that
    constructor invocation completes
    abruptly,then this procedure
    completes abruptly for the same
    reason. Otherwise,continue with step
  4. Execute the instance initializers and instance variable initializers for
    this class,assigning the values of
    instance variable initializers to the
    corresponding instance variables,in
    the left-to-right order in which they
    appear textually in the source code
    for the class. If execution of any of
    these initializers results in an
    exception,then no further
    initializers are processed and this
    procedure completes abruptly with that
    same exception. Otherwise,continue
    with step 5. (In some early
    implementations,the compiler
    incorrectly omitted the code to
    initialize a field if the field
    initializer expression was a constant
    expression whose value was equal to
    the default initialization value for
    its type.)
  5. Execute the rest of the body of this constructor. If that execution
    completes abruptly,then this
    procedure completes abruptly for the
    same reason. Otherwise,this procedure
    completes normally.

所以区别只是一步(步骤4.或步骤5.),但结果是一样的.

原文链接:https://www.f2er.com/java/122775.html

猜你在找的Java相关文章