#定义

Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类。

有static关键字修饰的内部类。

比如:Pattern类中的Node类。

public class Outer {
private static String s1 = "this is s1 in Outer";
private static String s2 = "this is s2 in Outer"; public void method1() {
// 外部类可通过内部类的对象调用内部类的私有成员变量或方法
System.out.println(new Inner().s1);
System.out.println(new Inner().method2());
} private static String method2() {
return "this is method2 in Outer";
} // 内部静态类
public static class Inner {
private String s1 = "this is s1 in Inner";
private static String s3 = "this is s3 in Inner"; public void method1() {
// 内部类可直接访问外部类的私有静态成员变量或方法
System.out.println(s2);
// 内部类和外部类有同名变量和方法时
System.out.println(s1);
System.out.println(Outer.s1);
System.out.println(method2());
System.out.println(Outer.method2());
} private String method2() {
return "this is method2 in Inner";
}
}
}
------外部类测试--------
this is s1 in Inner
this is method2 in Inner
------内部类测试--------
this is s2 in Outer
this is s1 in Inner
this is s1 in Outer
this is method2 in Inner
this is method2 in Outer

1、创建静态内部类方式:Outer.Inner inner = new Outer.Inner();静态内部类不依赖于外部类。

2、外部类可通过内部类的对象调用内部类的私有成员变量或方法。

3、静态内部类访问的外部类成员变量或方法为什么不能是非静态的,而成员内部类可以?

成员内部类中有外部类的引用,所以成员内部类对外部类的私有非静态变量和方法可以随意访问。

从静态内部类它不存在对外部类的引用,所以仅能访问外部类的静态成员变量或方法。

4、静态内部类中可定义静态的成员变量和方法。

#总结

1、创建静态内部类方式:Outer.Inner inner = new Outer.Inner();静态内部类不依赖于外部类。

2、外部类可通过内部类的对象调用内部类的私有成员变量或方法。

3、静态内部类访问外部类的静态成员变量或方法必须是静态的。

4、静态内部类中可定义静态的成员变量和方法。

5、外部类可以创建静态内部类的实例,即使是私有的;并可通过内部类的实例访问内部类的成员变量和方法,即使是私有的。

#静态内部类的作用

1)首先,用内部类是因为内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类。所以没有必要专门用一个Java文件存放这个类。
2)静态都是用来修饰类的内部成员的。比如静态方法,静态成员变量,静态常量。它唯一的作用就是随着类的加载(而不是随着对象的产生)而产生,以致可以用类名+静态成员名直接获得。
这样静态内部类就可以理解了,因为这个类没有必要单独存放一个文件,它一般来说只被所在外部类使用。并且它可以直接被用 外部类名+内部类名 获得。

3)普通内部类把它理解为与外部类绑定了,创建普通内部类对象一定要通过外部类的对象new才行。而静态内部类是不需要的

#参考

https://www.cnblogs.com/SQP51312/p/6102620.html

https://zhidao.baidu.com/question/149873207.html

Java 什么是静态内部类的更多相关文章

  1. Java:内部类(静态内部类、成员内部类、局部内部类、匿名内部类)

    Java基础_内部类:在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类. 内部类的主要作用:使用内部类可以减少命名冲突. 定义位置:一个内部类可以定义在一个类中,也可以 ...

  2. [改善Java代码]使用静态内部类提高封装性

    建议38: 使用静态内部类提高封装性 Java中的嵌套类(Nested Class)分为两种:静态内部类(也叫静态嵌套类,Static Nested Class)和内部类(Inner Class).内 ...

  3. java内部类:成员内部类,静态内部类方法内部类,匿名内部类(A)

    package cn.kecheng; /** * 在java中,一个文件可以定义多个类,文件名必须和public 类型的类的类名保持一致.这两个类是平行关系. * 在java中,一个类也可以定义在一 ...

  4. Java 内部类、静态内部类、匿名内部类

    java提高篇(八)----详解内部类 概念 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 为什么要使用内部类?在<Think in java>中有这样一句话:使用内部类最吸引 ...

  5. java算法(4)---静态内部类实现雪花算法

    静态内部类单例模式实现雪花算法 在生成表主键ID时,我们可以考虑主键自增 或者 UUID,但它们都有很明显的缺点 主键自增:1.自增ID容易被爬虫遍历数据.2.分表分库会有ID冲突. UUID: 1. ...

  6. java为什么非静态内部类中不能有static修饰的属性,但却可以有常量?

    如:public class InnerClassDemo{int x;class A{static int a = 0;//这样写是不合法的.static final int b=0;//这样写是合 ...

  7. java学习之静态内部类

    /*静态内部类 * 在类内部定义一个静态内部类 * 静态的含义是该内部类可以向其他静态成员一样,不用依赖与外部类的对象.可以直接使用 * 因此该类只能访问外部类的静态成员 * * * * */ cla ...

  8. Java 中的静态内部类

    静态内部类是 static 修饰的内部类,这种内部类的特点是: 1. 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 2. 如果外部类的静态成员与内部类的成 ...

  9. java 内部类和静态内部类的区别

    private class InnerClass {        // 只有在静态内部类中才能够声明或定义静态成员        // private static String tt = &quo ...

随机推荐

  1. Python入门篇-基础语法

    Python入门篇-基础语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编程基础 1>.程序 一组能让计算机识别和执行的指令. 程序 >.算法+ 数据结构= 程 ...

  2. Schema学习【一】

    XML Schema 是基于 XML 的 DTD 替代者. 什么是 XML Schema? XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD. XML Schema: 定义 ...

  3. 文件操作之stat()函数

    作用: 返回一个文件的详细信息 头文件: #include <sys/types.h> #include <sys/stat.h> #include <unistd.h& ...

  4. springboot 之 使用poi进行数据的导出(一)

    使用的是idea+restful风格 第一:引入依赖为: <!--poi--> <dependency> <groupId>org.apache.xmlbeans& ...

  5. Spring Cloud 组件 —— hystrix

    作用与功能 ① 资源隔离, 每个依赖配备单独的线程池,为每个依赖提供一个小的线程池(或信号),如果线程池已满调用将被立即拒绝,默认不采用排队.加速失败判定时间.② 依赖超时,可配置依赖调用超时时间,超 ...

  6. Java设计模式的6大原则

    Java设计模式的6大原则 1.开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭.在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果.简单来 ...

  7. map json 字符串 对象之间的相互转化

    1.对象与字符串之间的互转 将对象转换成为字符串 String str = JSON.toJSONString(infoDo); 字符串转换成为对象 InfoDo infoDo = JSON.pars ...

  8. Acwing P284 金字塔 题解

    Analysis 一棵树的每颗子树都对应着这棵树 DFS 序的一个区间.本题的序列虽然不是 DFS 序列,但也有该性质.本题中,我们以区间长度作为阶段, F[ l , r ] 表示序列 s[ l ~ ...

  9. C语言for 循环 9*9 实现九九乘法表

    #include <stdio.h> int main(void) { //for循环实现9*9乘法表 /* 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 */ ...

  10. 题解 CF1097F 【Alex and a TV Show】

    妙妙题-- 这道题这要求%2的个数,肯定有什么性质 于是我们想到了用\(bitset\)来处理 由于三操作有\(gcd\),于是我们又想到用反演来解决 我们回忆一下反演的柿子 设\(f(x)\)为x出 ...