定义:

可以将一个类的定义放在另一个类的内部 这就是内部类。--摘自java编程思想

一般实现方式:

public class SimpleInnerClass {

 class Content {

  private int i;

  public int getVlaue() {

   return i;

  }

 }

 class Description {

  private String lable;

  Description(String lab) {

   this.lable = lab;

  }

  public String readLable() {

   return lable;

  }

 }

 public void ship(String lable) {

  Content content=new Content();

  Description description=new Description(lable);

  System.out.println(description.readLable());

 }

 public static void main(String[] args) {

  Parcle2 parcle2 = new Parcle2();

  parcle2.ship("hi");

 }

}

  上面的事例是最普通不过的内部类表达的例子,通过创建内部类对象的引用访问内部类方法

但一般有更通用的做法,通常是在外围类创建一个方法关联内部类的引用;通过这种方式来建立彼此之间的联系。以代码为例:

public class InnerClass {

    class Content {
private int i; public int getVlaue() {
return i;
} } class Description { private String lable; Description(String lab) {
this.lable = lab; } public String readLable() {
return lable;
}
} public Content getContentInstance() { return new Content();
} public Description getDescriptionIntance(String lable) { return new Description(lable);
} public void ship(String lable) { Content content = getContentInstance(); Description description = getDescriptionIntance(lable); System.out.println(description.readLable()); System.out.println(description.readLable()); } public static void main(String[] args) { InnerClass parcle2 = new InnerClass();
parcle2.ship("hi");
InnerClass.Content c = parcle2.getContentInstance();// 如果想在外部类的非静态方法之外的任意位置访问某个内部类的对象,那么必须通过OutClass.xx InnerClass.Description d = parcle2.getDescriptionIntance("hello");
} }

有了联系之后内部类就可以访问外围类的所有元素,无论是private类型也可以。

以下代码即是佐证:

public interface Selector {

    boolean end();

    Object current();

    void next();

}
public class Sequence { private Object[] items;
private int next = 0; public Sequence(int size) { items = new Object[size];
} public void add(Object object) {
if (next < items.length) {
items[next++] = object;
}
} class SequenceSelector implements Selector { private int i = 0; @Override
public boolean end() {
// TODO Auto-generated method stub
return i == items.length;
} @Override
public Object current() {
// TODO Auto-generated method stub
return items[i];
} @Override
public void next() {
if (i < items.length) {
i++;
} }
} /**
* 内部类对象只有与外围类对象相关联时才能被创建<p>
* 构建内部类对象时,需要指向一个其外围类对象的引用;如果编译器访问不到这个引用就会报错
* @return
*/
public Selector selector() { return new SequenceSelector();
} public static void main(String[] args) {
Sequence sequence = new Sequence(5);
for (int i = 0; i < 5; i++) {
sequence.add(i);
}
// Sequence.SequenceSelector c=sequence.selector();
Selector selector = sequence.selector();
while (!selector.end()) {
System.out.println(selector.current());
selector.next();
} } }

在此,比较初始化的内部类细节介绍完毕,下一章笔者在继续介绍更深一层次的内部类细节

p.p1 { margin: 0; font: 12px Menlo }
p.p2 { margin: 0; font: 12px Menlo; color: rgba(147, 26, 104, 1) }
p.p3 { margin: 0; font: 12px Menlo; min-height: 14px }
span.s1 { color: rgba(147, 26, 104, 1) }
span.s2 { color: rgba(0, 0, 0, 1) }
span.s3 { color: rgba(3, 38, 204, 1) }
span.s4 { color: rgba(126, 80, 79, 1) }
span.s5 { text-decoration: underline; color: rgba(126, 80, 79, 1) }
span.s6 { color: rgba(57, 51, 255, 1) }
span.Apple-tab-span { white-space: pre }

