2013-10-03 33 views
-5

在Java(和Android)中,static classfinal class声明有什么用?java中的静态类和final类

我的问题是不是静态的实例,但类的声明一样,

static class StaticClass { 
    //variables and methods 
} 

final class FinalClass { 
    //variables and methods 
} 

感谢,

+3

[使用Java中的final类](http://stackoverflow.com/questions/5181578/use-of-final-class-in-java)和http://stackoverflow.com/questions/ 3584113 /为什么你不能声明一类的静态在java中 – 2013-10-03 06:07:24

+0

感谢您的链接 – gnuanu

回答

6

静态嵌套类

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

OuterClass.StaticNestedClass 

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

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

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

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

Final Classes

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

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

0

,如果你犯了一个类为final那么它不能被继承。通常顶层类无法进行静态然而内部类可以由静态和嵌套静态类不需要在Java

+0

如果您将内部类设为静态,则内部类不再是内部类。你的意思是'嵌套类可以变成静态的'。请参阅[JLS#8.1.3](http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.1.3)。 – EJP

1

你让一个级决赛中,因此它不能扩展。通常,如果你创建一个库(或者在一个大项目中工作),那么你的客户就不能扩展这个类并修改现有的行为。在你自己的课程中,除非是一个大课程,而且你可以不经意间忘记事情,否则没有什么理由要进行课堂决赛。

静态内部类适用于逻辑上属于外部(含有)类但不依赖于外部类的状态的事物。例如,你可以有一个解析器类和一个内部的Parser.Listener类。通常情况下,如果你决定让一个内部类尝试,首先,如果可能的话,使其变为静态,以简化事情。

你可以没有最终和静态的内部类,然后有经验,你会发现他们使用。

+0

'静态内心阶层'是一个矛盾的词汇。你的意思是'静态嵌套'。 – EJP

1

其他类无法扩展最终类exmple字符串是最终类,因此您无法扩展此类。 您不能将“顶级”类声明为静态。你只能使用修饰符'static'来创建一个内部类。 静态内部类只访问外部类的静态成员

0

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

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