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)返 ...
随机推荐
- Coursera 机器学习 第6章(上) Advice for Applying Machine Learning 学习笔记
这章的内容对于设计分析假设性能有很大的帮助,如果运用的好,将会节省实验者大量时间. Machine Learning System Design6.1 Evaluating a Learning Al ...
- javascript遍历表
定义表结构 1. 通过id遍历 <html> <body> <table id="tb" border="1"> <t ...
- C# 在窗体的子线程中创建新窗体
在子线程中如果简单的调用新窗体的话,新出来的窗体会直接一闪而过.没有停留.效果很差 具体解决方法 如下: 在母窗体中建立委托 public delegate void setShowChartForm ...
- js带文字的圆随机运动
首先是html代码(其实就只有一个画布,记得要把外部js引入写在body底部 <!doctype html> <html> <head> <meta http ...
- jquery.rotate.js可选抽奖次数和中奖内容的转盘抽奖demo
需求: 最多可以抽奖5次,而且,每次只会中“2000元理财金”或者“谢谢参与”,其它的不会抽中(哈哈,果然都是套路). 效果如下: 一.页面结构: <div class="g-cont ...
- Arcobject获得栅格影像的边界
一般的各种遥感影像都是采用某种地理或投影坐标的栅格影像,对于从事影像相关工作的人来说,得到现有影像的覆盖范围是确定研究内容,购买遥感影像的基础.怎么得到这个覆盖范围呢?当然我们可以在ArcGIS或ER ...
- arcgis server 10.1 发布动态图层展示海量及频繁更新的数据步骤
Arcgis server 发布动态图层及调用动态图层 做这个动态图层功能的原由是 有一个30万的数据需要通过arcgis GP工具转成shp然后渲染加载进地图,原来的做法是遍历生成shp面要素,读 ...
- SharePoint 2013 - Cross-domain Library
首先,参考链接:https://msdn.microsoft.com/en-us/library/office/fp179893.aspx?f=255&MSPPError=-214721739 ...
- android startActivityForResult()
举例说我想要做的一个事情是,在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Act ...
- Android 第三方类库简单使用之EventBus
Android 第三方类库之EventBus 1 PS 工欲善其事必先利其器. Eventbus也是一款在开发中常用的利器 这篇也对EventBus的简单介绍和使用,与之前个xutils介绍的级别一样 ...