初探JAVA内部类细节一的更多相关文章

  1. java内部类细节

    1 package face_09; 2 /* 3 * 为什么内部类能直接访问外部类中的成员呢? 4 * 那是因为内部类持有了外部类的引用. 外部类名.this 5 * 6 */ 7 class Ou ...

  2. Java内部类初探

    Java内部类初探 之前对内部类的概念不太清晰,在此对内部类与外部类之间的关系以及它们之间的调用方式进行一个总结. Java内部类一般可以分为以下三种: 成员内部类 静态内部类 匿名内部类 一.成员内 ...

  3. Java内部类final语义实现

    本文描述在java内部类中,经常会引用外部类的变量信息.但是这些变量信息是如何传递给内部类的,在表面上并没有相应的线索.本文从字节码层描述在内部类中是如何实现这些语义的. 本地临时变量 基本类型 fi ...

  4. java 内部类 *** 最爱那水货

    注: 转载于http://blog.csdn.net/jiangxinyu/article/details/8177326 Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类.内部类又 ...

  5. java内部类的作用分析

    提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就 ...

  6. 9)Java内部类(Inner Class)

      内部类:不可以有静态数据,静态方法或者又一个静态内部类      内部类的优点:隐藏类的细节,内部类可以声明为私有.内部类可以访问外部类的对象(包括private) 静态内部类:可以有静态数据,静 ...

  7. Java内部类的使用小结

    转载:http://android.blog.51cto.com/268543/384844/ Java内部类的使用小结 内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可 ...

  8. (转载)Java内部类的使用小结

    原文摘自:http://android.blog.51cto.com/268543/384844/   内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态stati ...

  9. java内部类深入详解 内部类的分类 特点 定义方式 使用

    本文关键词: java内部类 内部类的分类 特点  定义方式 使用   外部类调用内部类 多层嵌套内部类  内部类访问外部类属性  接口中的内部类  内部类的继承  内部类的覆盖  局部内部类 成员内 ...

随机推荐

  1. 【原创】Linux虚拟化KVM-Qemu分析(七)之timer虚拟化

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...

  2. Python学习随笔:使用xlwings设置和操作excel多行多列数据以及设置数据字体颜色填充色对齐方式的方法

    ☞ ░ 前往老猿Python博文目录 ░ 在前面老猿的文章中,<Python学习随笔:使用xlwings读取和操作Excel文件>.<Python学习随笔:使用xlwings读取和操 ...

  3. Object.prototype.toString.call()为什么可以用来检测数据类型?

    obj.toString()方法是用来干什么的 每一个对象都有一个toString()方法,默认情况下toString()被每一个Object对象继承,如果此方法未被重写,toString()返回&q ...

  4. volatility内存取证学习

    工具下载: Linux环境 apt-get install volatility 各种依赖的安装,(视情况安装) #Distorm3:牛逼的反编译库 pip install distorm3 ​ #Y ...

  5. [BJDCTF2020]Cookie is so stable && [GWCTF 2019]枯燥的抽奖

    [BJDCTF2020]Cookie is so stable 进入环境后看到有hint,点击之后查看源代码 提示我们cookie有线索 flag页面是: 需要输入一个username,或许这道题目是 ...

  6. 稀疏矩阵三元组表快速转置(C语言实现)

    本来准备昨天下午写的,但是因为去参加360众测靶场的考核耽搁了,靶场的题目还是挺基础的. 继续学习吧. 使用黑色墨水在白纸上签名就像由像素点构成的稀疏矩阵.如图4所示. 图4 手写体签名 [问题]请将 ...

  7. Mysql5.7.20安装文档

    Mysql5.7.20安装文档 一.Linxu下数据库的恢复和备份 当我们MySQL数据库保存重要数据的时候,备份工作极为重要.本文介绍如何使用mysqldump备份和恢复数据,使用该方法,可以将数据 ...

  8. li = [11,22,33,44,55,66,77,88,99]分类

    方法一: li = [11,22,33,44,55,66,77,88,99]s = []m = []for i in li: if i <= 55: s.append(i) else: m.ap ...

  9. 利用vs pcl库将多个PCD文件合并成一张PCD地图

    主机环境:win10系统,pcl库1.11.1, vs2019 pcl库安装以及环境配置如下连接: https://www.jb51.net/article/190710.htm 代码很简单,主要是做 ...

  10. Pytest学习(20)- allure之@allure.step()、allure.attach的详细使用

    一.@allure.step的用法 可以理解为我们编写测试用例中的每一步操作步骤,而在allure中表示对每个测试用例进行非常详细的步骤说明 通过 @allure.step(),可以让测试用例在all ...