Java 什么是静态内部类
#定义
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 什么是静态内部类的更多相关文章
- Java:内部类(静态内部类、成员内部类、局部内部类、匿名内部类)
Java基础_内部类:在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类. 内部类的主要作用:使用内部类可以减少命名冲突. 定义位置:一个内部类可以定义在一个类中,也可以 ...
- [改善Java代码]使用静态内部类提高封装性
建议38: 使用静态内部类提高封装性 Java中的嵌套类(Nested Class)分为两种:静态内部类(也叫静态嵌套类,Static Nested Class)和内部类(Inner Class).内 ...
- java内部类:成员内部类,静态内部类方法内部类,匿名内部类(A)
package cn.kecheng; /** * 在java中,一个文件可以定义多个类,文件名必须和public 类型的类的类名保持一致.这两个类是平行关系. * 在java中,一个类也可以定义在一 ...
- Java 内部类、静态内部类、匿名内部类
java提高篇(八)----详解内部类 概念 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 为什么要使用内部类?在<Think in java>中有这样一句话:使用内部类最吸引 ...
- java算法(4)---静态内部类实现雪花算法
静态内部类单例模式实现雪花算法 在生成表主键ID时,我们可以考虑主键自增 或者 UUID,但它们都有很明显的缺点 主键自增:1.自增ID容易被爬虫遍历数据.2.分表分库会有ID冲突. UUID: 1. ...
- java为什么非静态内部类中不能有static修饰的属性,但却可以有常量?
如:public class InnerClassDemo{int x;class A{static int a = 0;//这样写是不合法的.static final int b=0;//这样写是合 ...
- java学习之静态内部类
/*静态内部类 * 在类内部定义一个静态内部类 * 静态的含义是该内部类可以向其他静态成员一样,不用依赖与外部类的对象.可以直接使用 * 因此该类只能访问外部类的静态成员 * * * * */ cla ...
- Java 中的静态内部类
静态内部类是 static 修饰的内部类,这种内部类的特点是: 1. 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 2. 如果外部类的静态成员与内部类的成 ...
- java 内部类和静态内部类的区别
private class InnerClass { // 只有在静态内部类中才能够声明或定义静态成员 // private static String tt = &quo ...
随机推荐
- ORA-01031:insufficient privileges 解决方法
使用sys或system帐号登录plSql时,提示ORA-01031:insufficient privileges 错误.使用其他的帐号能正常登录,在cmd命令中用system帐号也是可以正常登录. ...
- Java 十大排序算法
目录: 1.冒泡排序(Bubble Sort) 2.选择排序(Selection Sort) 3.插入排序(Insertion Sort) 4.希尔排序(Shell Sort) 5.归并排序(Merg ...
- 关于MQ的几件小事:消息队列的用途、优缺点、技术选型
原文:https://www.cnblogs.com/jack1995/p/10908789.html 1.为什么使用消息队列? (1)解耦:可以在多个系统之间进行解耦,将原本通过网络之间的调用的方式 ...
- SQL进阶系列之1CASE表达式
配置环境: 下载地址:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads#windows 使用数据库: C:\Po ...
- Java精通并发-synchronized关键字原理详解
关于synchronized关键字原理其实在当时JVM的学习[https://www.cnblogs.com/webor2006/p/9595300.html]中已经剖析过了,这里从研究并发专题的角度 ...
- 51nod 1305 Pairwise Sum and Divide
有这样一段程序,fun会对整数数组A进行求值,其中Floor表示向下取整: fun(A) sum = 0 for i = 1 to A.length for j = ...
- 《少年先疯队》第八次团队作业:Alpha冲刺第四天
前言 第四天冲刺会议 时间:2019.6.17 地点:宿舍 4.1 今日完成任务情况以及遇到的问题. 4.1.1今日完成任务情况 姚玉婷:管理员功能模块中,收费管理功能的实现. ...
- 《The One!团队》第八次作业:ALPHA冲刺(四)
项目 内容 作业所属课程 所属课程 作业要求 作业要求 团队名称 < The One !> 作业学习目标 (1)掌握软件测试基础技术.(2)学习迭代式增量软件开发过程(Scrum) 第四天 ...
- 基于h5+的微信登录,hbuilder打包
1.打开app项目的manifest.json的文件,选择模块权限配置,将OAuth(登录鉴权)模块添加至已选模块中 2.选择SDK配置,在plus.oauuth·登录鉴权中,勾选□ 微信登录,配置好 ...
- python_并发编程——消费者和生产者模型
消费者和生产者模型 from multiprocessing import Process,Queue import time import random class Producer(Process ...