Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 何时创建实例成员?_Java_Reference - Fatal编程技术网

Java 何时创建实例成员?

Java 何时创建实例成员?,java,reference,Java,Reference,我有两段Java代码: class Test1 { index = 1; int index; } 对 class Test2 { { index = 1; } int index; } 第一个在编译时失败了,我猜是因为在定义成员“index”之前使用了它?第二个是无错误的。我不明白为什么。你们能抽出点时间帮我吗?非常感谢 第二个是编译的,因为第二个代码中存在的{…}内部结构是所谓的。Java编译器将此块复制到每个构造函数中 而且,与任何其他类方法一样,它可以使用该类中定义

我有两段Java代码:

class Test1 {
  index = 1;
  int index;
}

class Test2 {
  { index = 1; }
  int index; 
}

第一个在编译时失败了,我猜是因为在定义成员“index”之前使用了它?第二个是无错误的。我不明白为什么。你们能抽出点时间帮我吗?非常感谢

第二个是编译的,因为第二个代码中存在的{…}内部结构是所谓的。Java编译器将此块复制到每个构造函数中

而且,与任何其他类方法一样,它可以使用该类中定义的属性;定义此属性的确切位置并不重要—在该块上方或之前

第一个不编译,因为它根本不适合for类主体和成员声明,后者基本上定义了七件允许的事情:

  • InstanceInitializer(此处使用的构造)
  • StaticInitializer(与第一个类似,但在类加载时执行)
  • 建筑装饰
  • 字段声明
  • 方法声明
  • 类声明
  • 接口声明

  • test2是编译的,因为它使用了初始化器,它是编译的,因为在调用任何构造函数之前调用了初始化器

    class Test2 {
      { index = 1; }
      int index; 
    }
    
    在上述代码中,
    {index=1;}
    被称为
    实例初始值设定项块
    ,它用于初始化类的实例变量,就像
    静态初始值设定项块
    对类的静态变量所做的那样

    Java编译器
    将此块复制到每个
    构造函数
    ,使每个构造函数都可以轻松地共享此块代码

    因此,无论
    实例变量
    在类中的位置如何(即在
    实例初始值设定项块
    之前或之后),仍然可以访问它

    查看此链接:


    你的编程语言是什么?对不起,是Java,我已经编辑了我的帖子。坦斯克!这里没有引用,只有基元类型。是的,没错。Java中初始化变量的另一种方法是使用初始值设定项,而不是使用构造函数。Test2({index=1;})中的花括号是一个初始值设定项,在创建索引后调用它。Test1尝试为尚未声明的变量赋值(index=1;)。