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: 简单教程,简单编程

java 静态类 创建_Java 中的静态类相关推荐

  1. java method 创建_java中创建对象的5种方式

    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法. Java中有5种创建对象的方法,下面列出例子还有他们的字节码: 使用n ...

  2. java的static类_java中staticclass静态类详解

    一般情况下是不可以用static修饰类的.如果一定要用static修饰类的话,通常static修饰的是匿名内部类. 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的(利用static ...

  3. java定义一个静态类_Java中的静态类

    在java中有类似的静态类的类吗? 静态类的定义是什么.静态类的所有方法都需要是静态的吗? 是否需要相反的方式,如果一个类包含所有的静态方法,类应该是静态的? 静态类有什么好处? 回答: Java有静 ...

  4. java http连接_Java中通过方法创建一个http连接并请求(服务器间进行通信)

    服务器间进行通信只能通过流(Stream)的方式进行,不能用方法的返回值. 1.Java代码创建一个连接并请求该连接返回的数据 doGet()方法,execute()方法中调用 package dem ...

  5. java 主线程_Java中的主线程 - Break易站

    Java 多线程 Java为多线程编程提供内置支持.多线程程序包含两个或多个可以并发运行的部分.这样的程序的每个部分称为线程,每个线程定义一个单独的执行路径. Java中的主线程 当Java程序启动时 ...

  6. Java jni 底层_Java中的native是如何实现的(JNI)

    什么是JNI JNI是Java Native Interface的缩写,Java本地接口(JNI)提供了将Java与C/C++.汇编等本地代码集成的方案,该规范使得在 Java 虚拟机内运行的 Jav ...

  7. java 序列化实例_Java中的序列化与反序列化实例

    创建的字节流与平台无关.因此,在一个平台上序列化的对象可以在另一个平台上反序列化. 为了使Java对象可序列化,我们实现java.io.Serializable可序列化接口. ObjectOutput ...

  8. java thread join()_Java中Thread.join()的使用方法

    概要 本文分三个部分对thread.join()进行分析: 1. join() 的示例和作用 2. join() 源码分析 3. 对网上其他分析 join() 的文章提出疑问 1. join() 的示 ...

  9. java file 方法_JAVA中File的常用方法

    一.File类中包含了很多获得文件或文件夹属性的方法,使用起来比较方便,下面将常见的方法介绍如下: a.createNewFile方法 public boolean createNewFile() t ...

最新文章

  1. Django 缓存6.2
  2. 生产场景 bond 0实战
  3. 【Groovy】集合遍历 ( 使用集合的 find 方法查找集合元素 | 闭包中使用 == 作为查找匹配条件 | 闭包中使用 is 作为查找匹配条件 | 闭包使用 true 作为条件 | 代码示例 )
  4. 利用Nginx轻松实现Ajax的跨域请求(前后端分离开发调试必备神技)
  5. 043、JVM实战总结:动手实验,自己动手模拟出频繁Young GC的场景
  6. Babel 陷财务困境,负责人13万年薪遭质疑,Vue.js作者尤雨溪发文力挺
  7. Python排序算法[二]:测试数据的迷雾散去
  8. 数学公式的规约(reduce)和简化(simplify)
  9. 数组题 倒置 加到字符串
  10. python写图片爬取软件_python抓取整个网站图片
  11. 2018年深圳,武汉房价走势分析
  12. Adobe reader xi打开几秒后闪退问题
  13. 微信支付 postman_支付宝微信刷脸支付系统搭建服务商平台怎么做
  14. centos linux怎么关闭锁屏时间,【Centos】Centos7.5取消自动锁屏功能
  15. 方差分析及其在Excel、SPSS中的应用
  16. excel查重技巧:如何用组合函数快速统计重复数据(下)
  17. 数据结构考研:电脑磁盘碎片的定义、产生原理和清理原因(文件碎片/机械硬盘/固态硬盘/硬盘清理/计算机/软件工程/王道论坛)
  18. 利用python在网上接单赚钱,兼职也能月入过万,赶紧学起来!
  19. Android开发本地及网络Mp3音乐播放器(二十)歌曲下载完成后通知主界面更新本地音乐
  20. 作业盒子端AndrOid,作业盒子小学老师端

热门文章

  1. 寄存器对某位 置1时。为什么不直接置1而要先写0在置1?
  2. minecraft 服务器修改器,【1.6.2】Minecraft內置修改器TMI(包含整合包)
  3. FindWindowEx死循环的问题
  4. 架构师图谱·微服务消息队列篇
  5. 程序包lombok不存在
  6. 【自研工具】漏洞盒子批量提交脚本
  7. 2022新版Git教程 从入门到实战(三)Git分支管理
  8. java之随机抽取数字并按从小到大排序
  9. 视频教程-Layabox3D游戏视频教程-源码-手游开发
  10. java设置项目为library_如何从Eclipse设置java.library.path