当前位置: 首页 > 知识库问答 >
问题:

Java中的内部类

沈栋
2023-03-14

我在学习Java中读到关于内部班级的文章。我找到了这个密码

class Animal{
   class Brain{
   }
}

编译后,javap的动物$Brain输出为

Compiled from "Animal.java"class 
Animal$Brain {
    final Animal this$0;
    Animal$Brain(Animal);
}

这解释了内部类如何在内部类构造函数中获取对其封闭实例的引用。但是当我像这样将内部类定义为private时

class Animal{
   private class Brain{
   }
}

然后编译后,javap'动物$Brain'给出输出为

Compiled from "Animal.java"
class Animal$Brain {
    final Animal this$0;
}

那么为什么输出不同呢?为什么没有显示内部类构造函数?在后一种情况下,内部类也获得了封闭类实例的引用。

共有2个答案

罗建弼
2023-03-14

默认情况下,javap打印类的非私有成员。

可以使用-p选项显示所有类和成员。

//javap -p 'Animal$Brain.class'

Compiled from "Animal.java"
class Animal$Brain {
  final Animal this$0;
  private Animal$Brain(Animal);
}
严令秋
2023-03-14

好问题。根据这个,

如果不使用任何选项,javap会打印出传递给它的类的包、受保护的、公共字段和方法

由于您已将Brain声明为私有内部类,其默认构造函数将隐式变为私有,因此在Animal类之外它将不可见。

裁判:http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8.9

 类似资料:
  • 问题内容: 我有以下Java代码: 得出666和999。现在,我尝试在c#中设置类似的代码,但是似乎无法完成相同的工作。如果是这样,用c#编程时通常如何达到类似的效果? 问题答案: 您需要使内部类将外部类的实例作为构造函数参数。(这是Java编译器实现内部类的方式)

  • 局部内部类是指在一个方法中定义的内部类。示例代码如下: 局部内部类有如下特点: 1)局部内部类与局部变量一样,不能使用访问控制修饰符(public、private 和 protected)和 static 修饰符修饰。 2)局部内部类只在当前方法中有效。 3)局部内部类中不能定义 static 成员。 4)局部内部类中还可以包含内部类,但是这些内部类也不能使用访问控制修饰符(public、priv

  • 本节我们将介绍 Java 中的内部类。通过本节的学习,我们将了解到什么是内部类,内部类的分类和作用。在内部类的分类部分,我们将逐一学习各个类型的内部类如何定义,如何实例化以及各自的特点,要注意区分不同类型内部类的异同。有了这些基础知识之后,我们也会结合示例介绍为什么需要内部类。 1. 概念 在 Java 语言中,可以将一个类定义在另一个类里面或者一个方法里面,我们把这样的类称为内部类。 与之对应的

  • 问题内容: 我正在尝试使用Java API通过Elasticsearch实现内部匹配,但是我找不到关于它的许多文档或其他人正在使用的示例。我的JSON搜索工作如下: 我在elasticsearch库中看到了InnerHitsBuilder和addInnerHit方法,但是找不到有关如何使用它们的文档。 问题答案: 请注意,ES源代码中有大量测试用例,正在测试每个功能,因此浏览ES代码是非常丰富的信

  • 本文向大家介绍Java中HashMap的内部工作,包括了Java中HashMap的内部工作的使用技巧和注意事项,需要的朋友参考一下 函数“ hashCode”用于获取Java中对象的哈希码。这是超类Object的对象。它以整数形式返回对象引用的内存。这是一个本机函数,这意味着Java中没有直接方法可用于获取对象的引用。 为了使HashMap的性能更好,请正确使用。基本上,此函数用于计算存储区和索引

  • 本文向大家介绍Java 中引入内部类的意义?,包括了Java 中引入内部类的意义?的使用技巧和注意事项,需要的朋友参考一下 前言 这是个好问题,因为它让我想起来自己刚学到内部类时候的“想用的冲动”。 导致我代码里到处都是层层的内部类套嵌。不但经常搞得静态域错误一堆(内部类不允许有static成员字段),而且过一段时间自己都搞不清当初写的是什么。 一个很重要的设计准则是:设计是做减法,能不用模式就不