`
Rainbow702
  • 浏览: 1073034 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类

Java 内部类调用外部类方法的一个注意点

    博客分类:
  • Java
阅读更多

今天在写代码的时候,涉及到使用一个内部类去调用外部类方法的问题,总是得不到我想要的结果,后经过DEBUG,才发现哪里出现了问题。现写了一个简单的代码,来重现这个问题。



 

打印出来的结果为:

a: 20
a: 0
a: 20

 为什么是这么一个结果呢?我想,对第一个 20,大家应该没有任何意见吧。那么第二个为什么是 0 呢?我一开始一直以为打印出来的应该是 20,所以一直没想通,但看了以下两张 DEBUG 的图之后,大家应该明白为什么了吧。请注意图中的断点,与相应的 InnerClassDemo 的 id。



 



 

回过头来看第一张图: ② 对应的 InnerClass 中的 test() 方法实际上调用的是 ① 对应的 InnerClassDemo 的 print(),且此时它的 a 的值仍为 0, 而 ④ 对应的InnerClass 中的 test() 方法实际上调用的是 ③ 对应的 InnerClassDemo 的 print(),而它的 a 的值已经经过 setA() 被赋值为了 20。所以,才会出现上面的打印结果。

  • 大小: 32.9 KB
  • 大小: 137.4 KB
  • 大小: 120.4 KB
分享到:
评论

相关推荐

    Java内部类总结

    - **局部内部类**:是在一个方法或构造器内部定义的类,可以访问该方法或构造器内的局部变量,但这些局部变量必须声明为`final`。 - **匿名内部类**:没有名字的内部类,通常用于实现接口或继承类时简化代码,主要...

    从零开始学JAVA第12章_内部类.ppt

    Java内部类是Java编程语言中的一种特殊的类,它定义在另一个类的内部。内部类可以访问外部类的成员变量和成员方法,同时也可以被外部类访问。内部类可以分为非静态内部类、局部内部类、静态内部类和匿名内部类四种。...

    Java内部类.pdf

    Java内部类是指定义在另一个类内部的类,它可以访问外部类的属性和方法。在Java中,内部类提供了更精细的控制,可以使得类的封装性更强,设计更为隐蔽和安全。以下是对标题中"Java内部类.pdf"文件的知识点进行的详细...

    java 匿名内部类的使用规范

    Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不需要定义一个单独的类的情况下创建类的实例。这在处理回调、事件监听、单例模式以及其他需要短时间内定义一个简单类的情况时非常有用。本篇文章将...

    有关JAVA的内部类的好东西

    Java内部类是Java语言中一个独特且强大的特性,它允许在一个类的定义内部定义另一个类。内部类可以访问外部类的所有成员,包括私有成员,这使得内部类在实现某些特定设计模式时非常有用。本篇文章将深入探讨Java内部...

    Java反射机制,通过对象访问调用类的私有成员或方法

    Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地获取类的信息并操作类的对象。这一机制的核心在于,Java程序可以获取到关于任何类的内部信息,包括类名、属性、方法、构造器等,并能在运行时...

    Java内部类总结,内部类的共同特征,内部类的分类等

    2. 局部内部类:即在一个方法中定义的内部类,局部内部类的作用域仅限于该方法内部。 3. 静态内部类:即使用 static 修饰的内部类,静态内部类可以独立于外部类的实例化。 4. 匿名内部类:即没有名字的内部类,匿名...

    java静态内部类(嵌套类)

    1. **创建对象无需依赖外部类**:这是静态内部类最为关键的一个特征。也就是说,我们可以在不创建外部类对象的情况下,直接创建静态内部类的对象。 ```java Outer.Inner in = new Outer.Inner(); ``` 2. **不...

    java 内部类应用

    在 `C` 类中,它扩展了 `A` 类,并且有一个方法 `getB()` 返回一个实现了 `B` 抽象类的新匿名内部类的实例。这个匿名内部类重写了 `fn2()` 方法,从而实现了 `B` 类的功能。在 `MultiInheritTest` 类中,我们看到 `C...

    Java内部类总结.pdf

    Java内部类是Java语言中一个独特且强大的特性,它允许在一个类的定义内部定义另一个类。内部类在Java中主要用于创建更加紧密耦合的对象,尤其是在处理事件处理和封装时。虽然在J2EE编程中使用不多,但在GUI编程中...

    Java 匿名内部类

    Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不定义单独类的情况下创建对象。这种类没有名字,通常用作一次性实现某个接口或继承某个类的需求。在Java编程中,匿名内部类主要用于事件处理、回调...

    Java内部类的作用

    ### Java内部类的作用 #### 一、定义及概念 ...总之,Java内部类提供了一种强大而灵活的机制,用于增强类的设计和实现,特别是对于需要高度封装性和灵活性的应用场景来说,内部类是一个不可或缺的工具。

    定义一个Father和Child类,并进行测试。

    2)Child类为Father类的内部类,其中定义一个introFather()方法,方法中调用Father类的name属性。 3)定义一个测试类Test,在Test类的main()方法中,创建Child对象,并调用introFather ()方法。

    Java内部类访问规则.doc

    Java内部类是Java语言的一个重要特性,它允许我们在一个类的内部定义另一个类。这种设计模式使得代码结构更加紧凑,可以更好地封装和抽象。以下是Java内部类的主要访问规则和相关知识点: 1. **内部类访问外部类**...

    java内部类解析.......

    1. **成员内部类**:这是最常见的内部类形式,作为外部类的一个成员存在,与外部类的属性、方法并列。成员内部类中不能定义静态成员,但可以访问外部类的所有成员。 2. **局部内部类**:在方法或构造器的内部定义的...

    android webview中使用Java调用JavaScript方法并获取返回值

    如果需要在WebView中启用JavaScript调用Android代码的功能,还要在addJavascriptInterface()方法中声明一个Java类的实例,并为其指定一个可以在JavaScript中访问的接口名字。 在Java代码中定义一个内部类,用于接收...

Global site tag (gtag.js) - Google Analytics