与内部类相似,静态内部类指在一个类的内部包含有另外一个或者多个静态类。例如:

public class OuterClass {

。。。

static class StaticInnerClass1 { //内部静态类

//只可以访问OuterClass的静态成员

。。

} //StaticInnerClass结束

。。。

static class StaticInnerClassN { //更多静态内部类

//只可以访问OuterClass的静态成员

。。。

} //StaticInnerClassN结束

} //OuterClass结束

与一般内部类不同,在静态代码中不能够使用this操作,所以在静态内部类中只可以访问外部类的静态变量和静态方法。

使用静态内部类的目的和使用内部类相同。如果一个内部类不依赖于其外部类的实例变量,或与实例变量无关,则选择应用静态内部类。

如下例子演示怎样使用静态内部类:

///完整程序存在本书配套资源目录Ch12名为StaticInnerClassTest。

java

public class StaticInnerClassTest {

public static void main( String args[] ) {

OuterClass2 outer = new OuterClass2();

OuterClass2。

StaticInnerClass。innerMethod();

//调用静态内部类的静态方法

OuterClass2。outerMethod();

//创建静态内部类对象

OuterClass2。StaticInnerClass staticInner = new OuterClass2。

StaticInnerClass();

int num = staticInner。innerMethod2(); //调用静态内部类实例方法

}

}

class OuterClass2 { //外部类

private double x = 0。

0; //内部静态类不可以访问外部类实 例变量

static private int n = 10; //外部类静态变量

static void outerMethod() { //外部类静态方法

System。out。println("from OuterClass。

。。");

}

void outerMethod2() {

System。out。println("from OuterClass’ instance method2()。。。");

}

static class StaticInnerClass { //静态内部类

static private int m = 5; //静态内部类静态变量

static void innerMethod() { //静态内部类静态方法

int sum;

n = 20; //只可以访问外部类静态变量

sum = n + m;

System。

out。println("from InnerClass sum = " + sum);

outerMethod(); //只可以调用外部类静态方法

}

int innerMethod2() {

n = 100;

outerMethod();

System。

out。println("from InnerMethod2() n = " + n);

return n;

}

} //静态内部类结束

} //外部类结束

如同不用创建对象就可调用静态方法一样,上例静态内部类中的静态方法利用:

OuterClass2。

StaticInnerClass。innerMethod(); //静态内部类调用其静态方法

来调用。注意,可以在静态内部类的方法中,直接访问外部类的静态变量n和调用静态方法outerMethod()。但不允许访问外部类的实例变量x以及实例方法outerMethod2()。

静态内部类中也可以提供实例方法,如:

static class StaticInnerClass {

int innerMethod2() {

n = 100; //只可访问外部类静态变量

outerMethod(); //只可调用外部类静态方法

System。

out。println("from InnerMethod2() n = " + n);

return n;

}

} //静态内部类结束

静态内部类的实例方法中亦只允许访问外部类的静态成员。

可以使用下列语法格式创建一个静态内部类对象并且调用其实例方法,以及静态方法:

OuterClass2。

StaticInnerClass staticInner = new OuterClass2。StaticInner Class(); //创建静态内部类对象

int num = staticInner。innerMethod2(); //调用实例方法

staticInner。

innerMethod(); //调用其静态方法。

全部

java 内部静态类如何使用_如何应用Java的静态内部类?相关推荐

  1. java 为什么有匿名类_全面了解Java中的内部类和匿名类

    Java内部类(Inner Class),类似的概念在C++里也有,那就是嵌套类(Nested Class),乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了 ...

  2. java中注解的解析_全面解析Java中的注解与注释

    注解一.什么是 Annotation? (注解 or 注释)Annotation, 准确的翻译应该是 -- 注解. 和注释的作用完全不一样. Annotation 是JDK5.0及以后版本引入的一个特 ...

  3. java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?

    java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...

  4. java 和c 多态比较_多态在 Java 和 C 编程语言中的实现比较

    2011 年 12 月 22 日发布 众所周知,多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定.C++ 和 Java 作为当前最为流行的两种 ...

  5. java 面试题合集_撩课-Java面试题合辑1-50题

    1.简述JDK.JRE.JVM? 一.JDK JDK(Java Development Kit) 是整个JAVA的核心, 包括了Java运行环境(Java Runtime Envirnment), 一 ...

  6. java怎么提升编程能力_怎样提升java编程能力

    1 怎样提升java编程能力 在互联网迅猛发展的时代,而我们如果对互联网一无所知,那就相当于文盲.所以很多人都想去了解它,去学习他.而作为互联网的产物--java,是一门非常不错的技术,学精通之后,你 ...

  7. java中的invoke方法_详解Java中Method的Invoke方法

    在写代码的时候,发现从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而子类改写了这个方法,从子类class通过getDeclaredMethod也能获取到M ...

  8. java中io是什么_深入理解Java中的IO

    深入理解Java中的IO 转载自:http://blog.csdn.net/qq_25184739/article/details/51205186 本文的目录视图如下: Java IO概要 a.Ja ...

  9. 有谁转行学java成功了的吗_转行学习java靠谱吗?

    转行学Java靠谱吗?靠不靠谱主要还是看你自己是否想要学好Java技术,是否想要从事这方面的岗位工作,如果你已经有了这个决心,那么自然而然什么都不会问题.无论我们学Java是兴趣还是想要通过学好Jav ...

最新文章

  1. java 循环展开_Java在Debug的时候,有些变量能无限展开(循环了)?
  2. cuda测试caffe编译安装
  3. beyond compare 4 的30天试用期已过-解决方法
  4. .NET5在开发平台上远优于Java,如何发挥优势?
  5. 拥塞控制中的开环和闭环控制
  6. sqlilab--writeup (5~6) 布尔盲注
  7. 基于JAVA+SpringMVC+MYSQL的苗木销售系统
  8. java程序包r不存在_java - 从命令行使用Gradle构建时,“程序包R不存在”错误 - 堆栈内存溢出...
  9. 【杂谈】Solr的自动聚类carrot2和facet关系和比较
  10. python视频大全
  11. kindle看pdf不清楚_不要再纠结pdf在kindle上的显示问题了,简单教程,拿去!不要太谢我。...
  12. Auto.js:实现蚂蚁森林自动收能量(懒人的高效生活)
  13. 2022-04-清华管理学-清华大学-宁向东
  14. LINUX   LVM 硬盘管理及LVM的扩容
  15. Amazon 中国区配置 PingIdentity 身份集成实现 Redshift 数据库群集单点登录
  16. Java实现将中文转成拼音和ASCII码
  17. LVDS接口和LVDS技术
  18. openwrt 透明代理上网
  19. 音乐翻唱软件测试初学者,~~经典歌曲的国语粤语版本对照~~
  20. java url地址不变_页面跳转后,浏览器地址栏地址保持不变

热门文章

  1. 终于结束的起点(滚动数组,记忆化搜索)
  2. java 万年历绪论,基于FPGA的万年历设计
  3. Unity Shader 玻璃效果
  4. 明星们进行危机公关有哪些策略?
  5. php处理异步请求_php的异步请求操作
  6. IOS实现扫描二维码,利用系统API实现,看了这篇IOS扫描功能再也不用求人了。
  7. 【网站】微信域名防红是怎么做出来的,原理是什么?
  8. 【C语言课程设计】【C语言】学生成绩管理系统
  9. 东风风行t5evo噪音测试软件,高颜值颠覆你想象 测试东风风行T5 EVO
  10. 连连直充1688跨境宝,如何在连连绑定跨境宝账号?