java 静态类 创建_Java 中的静态类

Java 语言中可以定义一个静态类吗?

答案是显而易见的:YES ,Java 语言存在静态类。

我们都知道,Java 语言中存在 静态变量 、存在 静态方法 、也存在 静态块。其实,Java 语言还存在 静态类。

Java 语言中的静态类

Java 语言允许我们在一个类中定义另一个类。类中的类我们称之为嵌套类。而包含嵌套类的类,我们则称之为 外部类。

Java 语言中,我们不能定义顶级的外部静态类。但我们可以定义静态的内部嵌套类。

也就是说,我们不能定义下面这中形式的静态类

public static class JavaTester

{

}

当我们可以在类中定义一个静态的嵌套类,比如

public class JavaTester

{

static class NestedStaticClass

{

}

}

那么,你会不会有另一个疑问:静态和非静态的嵌套类有什么区别呢 ?

对了,忘记说了,非静态嵌套类也被称为内部类

静态和非静态的嵌套类的区别

静态嵌套类和非静态嵌套类的区别好多条,我们陈述下几个主要的区别:

静态嵌套类使用时并不需要引用外部类。但非静态嵌套类 (内部类) 则必须引用外部类。

非静态嵌套类(内部类) 可以访问外部类的静态和非静态成员。但静态嵌套类只能访问到外部类的静态成员,不可以访问外部类的非静态成员(实例成员)。

非静态嵌套类(内部类) 不能单独实例化。必须先实例化外部类,才能实例化内部类。内部类可以引用外部类的数据和方法。因此,我们并不需要将外部类的引用传递给内部类的构造方法。这种机制,使得内部类更加简单明了。

范例

我们写一个范例来演示下静态嵌套类和非静态嵌套类的区别

public class JavaTester

{

private static String msg = "简单教程,简单编程";

// 静态嵌套类

public static class NestedStaticClass{

// 静态嵌套类只能访问外部类的静态成员

public void printMessage()

{

// 如果将 msg 变量设为静态的,则下面的语句会报错

System.out.println("Message from nested static class: " + msg);

}

}

// 非静态嵌套类,也称之为内部类

public class InnerClass{

// 嵌套类可以访问外部类的静态和非静态成员

public void display(){

System.out.println("Message from non-static nested class: "+ msg);

}

}

// 如何创建静态嵌套类和内部类的实例?

public static void main(String args[]){

// 创建一个静态嵌套类的实例

JavaTester.NestedStaticClass printer = new JavaTester.NestedStaticClass();

// 调用静态嵌套类的成员方法

printer.printMessage();

// 为了创建一个内部类的实例,我们必须先创建一个外部类的实例

// 然后再创建内部类的时候

JavaTester outer = new JavaTester();

JavaTester.InnerClass inner = outer.new InnerClass();

// 调用内部类的非静态成员

inner.display();

// 我们可以将上面的两步合并为一步

JavaTester.InnerClass innerObject = new JavaTester().new InnerClass();

// 现在,我们可以调用内部类的方法

innerObject.display();

}

}

编译运行以上代码,输出结果如下

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester

Message from nested static class: 简单教程,简单编程

Message from non-static nested class: 简单教程,简单编程

Message from non-static nested class: 简单教程,简单编程

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值