4

在 Java(和 Android)中,使用static classfinal class声明是什么?

我的问题不是关于静态实例,而是关于类声明,例如,

static class StaticClass {
    //variables and methods
}

final class FinalClass {
    //variables and methods
}

谢谢,

4

6 回答 6

11

静态嵌套类

与类方法和变量一样,静态嵌套类与其外部类相关联。和静态类方法一样,静态嵌套类不能直接引用在其封闭类中定义的实例变量或方法:它只能通过对象引用来使用它们。注意:静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。实际上,静态嵌套类在行为上是一个顶级类,为了方便打包,它已经嵌套在另一个顶级类中。

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

OuterClass.StaticNestedClass

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

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

http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

最后的课程

声明为 final 的类不能被子类化。这特别有用,例如,在创建像 String 类这样的不可变类时。

http://docs.oracle.com/javase/tutorial/java/IandI/final.html

于 2013-10-03T06:07:59.303 回答
3

final 类将限制进一步扩展(继承)。

你不能在外部类上使用静态关键字,静态只允许内部类静态类

于 2013-10-03T06:07:16.233 回答
1

如果你将一个类设为final,那么它就不能被继承。通常顶级类不能设为静态,但内部类可以设为静态,嵌套静态类不需要 在 java 中引用外部类静态最终类

于 2013-10-03T06:04:49.130 回答
1

你做了一个最终的类,所以它不能被扩展。通常,如果您正在创建库(或处理大型项目的一部分),那么您的客户无法扩展类并修改现有行为。在您自己的程序中,几乎没有理由将课程定为最终课程,除非它是一个大型程序并且您可能会无意中忘记事情。

静态内部类用于逻辑上属于外部(包含)类但不依赖于外部类状态的事物。例如,您可以有一个 Parser 类和一个内部 Parser.Listener 类。通常,如果您决定拥有一个内部类,首先尝试将其设为静态,如果可能的话,以简化事情。

您可以不使用 final 和 static 内部类,然后根据经验,您会发现它们很有用。

于 2013-10-03T06:10:36.170 回答
1

其他类不能扩展最终类示例字符串是最终类,因此您不能扩展此类。您不能将“顶级”类声明为静态。你只能有一个带有修饰符'static'的内部类。静态内部类只访问外部类的静态成员

于 2013-10-03T06:10:46.290 回答
0

你不能标记一个类静态?是的,如果是嵌套类 否,如果是普通类。如果您将嵌套类标记为静态,它将作为完全标记的类工作,只需使用 classname.staticClassNmae 来访问它。

如果你标记一个类 final ,它就不能被继承,这是 java中这个String类的一个很好的例子。

于 2013-10-03T06:11:29.007 回答