当前位置: 首页 > 面试题库 >

可以在Java中实例化静态嵌套类吗?

公冶兴文
2023-03-14
问题内容

在Oracle的Java
教程中,我找到了以下文本:

与类方法和变量一样,静态嵌套类与其外部类相关联。与静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法-它只能通过对象引用来使用它们。

注意:静态嵌套类与它的外部类(和其他类)的实例成员进行交互,就像其他任何顶级类一样。实际上,静态嵌套类在行为上是顶级类,为了包装方便,该顶级类已嵌套在另一个顶级类中。

静态嵌套类使用封闭的类名称访问:

OuterClass.StaticNestedClass

例如,要为静态嵌套类创建一个对象,请使用以下语法:

OuterClass.StaticNestedClass nestedObject = new
OuterClass.StaticNestedClass();

我认为不可能实例化静态类,因此我不太理解粗体的句子。

你知道这意味着什么吗?


问题答案:

您可能是混淆staticabstract作为kihero说,或者你是得过且过与具有一个类的概念static方法(这只是碰巧有静态方法的类)。

静态嵌套类只是一个嵌套类,不需要其封闭类的实例。如果您熟悉C ,则C 中的 所有
类都是“静态”类。在Java中,默认情况下,嵌套类不是静态的(此非静态种类也称为“内部类”),这意味着它们需要其外部类的实例,并在隐藏字段的后台进行跟踪,但是这使内部类可以引用其关联的封闭类的字段。

html" target="_blank">public class Outer {

    public class Inner { }

    public static class StaticNested { }

    public void method () {
        // non-static methods can instantiate static and non-static nested classes
        Inner i = new Inner(); // 'this' is the implied enclosing instance
        StaticNested s = new StaticNested();
    }

    public static void staticMethod () {
        Inner i = new Inner(); // <-- ERROR! there's no enclosing instance, so cant do this
        StaticNested s = new StaticNested(); // ok: no enclosing instance needed

        // but we can create an Inner if we have an Outer: 
        Outer o = new Outer();
        Inner oi = o.new Inner(); // ok: 'o' is the enclosing instance
    }

}

如何在静态方法中实例化非静态内部类的许多其他示例

实际上,默认情况下,我实际上将所有嵌套类都声明为静态,除非我特别需要访问封闭类的字段。



 类似资料:
  • 在Oracle的Java教程中,我找到了以下文本: 与类方法和变量一样,静态嵌套类与其外部类关联。和静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法--它只能通过对象引用来使用它们。 注意:一个静态嵌套类与它的外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。实际上,静态嵌套类在行为上是一个顶级类,为了方便打包,它已经嵌套在另一个顶级类中。 我认为不可能实例化一个静态类

  • 问题内容: 我正在在线阅读有关Java中嵌套接口的一些文章[1] [2],我知道 但是我不确定 简而言之,“嵌套接口始终是静态的”是真的吗? [1] https://beginnersbook.com/2016/03/nested-or-inner-interfaces-in- java/ [2] https://www.programcreek.com/2013/08/inner-interfa

  • 问题内容: 我已经开始学习用于Android应用程序开发的Java语言。 根据我对静态类的理解,我们无法实例化静态类的对象。 但是,为什么在随后的情况下允许实例化静态嵌套类对象? 如果将内部类的对象标记为静态,为什么我们可以创建它呢? 问题答案: 根据我对静态类的理解,我们无法实例化静态类的对象。 您对“静态类”的含义的理解不正确。基本上, Java中 的“静态类” 是嵌套类,它没有对包含类的实例

  • 但是为什么在下面的情景中允许静态嵌套类对象的实例化呢? 为什么我们可以创建内部类的对象,如果它被标记为静态的?

  • 来自JavaScript背景,我发现以下代码有点过于健壮,包含多条语句;我想知道如何简化代码,并在一条语句中完成所有操作。 Student是超类,Friend和Schedule是聚合到超类ArrayList公共成员中的子类(这些不是嵌套类)。这是我当前的代码: 我想知道我是否可以做这样的事情,在一个语句中声明/实例化超类和子类;这可能吗?

  • 问题内容: 我很难用Java的非静态嵌套类来解决问题。考虑以下示例,该示例先显示“ Inner”,然后显示“ Child”。 我知道Inner实例始终必须与Outer实例相关联,这也适用于Child,因为它扩展了Inner。我的问题是语法的含义- 为什么调用内部构造函数? 我只看到一个用于调用超类构造函数和调用重写方法的超类版本的纯文本,但从未使用过这种形式。 问题答案: 这称为“合格的超类构造函