Java中的静态类

1150

Java中是否存在类似于static class的东西?

这样的类是什么意思?静态类的所有方法都需要是static吗?

反过来也一样吗?如果一个类只包含静态方法,那么该类也必须是静态的吗?

静态类有什么好处?


6
你可能会对https://dev59.com/7nA65IYBdhLWcg3w4CwL感兴趣。 - Ishtar
静态类基本上用于将类分组在一起。 - MiniSu
14个回答

1

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()

单例模式非常适合存储ArrayLists/List/Collection类等内容...如果您经常从多个区域收集、更新、复制集合,并且需要这些集合保持同步,或者是多对一的情况。


0
Java有静态方法与类相关联(例如java.lang.Math仅具有静态方法),但类本身不是静态的。

-2
所有的答案都很好,但我没有看到关于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);
}

1
“静态内部类”是一个自相矛盾的说法。 - user207421
没有收到你的评论?你能详细说明一下吗?我正在努力理解你的评论。 - Jay Rajput

-3
静态方法指的是可以在不创建类对象的情况下访问,与public不同:
public class MyClass {
   // Static method
   static void myStaticMethod() {
      System.out.println("Static methods can be called without creating objects");
   }

  // Public method
  public void myPublicMethod() {
      System.out.println("Public methods must be called by creating objects");
   }

  // Main method
  public static void main(String[ ] args) {
      myStaticMethod(); // Call the static method
    // myPublicMethod(); This would output an error

    MyClass myObj = new MyClass(); // Create an object of MyClass
    myObj.myPublicMethod(); // Call the public method
  }
}

不回答问题。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接