1. 类中还可以再定义类,称之为“内嵌类(Inner Class)或嵌套类(Nested)”。非静态的内嵌类可以分为3种:成员内嵌类(Member Inner Class)、区域内嵌类(Local Inner Class)与匿名内嵌类(Anonymous Inner Class)。内嵌类的主要目的不是对外部隐藏类的存在性。
2. 使用内嵌类的几个好处:其一是内嵌类可以直接存取其所在类中的私用成员;其二是当某个Slave类完全只服务于一个Master类时,可以将之设定为内部类,这样使用Master类的人就不用知道Slave的存在;再者,像在“静态工厂”(Static Factory)模式中,对调用静态方法的对象隐藏返回对象的实现细节或产生方式。
3. 成员内部类:可以使用public、protected、private来修饰其存取权限。文件管理方面,成员内嵌类在编译完成之后,所产生的文件名称为“外部类名称$内部类名称.class"。
4. 区域内嵌类:使用与成员内嵌类类似,区域内嵌类定义于一个方法中,类的可视范围与生成的对象仅限于该方法中。
5. 匿名内嵌类:匿名内嵌类可以不声明类名称,而使用new直接产生一个对象,它可以是继承某个类或是实现某个接口。其声明方式如下:
new [类或接口()]
{
//实现
}
一个示例如下:
public class AnonymoutClassDemo
{
public static void main(String[] args)
{
Object obj = new Object()
{
public String toString()
{ //重新定义toString()
return "匿名类对象";
}
};
System.out.println(obj);
}
}
此示例直接继承Object类定义一个匿名类,重新定义了toString()方法。使用System.out.println()时如果传入的是对象,会调用对象的toString()方法得到String实例。输出如下:匿名类对象。
注意:如果要在内嵌类中使用外部的区域变量,变量在声明时必须为final。
如以下代码:
public void someMethod()
{
int x = 10; //应该声明为final
Object obj = new Object()
{
public String toString()
{
return String.valueOf(x); //若x不是final型的,则不可在匿名类中使用
}
};
System.out.println(obj);
}
加final声明的原因:因为区域变量x并不是真正被拿来在内嵌匿名类中使用,x会被匿名类复制作为数据成员来使用。由于真正在匿名类中的x是复制器,即使在内嵌匿名类中对x作了更改,也不会影响到真正的区域变量x。编译器会提示您加上final关键词,这样就知道不能在内嵌匿名类中改变x的值,况且即使能改变也没有意义!
在文件管理方面,内嵌匿名类在编译完成之后会产生"外部类名称$编号.class"
分享到:
相关推荐
内嵌套类包括了静态类和成员类,还有方法中的类和匿名类的基本规则。
java 内嵌浏览器 DJNativeSwing,可实现内嵌浏览器,提高用户体验。
这是一个Java内嵌式 Tomcat的Demo。详细文章请见我的博客
Java将HTML代码转图片 java内嵌浏览器需要用到的包 DJNativeSwing.jar DJNativeSwing-SWT.jar 以及32位SWT.jar
java实现内嵌浏览器,支持IE、Chrome。项目已经正常运行,请放心使用。
Java内嵌Chrome浏览器,并实现web项目获取MAC地址,内含Ant打包代码,可以把程序打包到jar目录,直接用cmd文件运行
Java内嵌浏览器eclipse.swt插件版 swt-3.5M4-win32-win32-x86 eclipse.swt 源码,jar包 demo eclipse工程实例
java内嵌浏览器源码
java应用程序生成窗口内嵌游览器显示页面
jetty容器内嵌到java代码中,通过代码控制启动,方便开发调试
jxbrowser 是一个非常成熟的 java 内嵌浏览器。使用的是 chrome 内核。但是这个并不免费。 尽量不去破坏源代码的情况去实施破解工作。 声明: 仅仅供学习使用,如商用请购买,本人不负责任何版权问题。
内嵌式tomcat启动web工程,maven代码 内嵌式tomcat启动web工程,maven代码
实现java简单内嵌浏览器,jxbrowser为谷歌内核,兼容大部分前端框架,源码亲测好用(希望大家支持正版 ,不要商业使用)
Java内嵌IE、谷歌浏览器所需要的jar
DJNativeSwing.jar,DJNativeSwing-SWT.jar,swt(Mac用.jar,swt(Window.jar 可解决问题:1.报错信息为缺少swt-cocoa-4335.dll和swt-cocoa.dll文件
超好看,内嵌火狐核心浏览器,支持换肤功能,不依赖客户机浏览器版本
做java客户端时,为了显示更好的显示效果,可以用内嵌浏览器,此包里有相关例子和jar包,api等!
java生成二维码 支持内嵌logo 方法简单,参数配置也简单 代码里有不带logo的,也有带logo的! 下载后直接运行QRCodeUtil 就可以看到效果!!满意请记得支持我 资源里面我已经把相关jar也带了 只有一个jar