java容易混淆的的内部类相关概念
关于内部类:
作用: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据 3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
分类: 成员内部类 静态内部类 方法内部类(即内部类定义在外部类的方法中) 匿名内部类
例如:要调用一般内部类必须先实例化外部类
int a=;
int b=;
// 内部类Inner,类Inner在类HelloWorld的内部
public class Inner {
int a=;
// 内部类的方法
public void show() {
System.out.println("welcome !"+a+b+Outer.this.a);
//内外有同名时使用this使用外部类的成员变量
}
} public static void main(String[] args) { // 创建外部类对象
HelloWorld hello = new HelloWorld();//定义了成员内部类后,
//必须使用外部类对象来创建内部类对象,而不能直接去 new
//一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( )
// 创建内部类对象
Inner i = hello.new Inner();
// 调用内部类对象的方法,不能直接使用内部类的方法哦
i.show();
}
}
一般类中:
静态成员(方法或属性)可以使用类名直接访问,也可以使用对象名进行访问。
静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员(必须通过对象来调用)。
在普通成员方法中,则可以直接访问同类的非静态变量和静态变量
内部类中:
1如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员; 如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
2静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问
3创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类(); //外部类
//外部类
public class HelloWorld { // 外部类中的静态变量score
private static int score = ;
//外部类的非静态变量
private int a=;
// 创建静态内部类
public static class SInner {
// 内部类中的变量score
int score = ; public void show() {
System.out.println("访问外部类中的score:" + HelloWorld.score );
System.out.println("访问内部类中的score:" + score);
System.out.println("访问外部类中a:" + new HelloWorld().a);
}
} // 测试静态内部类
public static void main(String[] args) {
System.out.println("访问外部类中的score:" + score+"访问外部类非静态a"+new HelloWorld().a);
//静态方法中可以直接调用该类的 静态成员 ,但是不能调用非静态成员
// 直接创建内部类的对象
SInner si=new SInner(); // 调用show方法
si.show();
}
}
java容易混淆的的内部类相关概念的更多相关文章
- Java语法糖4:内部类
内部类 最后一个语法糖,讲讲内部类,内部类指的就是在一个类的内部再定义一个类. 内部类之所以也是语法糖,是因为它仅仅是一个编译时的概念,outer.java里面定义了一个内部类inner,一旦编译成功 ...
- Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字
Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...
- Java代码混淆工具ProGuard
目录 Java代码混淆工具ProGuard 简介 描述 作用的环境 功能 工作原理 下载 使用时注意事项 版本问题 JDK位数问题 Java的字节码验证问题 关于使用类似于Hibernate的对象关系 ...
- “全栈2019”Java第九十三章:内部类应用场景(迭代器设计模式)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第九十一章:内部类具有多态特性吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- java中的几种内部类
Java中的几种内部类 内部类,听名字就可以知道是什么意思,就是类里面的类.有成员内部类,静态内部类,局部内部类和匿名内部类. 下面说一个每种内部类的的使用. 一. 成员内部类
- Java编程的逻辑 (21) - 内部类的本质
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- 使用Proguard做Java代码混淆
下载Proguard, 我下的是最新的Proguad5.2 在windows下运行bin/proguardgui.bat, 可以看见图形界面, 载入配置, 然后process. 配置文件例子 -inj ...
- java中的包以及内部类的介绍
1:形式参数和返回值的问题(理解) (1)形式参数: 类名:需要该类的对象 抽象类名:需要该类的子类对象 接口名:需要该接口的实现类对象 (2)返 ...
随机推荐
- sqlite3在别的目录写文件的问题
今天碰到一个文件,就是sqlite数据不能把db创建在别的目录下.找了好久不得其解.后来换了一个sqlite jar包就好了. 原来我用的是sqlite-nested 内嵌的jar包. 换成这里的包h ...
- 4、Angular2 pipe
1. stateless pipe 2.stateful pipe
- mysql应用学习-解决数据乱码
原因 mysql数据库character_set_database和character_set_server默认编码是latin1,所以导致乱码: 修改步骤 step1. 修改my.ini配置 在[m ...
- PAT 1025 PAT Ranking
#include <cstdio> #include <cstdlib> #include <vector> #include <cstring> #i ...
- openssl命令使用
openssl openssl是个密码工具集,提供多端接口调用方式 组成: 1. 代码库 libcryto ,libssl(ssl/tls) 2. 工具集 openssl 对称加密 对称加密主要是用a ...
- 函数进阶3 —— 生成器、yield from
今天我们在进一步了解一下,生成器. ①: def func(): print('这是函数func') return '函数func' func() 结果是 这是函数func ②: def func1( ...
- html 表格的一些属性设置
第一种:单元格跨行 第二种:单元格间距 第三种:带有标题的表格 第四种:带标题的表格
- SQL Server中的高可用性----复制
在本系列文章的前两篇对高可用性的意义和单实例下的高可用性做了阐述.但是当随着数据量的增长,以及对RTO和RPO要求的严格,单实例已经无法满足HA/DR方面的要求,因此需要做多实例的高可用性.本文着重对 ...
- Java—IO流 RandomAccessFile类
RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件. 支持随机访问文件,可以访问文件的任意位置. java文件模型,在硬盘上的文件是byte byte byt ...
- Selenium2学习(四)-- xpath定位
前言 在上一篇简单的介绍了用工具查看目标元素的xpath地址,工具查看比较死板,不够灵活,有时候直接复制粘贴会定位不到.这个时候就需要自己手动的去写xpath了,这一篇详细讲解xpath的一些语法. ...