- 浏览: 463580 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (178)
- linux (25)
- java (31)
- eclipse (3)
- web (19)
- database (11)
- framework (7)
- spring (1)
- jbpm (1)
- error and solution (3)
- struts2 (3)
- hibernate (12)
- other (15)
- ubuntu (2)
- build tools (1)
- 服务器配置 (3)
- extjs (2)
- ssl相关 (1)
- 项目管理 (0)
- 软件测试 (0)
- java maven2 (2)
- Windows Server 2003 (1)
- glassfish (1)
- build tools,maven (2)
- Heritrix3 (1)
最新评论
-
lbs1026:
您好,卸载后怎么再装上去呢?
java中dll文件的加载和卸载。 -
mp19901204:
请教下,能通过js播放指定的影片吗。不刷新网页,用js直接调用 ...
Flv播放器 Vcastr3.0的用法参考 -
wiflish:
hanmiao 写道试了第壹個,好用。
使maven2在下载依赖包的同时下载其源代码包。 -
hanmiao:
试了第壹個,好用。
使maven2在下载依赖包的同时下载其源代码包。 -
chuanwang66:
请问Heritrix 3.1.0 你是怎么配置进Eclipse ...
Heritrix3.1.0RC1使用Cookie不能自动登录问题的一个解决办法
- 第一次见面
publicinterfaceContents { publicinterface Destination { publicclass Goods { protectedclass GDestination implements Destination { public Destination dest(String s) { class TestGoods { |
同时,我们也发现了在外部类作用范围之外得到内部类对象的第一个方法,那就是利用其外部类的方法创建并返回。上例中的cont()和dest()方法就是这么做的。那么还有没有别的方法呢?当然有,其语法格式如下:
outerObject=new outerClass(Constructor Parameters); outerClass.innerClass innerObject=outerObject.new InnerClass(Constructor Parameters); |
注意在创建非静态内部类对象时,一定要先创建起相应的外部类对象。至于原因,也就引出了我们下一个话题——
- 非静态内部类对象有着指向其外部类对象的引用
对刚才的例子稍作修改:
publicclass Goods { private valueRate=2; private class Content implements Contents { protected class GDestination implements Destination { public Destination dest(String s) { |
有人会问,如果内部类里的一个成员变量与外部类的一个成员变量同名,也即外部类的同名成员变量被屏蔽了,怎么办?没事,Java里用如下格式表达外部类的引用:
outerClass.this |
有了它,我们就不怕这种屏蔽的情况了。
- 静态内部类
和普通的类一样,内部类也可以有静态的。不过和非静态内部类相比,区别就在于静态内部类没有了指向外部的引用。这实际上和C++中的嵌套类很相像 了,Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用这一点上,当然从设计的角度以及以它一些细节来讲还有区别。
除此之外,在任何非静态内部类中,都不能有静态数据,静态方法或者又一个静态内部类(内部类的嵌套可以不止一层)。不过静态内部类中却可以拥有这一切。这也算是两者的第二个区别吧。
- 局部内部类
是的,Java内部类也可以是局部的,它可以定义在一个方法甚至一个代码块之内。
publicclass Goods1 { public staticvoid main(String[] args) { |
上面就是这样一个例子。在方法dest中我们定义了一个内部类,最后由这个方法返回这个内部类的对象。如果我们在用一个内部类的时候仅需要创建它的一个对象并创给外部,就可以这样做。当然,定义在方法中的内部类可以使设计多样化,用途绝不仅仅在这一点。
下面有一个更怪的例子:
publicclass Goods2{ public void track() { internalTracking(true); } public staticvoid main(String[] args) { |
你不能在if之外创建这个内部类的对象,因为这已经超出了它的作用域。不过在编译的时候,内部类TrackingSlip和其他类一样同时被编译,只不过它由它自己的作用域,超出了这个范围就无效,除此之外它和其他内部类并没有区别。
- 匿名内部类
java的匿名内部类的语法规则看上去有些古怪,不过如同匿名数组一样,当你只需要创建一个类的对象而且用不上它的名字时,使用内部类可以使代码看上去简洁清楚。它的语法规则是这样的:
new interfacename(){......}; 或 new superclassname(){......}; |
下面接着前面继续举例子:
public class Goods3 { publicContents cont(){ returnnewContents(){ private int i = 11; public int value() { return i; } }; } } |
这里方法cont()使用匿名内部类直接返回了一个实现了接口Contents的类的对象,看上去的确十分简洁。
在java的事件处理的匿名适配器中,匿名内部类被大量的使用。例如在想关闭窗口时加上这样一句代码:
frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); |
有一点需要注意的是,匿名内部类由于没有名字,所以它没有构造函数(但是如果这个匿名内部类继承了一个只含有带参数构造函数的父类,创建它的时候必须带上 这些参数,并在实现的过程中使用super关键字调用相应的内容)。如果你想要初始化它的成员变量,有下面几种方法:
- 如果是在一个方法的匿名内部类,可以利用这个方法传进你想要的参数,不过记住,这些参数必须被声明为final。
- 将匿名内部类改造成有名字的局部内部类,这样它就可以拥有构造函数了。
- 在这个匿名内部类中使用初始化代码块。
- 为什么需要内部类?
java内部类有什么好处?为什么需要内部类?
首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你 可以建一个内部类实现这个接口。由于内部类对外部类的所有内容都是可访问的,所以这样做可以完成所有你直接实现这个接口的功能。
不过你可能要质疑,更改一下方法的不就行了吗?
的确,以此作为设计内部类的理由,实在没有说服力。
真正的原因是这样的,java中的内部类和接口加在一起,可以的解决常被C++程序员抱怨java中存在的一个问题——没有多继承。实际上,C++的多继承设计起来很复杂,而java通过内部类加上接口,可以很好的实现多继承的效果。
本文的目的只是向大家介绍一下内部类的概念以及使用方法,在后续文章里,将会针对本文中的内容举更多具体的例子,以及介绍如何使用内部类构建一个Applicaton Framework。
发表评论
-
《架构之美》笔记
2013-12-04 21:02 0美丽架构的特性: 1、概念完整性(来自于处理问题的一致性) ... -
【转】生产环境下JAVA进程高CPU占用故障排查
2013-11-01 16:36 1443转自: http://blog.chinaunix.net/ ... -
在maven生成eclipse文件时,使项目支持wtp的方式
2011-12-18 00:37 1255使项目能支持wtp: maven eclipse:ec ... -
解决Maven编译出现警告时,就提示编译失败的问题
2011-08-18 19:42 2126解决Maven编译出现警告时,就提示编译失败的问题 原因:m ... -
进入Glassfish3管理控制台太慢的解决办法
2011-07-07 14:53 1694解决办法:关闭Glassfish的网络链接。 配置方法 ... -
OSGi4.2规范的Bundle Manifest Headers列表
2010-01-22 17:40 2496OSGi4.2规范的Bundle Manifest ... -
VisualVM远程监控
2009-11-18 17:28 2633VisualVM是集成了多个JDK命令工具的一个可视化 ... -
maven-war插件打包war时,过滤掉指定文件或目录的配置方法
2009-09-09 11:53 17162<plugin> <artifac ... -
quartz中的CronTriggers表达式含义
2009-09-08 10:58 1047http://www.opensymphony.com/qua ... -
Spring-Security 2 中从数据库中读取权限的实现方式
2009-07-22 21:29 3562security的配置片段: < ... -
关于Bad version number in .class file错误
2009-04-01 10:54 1109出现Bad version number in .class ... -
maven报错。
2009-03-22 00:07 1660错误信息:[INFO] Required goal not f ... -
java处理视频
2009-01-12 22:42 3879目前绝大多数视频网站使用的格式是flv。格式可以任意位置播放, ... -
Xdoclet的标签及用法
2006-05-11 11:43 892参照链接: Xdoclet的标签及用法 -
原创:eclipse反编译插件Jadclipse介绍
2006-05-16 15:23 912jadclips插件网站:http://jadclipse.s ... -
ant中宏定义例子
2006-05-18 16:47 1604一个ant中用于编译的宏定义例子: 1 ... -
Google Web Toolkit
2006-05-22 14:12 846Google Web Toolkit (GWT) is a J ... -
[转]java基本类装入异常
2006-05-24 16:24 1142原文链接:http://www-128.ibm.co ... -
安装和卸载Mysql的windows系统服务
2006-05-26 15:20 1157安装mysql的windows系统服务: ${mysql.h ... -
通过java获取系统环境变量
2006-07-03 17:11 3673代码如下: 1 public static ...
相关推荐
Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不需要定义一个单独的类的情况下创建类的实例。这在处理回调、事件监听、单例模式以及其他需要短时间内定义一个简单类的情况时非常有用。本篇文章将...
Java 中的内部类和匿名类 Java 中的内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在 C++ 里也有,那就是嵌套类(Nested Class)。内部类从表面上看,就是在类中又定义了一个类,而实际上并没有那么...
Java 中的匿名内部类总结 Java 中的匿名内部类是一种特殊的内部类,它没有名字,因此也称为匿名类。匿名内部类是一种简洁的编程方式,能够简化代码编写,但它也有一些限制和特点。 匿名内部类的定义 匿名内部类是...
在Java编程语言中,内部类和匿名内部类是两种特殊类型的类,它们为代码的组织和功能实现提供了独特的灵活性。本教程"Java4Android 35_内部类和匿名内部类"深入探讨了这两个概念,旨在帮助开发者更好地理解和运用它们...
2. **内部匿名类**:内部匿名类没有名字,通常用于创建一次性使用的类。它们常用于实现接口或继承一个类,特别是在事件处理、回调机制和简短的辅助类中。创建匿名内部类的方式是在实例化类时直接定义类的实现,不...
16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名...
Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不定义单独类的情况下创建对象。这种类没有名字,通常用作一次性实现某个接口或继承某个类的需求。在Java编程中,匿名内部类主要用于事件处理、回调...
Java 1.1 引入了内部类和匿名类,这两种特性极大地增强了代码的灵活性和可读性。内部类是指定义在另一个类内部的类,它可以是静态的或非静态的,根据其是否需要访问外部类的实例成员来区分。静态内部类与普通类的...
Java内部类是Java语言特性中一个独特而强大的部分,它允许在一个类的内部定义另一个类。内部类可以访问外部类的所有成员,包括私有成员,这使得内部类在实现某些特定设计模式时非常有用。本篇文章将深入探讨Java中的...
- 不同类型的内部类(静态内部类、成员内部类、局部内部类和匿名内部类)的区别和用法 - 内部类的优缺点以及使用场景 这些目标将帮助你理解和掌握内部类的概念,并能够在适当的时候使用内部类来解决问题...
本文介绍内部类和匿名类在Java代码中是如何具体工作的,如何正确使用它们,以及如何避免一些常见的错误。 下面来看看这些特性具体是如何工作的? 1、非静态内部类 如果内部类没有指定static修饰符,拥有对...
Java 中的嵌套类和内部类是指在一个类的内部定义另一个类,这种类称为嵌套类(nested classes)。嵌套类有两种类型:静态嵌套类和非静态嵌套类。静态嵌套类使用很少,非静态嵌套类也即被称作为内部类(inner)。嵌套...
Java内部类是Java语言中的一种特殊类别,它是指定义在另外一个类内部的类。内部类可以访问外部类的所有成员变量和方法,包括私有的变量和方法。内部类可以分为四种:成员内部类、静态嵌套类、方法内部类和匿名内部...
Java 基础第七章内部类与异常类 Java 语言支持在一个类...Java 中的内部类和异常处理机制提供了一种灵活和强大的方式来组织和处理代码。通过使用内部类和异常处理,我们可以编写更加robust、可靠和高效的 Java 程序。
内部类主要分为四种类型:静态内部类、成员内部类、局部内部类和匿名内部类。 1. 静态内部类(Static Inner Class) 静态内部类与普通的类类似,只是它们定义在外部类中,并且前面带有 `static` 关键字。它们不会...
Java中的内部类和匿名类是Java语言的一个特色特性,它们为程序员提供了更加灵活和强大的代码组织方式。内部类,也称为嵌套类,可以分为两种类型:静态内部类和非静态内部类。非静态内部类与外部类之间存在紧密的关联...
内部类是Java编程语言中一个独特且强大的特性,它允许我们在一个类的内部定义另一个类。内部类可以是静态的,也可以是非静态的,而匿名内部类则是一种没有名字的内部类,通常用于快速实现简单的回调或者接口实现。这...
根据定义和作用域的不同,Java内部类主要分为四类: 1. **嵌套顶级类(Nested Top-Level Classes)**:这种内部类类似于普通的类,但它们被定义在另一个类的内部。它们没有访问外部类的实例变量或方法的能力,除非...
掌握java四中匿名内部类
Java内部类主要包括以下几种类型:成员内部类(非静态内部类)、静态内部类(也称为静态嵌套类)、局部内部类和匿名内部类。 - **成员内部类**:这种类型的内部类是定义在外部类的一个成员位置上,它可以访问外部类...