java中有静态类吗?
这样的课有什么意义。静态类的所有方法也需要是静态的吗?
是否反过来要求,如果一个类包含所有静态方法,那么这个类也应该是静态的?
静态类有什么好处?
java中有静态类吗?
这样的课有什么意义。静态类的所有方法也需要是静态的吗?
是否反过来要求,如果一个类包含所有静态方法,那么这个类也应该是静态的?
静态类有什么好处?
当前回答
当类中的成员被声明为静态时会发生什么?可以在不实例化类的情况下访问成员。因此,使外部类(顶级类)静态是没有意义的。因此这是不允许的。
但是你可以将内部类设置为静态的(因为它是顶级类的成员)。然后可以在不实例化顶级类的情况下访问该类。考虑下面的例子。
public class A {
public static class B {
}
}
现在,在不同的类C中,类B可以在不创建类a实例的情况下被访问。
public class C {
A.B ab = new A.B();
}
静态类也可以有非静态成员。只有类是静态的。
但是如果static关键字从类B中删除,则在不创建A的实例的情况下不能直接访问它。
public class C {
A a = new A();
A.B ab = a. new B();
}
但是在非静态内部类中不能有静态成员。
其他回答
鉴于这是谷歌上“静态类java”的最高结果,最好的答案不在这里,我想我应该添加它。我将OP的问题解释为c#中的静态类,这些类在Java世界中被称为单例。对于那些不知道的人,在c#中“static”关键字可以应用于类声明,这意味着生成的类永远不能被实例化。
摘自Joshua Bloch的“Effective Java - Second Edition”(被广泛认为是最好的Java风格指南之一):
As of release 1.5, there is a third approach to implementing singletons. Simply make an enum type with one element: // Enum singleton - the preferred approach public enum Elvis { INSTANCE; public void leaveTheBuilding() { ... } } This approach is functionally equivalent to the public field approach, except that it is more concise, provides the serialization machinery for free , and provides an ironclad guarantee against multiple instantiation, even in the face of sophisticated serialization or reflection attacks. While this approach has yet to be widely adopted, a single-element enum type is the best way to implement a singleton. (emphasis author's)
约书亚•布洛赫(2008-05-08)。Effective Java (Java系列)(第18页)。培生教育。
我认为实现和证明是不言自明的。
除非是内部类,否则不能对类使用static关键字。静态内部类是一个嵌套类,它是外部类的静态成员。可以在不实例化外部类的情况下,使用其他静态成员访问它。就像静态成员一样,静态嵌套类不能访问外部类的实例变量和方法。
public class Outer {
static class Nested_Demo {
public void my_method() {
System.out.println("This is my nested class");
}
}
public static void main(String args[]) {
Outer.Nested_Demo nested = new Outer.Nested_Demo();
nested.my_method();
}
}
外部类不能是静态的,但嵌套/内部类可以。这基本上可以帮助您使用嵌套/内部类,而无需创建外部类的实例。
Java有与类相关联的静态方法(例如Java .lang. math只有静态方法),但是类本身不是静态的。
简单地说,Java只支持将一个类声明为内部类的静态,而不支持将顶级类声明为静态。
顶级类:一个java项目在每个java源文件中可以包含多个顶级类,其中一个类以文件名命名。在顶级类前面只允许有三个选项或关键字,public、abstract和final。
内部类:在顶级类内部的类称为内部类,这基本上是嵌套类的概念。内部类可以是静态的。使内部类静态的想法是利用实例化内部类的对象而不实例化顶层类的对象的优势。这与顶级类中的静态方法和变量的工作方式完全相同。
因此Java支持内部类级别的静态类(在嵌套类中)
Java不支持顶级类的静态类。
我希望这可以为基本理解Java中的静态类提供一个更简单的解决方案。