代码之家  ›  专栏  ›  技术社区  ›  pankajt

什么时候加载类变量?

  •  0
  • pankajt  · 技术社区  · 17 年前

    参见类定义的两种方式:

    //definition: 1
    public class MyClass{
    
        private MyObject obj = new MyObject();
        private String   str = "hello world";
    
        // constructor
        public MyClass(){
    
        }
    }
    
    // definition: 2
    public class MyClass{
    
        private MyObject obj = null;
        private String   str = null;
    
        // constructor
        public MyClass(){
            obj = new MyClass();
            str = "HelloWorld";
        }    
    }
    

    我的问题是:什么时候加载类变量。它们是如何装载的?

    它们是如何初始化的?如果它们的初始化可以按照定义1进行,那么构造函数的目的是什么?

    定义类的首选方法是什么?为什么?行为是否在C++/C/Java之间?

    欢迎对以上内容提出任何澄清意见。

    3 回复  |  直到 17 年前
        1
  •  1
  •   Marcus Stade Quentin    17 年前

    这取决于语言,但大多数语言在调用构造函数之前初始化字段。通常我提倡在上下文中进行操作,初始化通常只与声明字段的位置相关。然而,正如约翰所指出的,有时候你需要做一些没有意义的事情,或者在一行中是可能的。

    同样,如果有依赖于其他字段进行初始化的字段,那么顺序也很重要。在某些语言中,如actionscript,这意味着声明的顺序决定初始化的顺序:

    作品:

    public class Foo
    {
        private var bar:Array = [1, 2, 3];
        private var baz:Array = bar.concat([4, 5, 6]);
    }
    

    不起作用:

    public class Foo
    {
        private var baz:Array = bar.concat([4, 5, 6]);
        private var bar:Array = [1, 2, 3];
    }
    
        2
  •  0
  •   Ian Baget    17 年前

    构造函数是类实例化为对象时运行的第一个函数。

    类变量在实例化期间初始化,然后立即运行构造函数。

        3
  •  0
  •   John Saunders    17 年前

    在大多数语言中,实例字段(在我所知的任何语言中都不称为类变量)将在实例构造期间初始化。它们实际上是构造函数的一部分,在实际的构造函数代码之前执行。

    当然,可以在显式构造函数代码中初始化它们(不过,如果要将它们设置为其他值,请将设置保存为空)。

    你问构造函数是用来做什么的-你不能在初始值设定项中做任何事情。如果你需要循环什么的呢?

    推荐文章