“全栈2019”Java第九十七章:在方法中访问局部内部类成员详解

难度

初级

学习时间

30分钟

适合人群

零基础

开发语言

Java

开发环境

  • JDK v11
  • IntelliJ IDEA v2018.3

提示

本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。

1.局部内部类

在任何作用域中定义的类都称之为局部内部类。

演示:

局部内部类。

代码:

2.作用域内访问局部内部类成员

我们来试试如何在作用域内访问到局部内部类成员。

演示:

请在Main类中定义一个局部内部类People并在其内部定义一个实例变量、实例方法、常量、最终方法和静态常量。

在main()方法中(作用域内)访问局部内部类People中的成员。

请观察程序运行结果。

代码:

Main类:

结果:

错误信息:

文字版:

/Users/admin/Workspace/Java/Hello/src/main/Main.java

Error:(43, 28) java: 找不到符号

符号: 变量 anIntValue

位置: 类 main.Main

Error:(45, 28) java: 找不到符号

符号: 变量 anFinalValue

位置: 类 main.Main

Error:(47, 28) java: 找不到符号

符号: 变量 anStaticFinalValue

位置: 类 main.Main

Error:(49, 9) java: 找不到符号

符号: 方法 sayInstanceMethod()

位置: 类 main.Main

Error:(51, 9) java: 找不到符号

符号: 方法 sayFinalMethod()

位置: 类 main.Main

从运行结果来看,我们的程序出现了错误。接下来一步一步来分析。

首先,我们先来局部内部类里面定义的成员有哪些:

定义了实例变量、实例方法、常量、最终方法和静态常量。

再来往下看:

直接开始访问局部内部类里面的成员。

首先访问的是局部内部类里面的实例变量:

此次执行的结果是:

找不到一个叫anIntValue的变量,说明不能直接访问局部内部类里面实例变量。

接下来,我们再往下执行:

此次执行的是直接访问局部内部类中的常量,执行结果是:

和之前错误原因一样,不能直接访问局部内部类中的常量。

继续往下执行:

此次执行的是直接访问局部内部类中的静态常量。执行结果是:

错误原因是不能直接访问局部内部类中的静态常量。但是,我们可以通过局部内部类类名直接访问到静态常量,这个在下一小节中讲解到。

继续往下执行:

此次执行的是直接访问局部内部类中的实例方法。执行结果是:

错误原因是不能直接访问局部内部类中实例变量。

继续往下执行:

此次执行的是直接访问局部内部类中的最终方法,执行结果是:

错误原因是不能直接访问局部内部类中的最终方法。

至此,程序执行完毕!

那么有没有一种方法可以访问到局部内部类中的成员呢?

有,那就是创建局部内部类对象,通过局部内部类对象访问到其中的成员。我们来试试。

3.通过局部内部类对象访问其中成员

演示:

请在Main类中定义一个局部内部类People并在其内部定义一个实例变量、实例方法、常量、最终方法和静态常量。

在main()方法中(作用域内)创建局部内部类People对象,然后通过其对象访问局部内部类People中的成员。

请观察程序运行结果。

代码:

Main类:

结果:

从运行结果来看,我们可以通过局部内部类对象直接访问到其成员。

4.通过局部内部类类名访问其静态常量

演示:

请在Main类中定义一个局部内部类People并在其内部定义一个静态常量。

在main()方法中(作用域内)通过局部内部类类名访问局部内部类People中的静态常量。

请观察程序运行结果。

代码:

Main类:

结果:

从运行结果来看,局部内部类中的静态常量可以直接通过其类名直接访问到。

总结

  • 作用域内不能直接访问局部内部类中的成员。
  • 作用域内要想访问到局部内部类里面的成员,必须先创建其局部内部类对象,然后再通过局部内部类对象对其成员进行访问。
  • 局部内部类中的静态常量可以直接通过局部内部类类名访问。

至此,Java中作用域内访问局部内部类成员相关内容讲解先告一段落,更多内容请持续关注。

附:类学习资料

全栈2019”Java第三十六章:类

全栈2019”Java第三十七章:类与字段

全栈2019”Java第三十八章:类与方法

全栈2019”Java第三十九章:构造函数、构造方法、构造器

全栈2019”Java第四十章:this关键字

全栈2019”Java第四十一章:static关键字

全栈2019”Java第四十二章:静态代码块与初始化顺序

全栈2019”Java第四十三章:封装

全栈2019”Java第四十四章:继承

全栈2019”Java第四十五章:super关键字

全栈2019”Java第四十六章:继承与字段

全栈2019”Java第四十七章:继承与方法

全栈2019”Java第四十八章:重写方法Override

全栈2019”Java第四十九章:重载与重写对比详解

全栈2019”Java第五十章:继承与构造方法详解

全栈2019”Java第五十一章:继承与final关键字详解

全栈2019”Java第五十二章:继承与初始化详解

全栈2019”Java第五十三章:向上转型和向下转型详解

附:抽象类学习资料

全栈2019”Java第五十四章:多态详解

全栈2019”Java第五十五章:方法的静态绑定与动态绑定

全栈2019”Java第五十六章:多态与字段详解

全栈2019”Java第五十七章:多态与构造方法详解

全栈2019”Java第五十八章:多态中方法返回类型可以是子类类型

全栈2019”Java第五十九章:抽象类与抽象方法详解

附:接口学习资料

全栈2019”Java第六十章:如何定义接口

全栈2019”Java第六十一章:如何实现接口?

全栈2019”Java第六十二章:接口与常量详解

全栈2019”Java第六十三章:接口与抽象方法详解

全栈2019”Java第六十四章:接口与静态方法详解

全栈2019”Java第六十五章:接口与默认方法详解

全栈2019”Java第六十六章:抽象类与接口详细对比

答疑

如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。

上一章

“全栈2019”Java第九十六章:抽象局部内部类详解

下一章

“全栈2019”Java第九十八章:局部内部类访问作用域成员详解

学习小组

加入同步学习小组,共同交流与进步。

  • 方式一:关注头条号Gorhaf,私信“Java学习小组”。
  • 方式二:关注公众号Gorhaf,回复“Java学习小组”。

全栈工程师学习计划

关注我们,加入“全栈工程师学习计划”。

版权声明

原创不易,未经允许不得转载!

了解更多
举报
评论 0