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

188 阅读4分钟
原文链接: www.toutiao.com

难度

初级

学习时间

30分钟

适合人群

零基础

开发语言

Java

开发环境

  • JDK v11
  • IntelliJ IDEA v2018.3

提示

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

1.局部内部类

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

演示:

局部内部类。

代码:

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

2.局部内部类定义成员

当然了,你还可以和普通类一样定义成员:

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

3.局部内部类定义构造方法

你也可以定义构造方法:

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

4.创建局部内部类对象

最重要的是,你还可以创建局部内部类对象:

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

5.局部内部类调用成员

除了可以定义局部内部类、创建局部内部类对象以外,你还可以想普通类一样去调用你的成员。

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

结果:

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

6.局部内部类不能定义静态成员

局部内部类不是你想定义什么都可以的,静态成员不能定义。

演示:

请在main()方法中定义一个局部内部类Student。

在局部内部类Student类中定义静态成员。

在main()方法中通过类名调用其静态成员。

请观察程序运行结果。

代码:

Main类:

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

结果:

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

错误信息:

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

文字版:

/Users/admin/Workspace/Java/Hello/src/main/Main.javaError:(25, 24) java: 内部类Student中的静态声明非法 修饰符 'static' 仅允许在常量变量声明中使用Error:(53, 32) java: 内部类Student中的静态声明非法 修饰符 'static' 仅允许在常量变量声明中使用Error:(60, 38) java: 内部类Student中的静态声明非法 修饰符 'static' 仅允许在常量变量声明中使用

这个错误是说内部类里面用static修饰的只能是常量,既然常量都用static修饰,那么这个常量就是静态常量。

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

结果:

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

由此可见,内部类和局部内部类里面静态成员只能定义静态常量。

7.局部内部类对象作为方法返回值返回

既然局部内部类可以定义在方法体内部,那么可以不可以返回出来呢?我们来试试。

演示:

请在Main类中定义一个getStudent()方法,然后在getStudent()方法体中定义一个局部内部类Student。

getStudent()方法返回类型是Student类,返回值是创建Student类对象。

在main()方法中调用getStudent()方法。

请观察程序运行结果。

代码:

Main类:

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

结果:

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

错误信息:

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

文字版:

/Users/admin/Workspace/Java/Hello/src/main/Main.javaError:(18, 20) java: 找不到符号 符号: 类 Student 位置: 类 main.MainError:(7, 9) java: 找不到符号 符号: 类 Student 位置: 类 main.Main

这里得说一下,局部内部类的作用域。

首先,我们来看局部内部类Student定义的位置:

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

它定义在getStudent()方法的内部,局部内部类的作用域就是这个getStudent()方法的方法体里面。

局部内部类只能在作用域里面可见。

什么意思?就是说,局部内部类定义在方法里面就只有方法里面才能访问,出方法以外就不能访问。

拿上面这个例子来说,就是Student类属于getStudent()方法,不属于Main类。

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

出了这个getStudent()方法,谁也不能访问。所以,方法不能将局部内部类作为返回值类型,更不能将局部内部类对象作为返回值。但是,继承和实现(implements)情况又不一样了,后面再讲。

总结

  • 在任何作用域中定义的类都称之为局部内部类。
  • 内部类和局部内部类里面静态成员只能定义静态常量。
  • 局部内部类只能在作用域里面可见。

至此,Java中局部内部类详解相关内容讲解先告一段落,更多内容请持续关注。

答疑

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

上一章

“全栈2019”Java第九十三章:内部类应用场景(迭代器设计模式)

下一章

“全栈2019”Java第九十五章:可以定义静态局部内部类吗?

学习小组

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

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

全栈工程师学习计划

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

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

版权声明

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