`

Java编程那些事儿71——内部类简介

阅读更多

Java编程那些事儿71——内部类简介

陈跃峰

出自:http://blog.csdn.net/mailbomb

8.10 内部类(Inner Class)

内部类是Java语言中的一种特殊的语法,简单的来说,就是在一个类的内部再声明一个类,这些声明在类内部的类就被称作内部类。在实际声明时,内部类可以声明在类的内部、类的方法内部,也可以声明在类的构造方法内部,内部类声明的语法格式和一般类的声明一样,只是内部类声明时可以使用static修饰符进行修饰。

对于内部类的相关使用,本部分不做深入的介绍,只是进行简单的说明,辅助建立内部类的概念,能够进行一些基本的使用。

下面是一个简单的内部类的示例代码:

/**

* 内部类基本使用示例代码

*/

public class OutClass {

int i = 0;

public class InnerClass{

public void test(){

i++;

}

}

}

在该示例代码中,类InnerClass声明在了类OutClass的内部,所以InnerClass被称为内部类,而OutClass则被称为InnerClass的外部类。

该代码编译以后,将生成两个class文件,一个是OutClass.class,另外一个是OutClass$InnerClass.class。这里需要说明的是,内部类也被编译成一个独立的类文件,类文件的名称为:外部类类名$内部类类名.class

在内部类中,可以很方便的访问外部类的属性i,而外部类不能直接引用内部类中的属性和方法,语法中提供了一套专门的格式来访问内部类中的属性和方法,这些语法这里就不作介绍了。

内部类是Java语言诞生以后新增的一个语法,设计该语法的初衷主要有两个:

1、隐藏内部类的实现

也就是将只有被外部类使用的功能隐藏在内部类的内部,其它类访问这个内部类时的语法会比较复杂,从而在一定程度了避免了其它类对于内部类的访问。

2、内部类可以访问外部类的所有属性和方法,避免了参数传递

在内部类中,可以访问外部类中的所有属性和方法,private访问控制符修饰的属性和方法也可以被内部类访问,这样将方便内部类的编写,避免了参数传递,也减少了外部类需要向其它类开放的属性和方法的数量。

当然,内部类除了带来一系列的好处以外,还带来了一系列的不足,主要的不足有如下几点:

1、增加了语法的复杂度

在一个类的内部声明一个类,使Java语言的复杂度增加了很多,也在一定程度上损害了Java语言的编程风格,同时使阅读代码的难度大幅度的增加。

2、使整个项目的结构变得复杂

内部类通过增加每个类的复杂度,使得项目的结构变得更加复杂,而且没有原来的结构那么清晰。

当前内部类的语法在以下编程技术中的应用比较多:

1、图形用户界面编程中的事件处理

2Java语言API中部分功能类的实现

综合以上说明,在实际的开发过程中,如果不是十分必要,不建议编写内部类,对于内部类实现的功能可以使用类和类之间的调用进行实现,这样可以保留Java语言清晰的编程风格。

最后需要特别说明的是:在Java语法中,一个源代码内部可以编写多个类,例如:

/**

* 一个类内部声明多个类

*/

public class TwoClassInOneFile {

int n = 0;

public void method(){}

}

class AnotherClass {

char c;

public void t(){}

}

这样的源代码,在编译时,将生成两个独立的class的文件:TwoClassInOneFile.classAnotherClass.class,这样的结构不是内部类。

在实际项目中,不推荐进行这样的编码,主要原因是不方便类源代码的查找,而推荐每个源文件内部只声明一个类的形式。

分享到:
评论

相关推荐

    Java编程那些事儿

    ### Java编程那些事儿 #### 程序设计概述与核心要素 **程序设计**,作为一项专业技能,涉及将现实世界的问题转化为计算机可执行的指令序列。本文将围绕《Java编程那些事儿》这本书的部分内容,深入浅出地探讨程序...

    java初级入门

    **1.1 Java编程那些事儿1——序言** 本章节主要介绍了作者撰写这本书的目的和背景,旨在帮助编程初学者更好地理解和掌握Java编程的基础知识。书中强调了通过通俗易懂的语言来解释复杂的概念,并计划覆盖以下核心...

    21天学通java

    3. **《JAVA编程那些事儿》电子书**: - 通过讲述真实的编程故事来传授经验和教训,有助于开发者避免常见错误并提高工作效率。 ### 总结 以上资源覆盖了Java编程的各个方面,从基础知识到高级主题,从理论到实践...

    java 程序员上班那点事儿

    【标签】:“java 程序员”标签明确指出了内容的核心——与Java编程语言和Java程序员的工作相关。Java是一种广泛使用的面向对象的编程语言,用于开发跨平台的应用程序,尤其在企业级应用中占有重要地位。 【压缩...

    Java程序员上班那点事儿

    ### Java程序员上班那点事儿——理解与解析 #### 前言 《Java程序员上班那点事儿》一书深入探讨了Java程序员职业生涯中的各种实际问题,包括但不限于职业规划、技能匹配、行业现状等方面。本文将从书中提到的核心...

    租房系统静态页面供java初学者用来学习

    【标题】:“租房系统静态页面供java初学者用来学习” 这个标题揭示了资源的主要内容,即一个用于教学目的的租房系统静态页面。对于Java初学者来说,这是一个理想的实践项目,可以帮助他们更好地理解和应用Web开发...

    程序员那点儿事儿

    标题和描述中的知识点主要围绕着IT行业的核心领域——软件开发,特别是从个人角度出发,探讨了成为一名合格且优秀的程序员所需要具备的素质、态度以及必备的知识体系。以下是对这些知识点的详细解析: ### 一、软件...

    TRISHA:机器人教育那些事儿! Penn Apps 2014 年秋季

    机器人教育那些事儿! Penn Apps 2014 年秋季 作者:迪恩·威廉米、索耶·布鲁克斯、卡罗琳·沙利文、克里斯蒂娜·索里斯 TRISHA(Android 上的学校和家庭智能教学机器人)是一款旨在帮助学生学习编程和机器人技术的...

    庄晓丹:基于Clojure构建的移动云平台——我的Clojure实践思考

    Clojure是一种现代的Lisp方言,运行在Java虚拟机(JVM)之上,也被编译为JavaScript用于浏览器端。由于其函数式编程的特点和并发处理能力,Clojure在构建可靠的、易于扩展的分布式系统方面具有优势。 - AVOSCloud...

    flink-1.12.0-bin-scala_2.11.tgz

    Scala是一种多范式的编程语言,与Java API相比,它的语法更加简洁,且更适合函数式编程。 8. **部署与运行**:Flink可以本地运行,也可以在分布式环境中如YARN、Kubernetes或独立集群部署。"bin"目录下通常包含启动...

Global site tag (gtag.js) - Google Analytics