java中有静态类吗?

这样的课有什么意义。静态类的所有方法也需要是静态的吗?

是否反过来要求,如果一个类包含所有静态方法,那么这个类也应该是静态的?

静态类有什么好处?


当前回答

好吧,Java有“静态嵌套类”,但它们与c#的静态类完全不一样,如果你是从那里来的的话。静态嵌套类只是一个没有隐式引用外部类实例的类。

静态嵌套类可以有实例方法和静态方法。

在Java中没有顶级静态类这种东西。

其他回答

好吧,Java有“静态嵌套类”,但它们与c#的静态类完全不一样,如果你是从那里来的的话。静态嵌套类只是一个没有隐式引用外部类实例的类。

静态嵌套类可以有实例方法和静态方法。

在Java中没有顶级静态类这种东西。

都是很好的答案,但是我没有看到java.util.Collections的引用,它为它们的静态因子方法使用了大量的静态内部类。加上相同的。

从java.util.Collections中添加一个示例,其中有多个静态内部类。内部类对于需要通过外部类访问的代码进行分组非常有用。

/**
 * @serial include
 */
static class UnmodifiableSet<E> extends UnmodifiableCollection<E>
                             implements Set<E>, Serializable {
    private static final long serialVersionUID = -9215047833775013803L;

    UnmodifiableSet(Set<? extends E> s)     {super(s);}
    public boolean equals(Object o) {return o == this || c.equals(o);}
    public int hashCode()           {return c.hashCode();}
}

下面是java.util.Collections类中的静态因子方法

public static <T> Set<T> unmodifiableSet(Set<? extends T> s) {
    return new UnmodifiableSet<>(s);
}

当类中的成员被声明为静态时会发生什么?可以在不实例化类的情况下访问成员。因此,使外部类(顶级类)静态是没有意义的。因此这是不允许的。

但是你可以将内部类设置为静态的(因为它是顶级类的成员)。然后可以在不实例化顶级类的情况下访问该类。考虑下面的例子。

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中有静态类吗?

单例就像一个静态类。我很惊讶居然没人提起过。

public final class ClassSingleton { 

private static ClassSingleton INSTANCE;
private String info = "Initial info class";

private ClassSingleton() {        
}

public static ClassSingleton getInstance() {
    if(INSTANCE == null) {
        INSTANCE = new ClassSingleton();
    }
    
    return INSTANCE;
}

// getters and setters

public String getInfo(){
    return info;
  }
}

用法是这样的:

String infoFromSingleton = ClassSingleton.getInstance().getInfo()

单例非常适合存储数组列表/列表/集合类等…如果您经常从多个区域收集、更新、复制集合,并且需要这些集合保持同步。或者多对一。

鉴于这是谷歌上“静态类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页)。培生教育。

我认为实现和证明是不言自明的。