- 浏览: 292787 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (271)
- jBPM (0)
- WebService (10)
- Flex (0)
- RubyOnRails (1)
- Java (56)
- J2EE (2)
- SQL (5)
- Tapestry (2)
- Dom4j (1)
- Japanese (9)
- English (4)
- JavaScript (3)
- Ajax (12)
- MyDiary (3)
- Log4j (2)
- XML (3)
- UML (1)
- Struts (3)
- Others (8)
- Funny (7)
- ProjectManagement (3)
- Tomcat (1)
- Servlet&Jsp (6)
- Html (4)
- iBATIS (1)
- EasyMock (1)
- Astronomy (1)
- Biology (1)
- Food and Health (0)
最新评论
-
yet8telecom:
good
js数组 sort方法的分析 转自NorthSnow HOME -
imain:
最后的结果是:1,5,3,4,6,2
js数组 sort方法的分析 转自NorthSnow HOME -
lixiaoqing:
最后一个输出结果应该是3,5,1,4,2,6 吧?
js数组 sort方法的分析 转自NorthSnow HOME -
benxiaohai1212:
请问如果输入参数是数组array类型,怎么处理?谢谢!
实例讲解:JAVA SOAP技术 -
netdisk:
这个建议可以用在电子文档管理上
软件文档管理指南
|
|||||||||
<!--.unnamed1 { padding-top: 6px; padding-right: 6px; padding-bottom: 6px; padding-left: 6px}--> 提起Java内部类(Inner Class )可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class ),关于这两者的区别与联系,在下文中会有对比。内部类从表面上看,就是在类中又定义了一个类(下文会看到,内部类可以在很多地方定义),而实际上并没有那么简单,乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了解,你会发现Java的设计者在内部类身上的确是用心良苦。学会使用内部类,是掌握Java高级编程的一部分,它可以让你更优雅地设计你的程序结构。下面从以下几个方面来介绍:
同时,我们也发现了在外部类作用范围之外得到内部类对象的第一个方法,那就是利用其外部类的方法创建并返回。上例中的cont()和dest()方法就是这么做的。那么还有没有别的方法呢?当然有,其语法格式如下:
注意在创建非静态内部类对象时,一定要先创建起相应的外部类对象。至于原因,也就引出了我们下一个话题——
对刚才的例子稍作修改:
修改的部分用蓝色显示了。在这里我们给Goods类增加了一个private成员变量valueRate,意义是货物的价值系数,在内部类Content的方法value()计算价值时把它乘上。我们发现,value()可以访问valueRate,这也是内部类的第二个好处——一个内部类对象可以访问创建它的外部类对象的内容 ,甚至包括私有变量!这是一个非常有用的特性,为我们在设计时提供了更多的思路和捷径。要想实现这个功能,内部类对象就必须有指向外部类对象的引用。Java编译器在创建内部类对象时,隐式的把其外部类对象的引用也传了进去并一直保存着。这样就使得内部类对象始终可以访问其外部类对象,同时这也是为什么在外部类作用范围之外向要创建内部类对象必须先创建其外部类对象的原因。 有人会问,如果内部类里的一个成员变量与外部类的一个成员变量同名,也即外部类的同名成员变量被屏蔽了,怎么办?没事,Java里用如下格式表达外部类的引用:
有了它,我们就不怕这种屏蔽的情况了。
和普通的类一样,内部类也可以有静态的。不过和非静态内部类相比,区别就在于静态内部类没有了指向外部的引用。这实际上和C++中的嵌套类很相像了,Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用这一点上,当然从设计的角度以及以它一些细节来讲还有区别。 除此之外,在任何非静态内部类中,都不能有静态数据,静态方法或者又一个静态内部类(内部类的嵌套可以不止一层)。不过静态内部类中却可以拥有这一切。这也算是两者的第二个区别吧。
是的,Java内部类也可以是局部的,它可以定义在一个方法甚至一个代码块之内。
上面就是这样一个例子。在方法dest中我们定义了一个内部类,最后由这个方法返回这个内部类的对象。如果我们在用一个内部类的时候仅需要创建它的一个对象并创给外部,就可以这样做。当然,定义在方法中的内部类可以使设计多样化,用途绝不仅仅在这一点。 下面有一个更怪的例子:
你不能在if之外创建这个内部类的对象,因为这已经超出了它的作用域。不过在编译的时候,内部类TrackingSlip和其他类一样同时被编译,只不过它由它自己的作用域,超出了这个范围就无效,除此之外它和其他内部类并没有区别。
java的匿名内部类的语法规则看上去有些古怪,不过如同匿名数组一样,当你只需要创建一个类的对象而且用不上它的名字时,使用内部类可以使代码看上去简洁清楚。它的语法规则是这样的:
下面接着前面继续举例子:
这里方法cont()使用匿名内部类直接返回了一个实现了接口Contents的类的对象,看上去的确十分简洁。 在java的事件处理的匿名适配器中,匿名内部类被大量的使用。例如在想关闭窗口时加上这样一句代码:
有一点需要注意的是,匿名内部类由于没有名字,所以它没有构造函数(但是如果这个匿名内部类继承了一个只含有带参数构造函数的父类,创建它的时候必须带上这些参数,并在实现的过程中使用super关键字调用相应的内容)。如果你想要初始化它的成员变量,有下面几种方法:
java内部类有什么好处?为什么需要内部类? 首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你可以建一个内部类实现这个接口。由于内部类对外部类的所有内容都是可访问的,所以这样做可以完成所有你直接实现这个接口的功能。 不过你可能要质疑,更改一下方法的不就行了吗? 的确,以此作为设计内部类的理由,实在没有说服力。 真正的原因是这样的,java中的内部类和接口加在一起,可以的解决常被C++程序员抱怨java中存在的一个问题——没有多继承。实际上,C++的多继承设计起来很复杂,而java通过内部类加上接口,可以很好的实现多继承的效果。 本文的目的只是向大家介绍一下内部类的概念以及使用方法,在后续文章里,将会针对本文中的内容举更多具体的例子,以及介绍如何使用内部类构建一个Applicaton Framework。 |
发表评论
-
创建文件夹,用系统日期命名。
2006-06-08 17:46 891import java.util.*;import java. ... -
将不同目录下的文件,复制到同一个目录下。
2006-06-09 08:50 894import java.io.*;public class F ... -
字符串转换和toString()、字符截取charAt()、一次截取多个字符getChars()
2006-06-09 09:19 1284class Person{ String name; Stri ... -
对字符串数组进行排序,在冒泡法排序中使用compareTo()方法确定排序的顺序。
2006-06-09 11:13 1273//A bubble sort for Strings.pub ... -
使用substring()方法完成字符串替换.
2006-06-09 13:38 891/* 利用substring()方法可以截取字符串,它有两种形 ... -
JAVA编程规范
2006-06-09 16:51 950作者:李小敏 本文选自:IBM DW中国 2002年08月21 ... -
通过调用System.getProperty()方法来获得不同环境变量的值。
2006-06-10 20:11 950class ShowUserDir{ public stati ... -
使用TreeSet()进行排序
2006-06-13 18:41 891/* TreeSet为使用树来进行存储的Set接口提供了一个工 ... -
使用LinkedList存储信箱地址
2006-06-13 18:51 805/* 除了在类集中存储用户定义的类之外,关于下面程序的另一个重 ... -
HashMap用法 示例
2006-06-14 08:48 1209/* 程序开始创建了一个散列映射,然后将名字的映射增加到平衡表 ... -
TreeMap用法 示例
2006-06-14 09:14 2115/* TreeMap类通过使用树来实现Map接口.TreeMa ... -
TreeSet() 类逆向排序(实现compare()方法以便按正常顺序的逆向进行操作)。
2006-06-14 10:28 2060/* 仔细观察实现Comparator并覆盖compare() ... -
TreeMap 排序
2006-06-14 15:34 2050/* 比较函数类TComp比较两个包含姓和名的字符串。它首先比 ... -
Arrays类中的一些方法 示例
2006-06-15 08:48 836//Demonstrate Arrays.import jav ... -
Vector Enumeration 示例
2006-06-15 09:47 985//Demonstrate various vector op ... -
堆栈(Stack)示例
2006-06-15 10:44 790//Demonstrate the Stack class.i ... -
Hashtable 示例
2006-06-15 13:19 883//Demonstrate a Hashtable.impor ... -
Properties 示例
2006-06-15 14:48 822/* 为了更大的灵活性,当构造一个属性(Properties) ... -
Properties的store()方法和load()方法 示例
2006-06-15 15:31 1426/* Properties的一个最有用的方面是可以利用stor ... -
StringTokenizer(字符串标记) 示例
2006-06-15 16:56 824//Demonstrate StringTokenizer.i ...
相关推荐
共分16章:第1章 初识Java,第2章 初识对象和简单,第3章运算符、表达式和语句,第4章类与对象,第5章子类与继承,第6章,第7章 数组与枚举,第8章 内部类与异常,第9章 常用实用类,第10章 输入、输出流等
第六章:接口与内部类; 第七章:集合的应用; 第八章:异常和反射; 第九章:初识AWT和Swing; 第十章:Swing中的常用组件; 第十一章:线程; 第十二章:I/O流; 第十三章:Swing中的表格; 第十四章:桌面程序...
3.8 内部类 3.9 使用Java的文档注释 第4章 面向对象(下) 4.1 类的继承 4.2 抽象类与接口 4.3 对象的多态性 4.4 异常 4.5 包 4.6 访问控制 4.7 使用jar文件 第5章 多线程 5.1 如何创建与理解线程 5.2 多线程的同步 ...
Lambda表达式是为了让我们的代码更加简洁,增强...这里是在使用Comparator接口实现排序时使用的,使用匿名内部类,重写方法,大概四五行的样子 使用Lambda表达式的代码: 先来看我们正常情况下用Lambda表达式写: Arr
第1章 初识Java 3 1.1 Java简介 3 1.1.1 Java的不同平台 3 1.1.2 Java发展的历程 3 1.1.3 Java的特点 4 1.2 安装开发工具包 5 1.2.1 下载JDK 5 1.2.2 安装JDK 6 1.2.3 安装后Java目录的解读 7 1.3...
资源名称:深入JVM内核—原理、诊断与优化 教程内容:课程简介:第一周初识JVMJVM分类Java语言规范JVM规范介绍JVM的基本知识和发展历史,并介绍了Java语言规范和JVM规范。第二周JVM运行机制简介堆、栈、方法区等JVM...
介绍JVM的内部结构、启动流程以及内存模型。并介绍JVM字节码的执行方式。 第三课 常用JVM参数 堆的分配参数 栈分配及实例讲解 server与client模式 调试跟踪参数 介绍常用的JVM参数,包括内存分配、堆栈分配、...
第5章讲解了Android源码中常用的类,如sp、wp、RefBase、Thread类、同步类、Java中的Handler类以及Looper类。这些类都是Android中最常用和最基本的,只有掌握这些类的知识,才 能在分析后续的代码时游刃有余。 ...
主要技术包括:java基础语法、java⾯向对象(类、对象、封装、继承、多态、 抽象类、接⼝、常见类、内部类、常见修饰符等) 、异常、集合、⽂件、IO、 MYSQL(基本SQL语句操作、多表查询、⼦查询、存储过程、事务、...
这是因为某个servlet(服务器端Java程序)在应用户的请求而首次调入内存执行之后将一直驻留在内存里,对同一个servlet的后续请求不用再对这个servlet的类进行实例化,因此响应速度更快。 可是,servlet也存在一个...
递归直通车帝龟出世寻欢初识帝龟初现端倪来龙去脉迷失的帝...在Java中具体表现为方法在方法体内部调用方法本身。 “帝龟”是个小懒龟,每次做事情都会留一些,然后再回来反序地把这些剩下的事情一一做完。再打个不太恰
2.2.2 初识Thrift 33 2.3 小结 34 第3章 NoSQL接口与交互 36 3.1 没了SQL还剩什么 36 3.1.1 存储和访问数据 37 3.1.2 MongoDB数据存储与访问 37 3.1.3 MongoDB数据查询 41 3.1.4 Redis数据存储与访问 43 ...
1.5 初识MongoDB 1.5.1 MongoDB的特点 1.5.2 数据模型 1.5.3 扩展性 1.5.4 功能性 1.5.5 速度快 1.5.6 简便的管理 1.5.7 使用场合 1.6 本章小结 第2章 MongoDB基本原理与安装 2.1 数据库...