Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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_Inner Classes - Fatal编程技术网

Java 创建内部类的对象时,无法理解赋值运算符右侧部分的逻辑

Java 创建内部类的对象时,无法理解赋值运算符右侧部分的逻辑,java,inner-classes,Java,Inner Classes,我在搜索的问题中没有找到答案,这就是为什么我要问这个问题 class outer { class inner // non static . { } } For creating object of inner class I am unable to understand the logic of the part to the right of assignment operator . outer o = new outer () ; outer.inner y = o. new

我在搜索的问题中没有找到答案,这就是为什么我要问这个问题

class outer 
{
class inner  // non static .
{
}
}

For creating object of inner class I am unable to understand the logic of the part to the right of assignment operator .

outer o = new outer () ;
outer.inner y = o. new inner () ; //  I have doubt in this line .
这里outer.inner是返回类型,但是正确的部分呢

据我所知:
我们不能写outer.inner y=new outer.inner();因为内部是非静态的。

问题在于非静态的内部类绑定到包含类的特定实例。这就像类定义有一个隐藏的引用成员,有点:

class Outer {
  class Inner {
    private final Outer outer;
    Inner(Outer outer) { this.outer = outer; }
  }
}
这就是所发生的
outer.inner y=o.new inner()
,因为
inner
不是
static
,它需要实例化
outer
,并且该语法用于将隐藏的
outer
引用传递给实例


如果
internal
变为
static
,则它不再需要符合条件的实例,外部类的名称就足够了,例如:
new outer.internal()
问题是非
static
内部类绑定到包含类的特定实例。这就像类定义有一个隐藏的引用成员,有点:

class Outer {
  class Inner {
    private final Outer outer;
    Inner(Outer outer) { this.outer = outer; }
  }
}
这就是所发生的
outer.inner y=o.new inner()
,因为
inner
不是
static
,它需要实例化
outer
,并且该语法用于将隐藏的
outer
引用传递给实例

如果
internal
变为
static
,则它不再需要符合条件的实例,外部类的名称就足够了,例如:
newouter.internal()

因此,第一部分
outer.internal
是您所述的返回类型

其次,
o
是对包含内部对象的外部对象的引用,只有当您有对外部对象的引用时,才能访问内部对象。现在
o。新内页()
只是简单地说“进入对象
o
,然后创建一个
internal
类型的对象”

因此,第一部分
outer.internal
是您所述的返回类型


其次,
o
是对包含内部对象的外部对象的引用,只有当您有对外部对象的引用时,才能访问内部对象。现在
o。新内页()
简单地说“进入对象
o
,然后创建一个
内部
类型的对象”.

请遵守Java命名约定。尝试过之前的研究吗?请遵守Java命名约定。尝试过之前的研究吗?如果
internal
static
它将不是一个内部类,因此类名将令人困惑。@LewBloch:这只是术语,它将是一个嵌套类,但这只是一种诡辩。我不知道为什么他们必须在static关键字已经做了的情况下将inner和nested分开。不管你个人的观点是什么,或者你使用了什么贬义词,事实是(!)Java中的inner类是一个嵌套类,它不是
static
。这不是“诡辩”,而是Java语言规范。“我建议你忘掉你的观点,@Jack,面对事实。@LewBloch:选择使用两个不同的同义词(!)来区分
静态
嵌套类和非
静态
内部类是一种诡辩。”。这是一种说“我们必须不惜一切代价为它找到不同的术语”的方式,特别是因为
static
已经暗示了这种语义。他们选择的并不是事实,这只是我个人的观点,而是一个决定标准的委员会的观点,这使得你的观点完全无效。这个命名选择的论据是有争议的,不管“它们是事实”与否。我没有“论据”。无论您个人的观点如何,JLS定义这些术语是事实。杰克,你自己读一读,确认那些定义都在那里。鉴于语言的术语实际上是由语言的定义文档定义的,您可以选择使用这样定义的实际艺术术语,也可以选择固执。由于定义文档定义了术语,语言和它的社区将极其漠不关心地忽略您的反对意见。如果
内部
静态的
它将不是一个内部类,因此类名将令人难以理解。@LewBloch:这只是术语,它将是一个嵌套类,但这只是一种诡辩。我不知道为什么他们必须在static关键字已经做了的情况下将inner和nested分开。不管你个人的观点是什么,或者你使用了什么贬义词,事实是(!)Java中的inner类是一个嵌套类,它不是
static
。这不是“诡辩”,而是Java语言规范。“我建议你忘掉你的观点,@Jack,面对事实。@LewBloch:选择使用两个不同的同义词(!)来区分
静态
嵌套类和非
静态
内部类是一种诡辩。”。这是一种说“我们必须不惜一切代价为它找到不同的术语”的方式,特别是因为
static
已经暗示了这种语义。他们选择的并不是事实,这只是我个人的观点,而是一个决定标准的委员会的观点,这使得你的观点完全无效。这个命名选择的论据是有争议的,不管“它们是事实”与否。我没有“论据”。无论您个人的观点如何,JLS定义这些术语是事实。杰克,你自己读一读,确认那些定义都在那里。鉴于语言的术语实际上是由语言的定义文档定义的,您可以选择使用这样定义的实际艺术术语,也可以选择固执。因为定义文档定义了术语,所以语言及其社区将忽略您的反对