关于android:java中的静态类和最终类

Static classes and final classes in java

本问题已经有最佳答案,请猛点这里访问。

在Java(和Android)中,使用EDOCX1 0和EDCOX1 1个声明有什么用?

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

1
2
3
static class StaticClass {
    //variables and methods
}

1
2
3
final class FinalClass {
    //variables and methods
}

谢谢,


静态嵌套类

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

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

1
OuterClass.StaticNestedClass

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

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

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

最后一堂课

声明为final的类不能子类。例如,在创建像字符串类这样的不可变类时,这一点特别有用。

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


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

不能对外部类使用static关键字,只允许对内部类使用static关键字


其他类不能扩展最终类exmple string是最终类,因此不能扩展该类。不能将"顶级"类声明为static。只能有具有修饰符"static"的内部类。静态内部类只访问外部类的静态成员


你把一门课定为期末考试,这样它就不能延期了。通常,如果您正在创建一个库(或者正在处理一个大项目的一部分),那么您的客户机就不能扩展类并修改现有的行为,这是有意义的。在你自己的程序中,没有什么理由让一个班级进入决赛,除非它是一个大程序,你可以不经意间忘记一些事情。

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

如果没有最终的和静态的内部类,您可以这样做,然后根据经验您将发现它们的用途。


如果将类设为最终类,则不能继承它。一般来说,顶级类不能被设置为静态的,但是内部类可以设置为静态的,嵌套的静态类不需要外部类的引用。Java中的静态类和最终类


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

如果你标记一个类的最后一个,它不能被继承,这是Java中这个字符串类的一个很好的例子。