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);
}

其他回答

外部类不能是静态的,但嵌套/内部类可以。这基本上可以帮助您使用嵌套/内部类,而无需创建外部类的实例。

Java有与类相关联的静态方法(例如Java .lang. math只有静态方法),但是类本身不是静态的。

Java中的类可以是静态的吗?

答案是肯定的,我们可以在java中有静态类。在java中,我们有静态实例变量、静态方法和静态块。在Java中,类也可以是静态的。

在java中,我们不能使顶级(外部)类是静态的。只有嵌套类可以是静态的。

静态嵌套类vs非静态嵌套类

1)嵌套静态类不需要外部类的引用,但是 非静态嵌套类或内部类需要外部类 参考。

2)内部类(或非静态嵌套类)既可以访问静态 和Outer类的非静态成员。静态类不能访问Outer类的非静态成员。它只能访问静态 外层阶级的成员。

请看这里:https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

有一个静态嵌套类,这个[静态嵌套]类不需要一个外围类的实例来实例化自己。

这些类[静态嵌套类]只能访问外围类的静态成员[因为它没有任何对外围类实例的引用…]

代码示例:

public class Test { 
  class A { } 
  static class B { }
  public static void main(String[] args) { 
    /*will fail - compilation error, you need an instance of Test to instantiate A*/
    A a = new A(); 
    /*will compile successfully, not instance of Test is needed to instantiate B */
    B b = new B(); 
  }
}

静态方法意味着可以在不创建类对象的情况下访问它,这与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
  }
}