Java内部类使用注意事项
时间:2019-08-22
本文章向大家介绍Java内部类使用注意事项,主要包括Java内部类使用注意事项使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Java内部类使用注意事项:
1. 非静态内部类成员可以访问外部类实例成员 (如注释1),但外部类访问非静态内部类的成员 必须创建非静态内部类对象来访问其成员,如注释2
public class Lab02 {
private int ss=5;
private class InnerClass{
private int demo=4;
private void test() {
//注释1:非静态内部类可以直接访问外部类变量
System.out.println("外部类成员变量ss的值-->"+ss);
}
}
private void test02() {
InnerClass cal=new InnerClass();
cal.test(); //注释2:
System.out.println("内部类变量demo的值:"+cal.demo);
}
public static void main(String[] args) {
Lab02 cal=new Lab02();
cal.test02();
}
}
2. 静态内部类不能访问外部类的实例成员,如:代码一
外部类不能直接访问静态内部类成员,但可以使用静态内部类的类名来调用内部类成员或使用静态内部类对象来调用内部类实例成员,如:代码二。
代码一:
public class Test{
private int pro1=5;
private static int pro2=9;
static InnerClass{
public void demo(){
System.ou.printIn("pro1"); //错误
System.ou.printIn("pro2");//正确
}
}
}
代码二:
public class Test{
static InnerClass{
private int pro1=5;
private static int pro2=9;
}
public void demo{
System.out.printIn("InnerClass.pro1");
System.out.printIn("new InnerClass().pro2");
}
}
3. 如果外部类成员变量、内部类成员变量与内部类方法里的局部变量同名,则可以通过使用this、外部类名.this作为限定来区分
public class Lab {
private int ss = 3;
private class InnerClass {
private int ss = 2;
private void info() {
int ss = 1;
System.out.println("外部类成员变量的值-->" + Lab.this.ss);
System.out.println("内部类成员变量-->" + this.ss);
System.out.println("局部变量的值-->" + ss);
}
}
private void test() {
new InnerClass().info();
}
public static void main(String[] args) {
new Lab().test();
}
}
4. Java接口里定义的内部类默认使用public static修饰 ,且只能指定public作为访问控制符
非静态内部类里不能有静态属性
原文地址:https://www.cnblogs.com/ccbTony/p/11393690.html
- 2017年高等教育十大战略性技术(二)
- 通过实例模拟ASP.NET MVC的Model绑定机制:数组
- 《全球贸易信息动态》
- .NET Core的日志[3]:将日志写入Debug窗口
- Code2Cloud:比ALM中断更大
- .NET Core的日志[4]:将日志写入EventLog
- 微信小程序不行了?看小马哥带你忆童年
- ASP.NET MVC三个重要的描述对象:ControllerDescriptor和ActionDescriptor的创建
- .NET Core的日志[5]:利用TraceSource写日志
- 物联网芯片正在积极开发 明年将得到爆发
- 韩国全球首测5G网络下自动驾驶 为汽车安全保驾护航的竟是路灯
- 通过与Quickbuild和Mist.io的持续集成实现云管理和使用监控
- .NET Core的文件系统[1]:读取并监控文件的变化
- ASP.NET MVC以ValueProvider为核心的值提供系统: ValueProviderFactory
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 恢复 RecyclerView 的滚动位置
- android实现指纹识别功能
- Flutter上线项目实战记录之路由篇
- 使用 Paging 3 实现分页加载
- Android实现圆形渐变加载进度条
- Kotlin 协程和 Android SQLite API 中的线程模型
- Android轮播图点击图片放大效果的实现方法
- 隐私策略更新 | Android 11 应用兼容性适配
- Android android:exported = true 用法详解
- Android WorkManager浅谈
- 详解Android 8.0以上系统应用如何保活
- 秒级去重:ClickHouse在腾讯海量游戏营销活动分析中的应用
- android studio 3.4配置Android -jni 开发基础的教程详解
- android TextView中识别多个url并分别点击跳转方法详解
- Android WebView支持input file启用相机/选取照片功能