我已经开始学习用于Android应用程序开发的Java语言。
根据我对静态类的理解,我们无法实例化静态类的对象。
但是,为什么在随后的情况下允许实例化静态嵌套类对象?
class EnclosingClass
{
//...
class static StaticInnerClass
{
//...
}
}
如果将内部类的对象标记为静态,为什么我们可以创建它呢?
EnclosingClass.StaticInnerClass s = new EnclosingClass.StaticInnerClass()
根据我对静态类的理解,我们无法实例化静态类的对象。
您对“静态类”的含义的理解不正确。基本上, Java中 的“静态类”
是嵌套类,它没有对包含类的实例的隐式引用。有关更多信息,请参见JLS的8.5.1节,尤其是:
static关键字可以在非内部类或接口T的主体内修改成员类型C的声明。其作用是声明C不是内部类。正如T的静态方法在其主体中没有T的当前实例一样,C也没有T的当前实例,也没有任何词法包围的实例。
也许您在想C#中的静态类,它们完全不同吗?
但是为什么在下面的情景中允许静态嵌套类对象的实例化呢? 为什么我们可以创建内部类的对象,如果它被标记为静态的?
问题内容: 什么是静态嵌套类?静态和非静态嵌套类有什么区别? 问题答案: 静态内部类是嵌套在具有修饰符的另一个类中的类。除了可以访问在其内部定义的类的私有成员之外,它与顶级类几乎相同。 类是静态内部类。类是一个非静态的内部类。两者之间的区别是,非静态内部类的实例被永久连接到的实例-你不能创建一个没有。不过,您可以独立创建对象。 中的代码,并且都可以访问x; 不允许使用其他代码。
问题内容: 我正在查看Java代码,并注意到它使用了静态嵌套类。 使用静态嵌套类而不是普通内部类的原因是什么? 我能想到的唯一原因是Entry不能访问实例变量,因此从OOP的角度来看,它具有更好的封装性。 但是我认为可能还有其他原因,也许是性能。可能是什么? 注意。我希望我的术语正确,可以将其称为静态内部类,但是我认为这是错误的:http : //java.sun.com/docs/books/t
在Oracle的Java教程中,我找到了以下文本: 与类方法和变量一样,静态嵌套类与其外部类关联。和静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法--它只能通过对象引用来使用它们。 注意:一个静态嵌套类与它的外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。实际上,静态嵌套类在行为上是一个顶级类,为了方便打包,它已经嵌套在另一个顶级类中。 我认为不可能实例化一个静态类
问题内容: 在PHP 5.2中启用严格警告之后,我看到了一个项目中的大量严格标准警告,这些项目最初编写时没有严格警告: 严格标准 : 静态函数 Program :: getSelectSQL()在Program.class.inc中 不应抽象 有问题的函数属于抽象父类Program,并且被声明为抽象静态,因为它应该在其子类(例如TVProgram)中实现。 我确实在这里找到有关此更改的参考: 删除
问题内容: 在Oracle的Java 教程中,我找到了以下文本: 与类方法和变量一样,静态嵌套类与其外部类相关联。与静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法-它只能通过对象引用来使用它们。 注意:静态嵌套类与它的外部类(和其他类)的实例成员进行交互,就像其他任何顶级类一样。实际上,静态嵌套类在行为上是顶级类,为了包装方便,该顶级类已嵌套在另一个顶级类中。 静态嵌套类使用