📅  最后修改于: 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芒果