📜  Java中的静态类

📅  最后修改于: 2020-03-20 14:02:53             🧑  作者: Mango

Java中的类可以是静态的吗?
答案是肯定的,我们可以在Java中拥有静态类。在Java中,我们有静态实例变量静态方法静态块。也可以在Java中将类设为静态。
Java允许我们在一个类中定义另一个类。这样的类称为嵌套类。包围嵌套类的类称为外部类。在Java中,我们不能将顶级类设为静态。只有嵌套的类可以是静态的

静态和非静态嵌套类有什么区别?(比较绕口)
以下是静态嵌套类和非静态嵌套类之间的主要区别。非静态嵌套类也称为内部类。
1)嵌套静态类不需要外部类的引用,但非静态嵌套类或内部类需要外部类的引用。
2)内部类(或非静态嵌套类)可以访问外部类的静态成员和非静态成员。静态类无法访问Outer类的非静态成员。它只能访问Outer类的静态成员。
3)如果没有外部类的实例,则无法创建内部类的实例,并且内部类可以引用嵌套在外部类中的数据和方法,因此我们不需要将对象的引用传递给的构造函数。内部阶级。因此,内部类可以使程序简单明了。

// Java展示静态类和非晶态类
 
class OuterClass{
   private static String msg = "芒果For芒果";
   // 静态嵌套类
   public static class NestedStaticClass{
       // 只有静态成员的外部类,可以直接被嵌套静态类访问
       public void printMessage() {
         // 如果尝试对message构造一个非静态变量,将会产生编译错误
         System.out.println("静态嵌套类: " + msg);
       }
    }
    // 非静态嵌套类
    public class InnerClass{
       // 外部类的静态成员和非静态成员,可以被内部类访问
       public void display(){
          System.out.println("非静态嵌套类: "+ msg);
       }
    }
}
class Main
{
    // 创建静态和非静态嵌套类
    public static void main(String args[]){
       // 创建静态嵌套类对象
       OuterClass.NestedStaticClass printer = new OuterClass.NestedStaticClass();
       // 调用嵌套静态类的非静态方法
       printer.printMessage();
       // 为了创造一个内部类的对象,我们需要一个外部类的对象。
       OuterClass outer = new OuterClass();
       OuterClass.InnerClass inner  = outer.new InnerClass();
       // 调用内部类的非静态方法
       inner.display();
       // 我们可以联合上述步骤为一步,来创造一个内部类的对象
       OuterClass.InnerClass innerObject = new OuterClass().new InnerClass();
       // 现在只需要调用一个方法
       innerObject.display();
    }
}

输出:

静态嵌套类: 芒果For芒果
非静态嵌套类: 芒果For芒果
非静态嵌套类: 芒果For芒果