- 浏览: 498317 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (200)
- java基础 (30)
- ajax (19)
- 乱写 (5)
- groovy (2)
- db (8)
- gwt (0)
- jee (2)
- 我关注的开源 (1)
- RIA AIR (1)
- spring (11)
- lucene (0)
- 工具 (10)
- 百科 (2)
- linux (6)
- android (40)
- 移动开发 (21)
- 代码片断 (15)
- tomcat (1)
- css (1)
- html5 (2)
- jquery (2)
- playframework (3)
- web (2)
- nio (3)
- design (1)
- nosql (3)
- 日志 (12)
- mysql (4)
- 图表 (1)
- python (3)
- ruby (1)
- git (0)
- hibernate (1)
- springboot (1)
- guava (1)
- mybatis (0)
- 工作问题 (3)
- php (1)
最新评论
-
linzm1990:
踩了很多坑啊。。。。
hibernate @Nofound 与@ManyToOne fetch lazy的问题 -
Ccccrrrrrr:
...
转: Spring boot 文件上传 -
rmzdb:
兄弟,你这个东西,在ie内核的浏览器,貌似不识别 文件名
工作问题:http下载文件,中文文件名在firefox下乱码问题 -
107x:
问题解决了,谢谢!
工作问题:http下载文件,中文文件名在firefox下乱码问题 -
klxqljq:
额鹅鹅鹅
android布局实现头尾固定, 中间多余内容可以滚动
Inner Class 这个机制是在JDK1.1版本之后才添加到java语言中的, 它的存在主要有两个目的:
- 可以让程序设计中逻辑上相关的类结合在一起
- Inner Class可以直接访问外部类的成员
按照Inner Class声明的位置,大致上可以把它分成两种, 一个是类成员式的,就是像属性,方法一样. 把一个类声明为另一个类的成员. 第二个方法是区域式, 也就是把类声明在一个方法之中. 由这两种方式所派生出来的,按存在的范围又分成四种级别, 第一是类级别的, 第二是对象级别的, 第三是区域变量级别,第四是匿名级别.前两个级别是属于成员式的,后两个级别是属于区域式的.
成员式内部类
Inner Class的声明方式哏一般的类没什么两样,不过以成员式来说,既然是外部类的成员,那么别的类也可以访问它,因此Inner Class 可以使用任一个访问权修饰符. 类级别的Inner Class就是加 了static这个修饰符, 让别的类在访问时可以直接通过外部类的名称来访问. 而成员级别的Inner Class 就必须无产生外部类的对象后,才能通过这个对象来访问.
public class InnerClasses { private static String staticAttribute = "Outter class static attribute"; private String instantiateAttribute = "Outter class instantiate attribute"; public void instantiateMethod(){ System.out.println("Outter class instantiate method"); } public static void staticMethod(){ System.out.println("Outer class static method"); } public static class StaticInnerClass{ public StaticInnerClass(){ System.out.println("static Inner class"); } public void access(){ System.out.println(staticAttribute); staticMethod(); } } public class InstantiateInnerClass{ public InstantiateInnerClass(){ System.out.println("Instantiate Inner class"); } public void access(){ System.out.println(instantiateAttribute); instantiateMethod(); } } }
public class InnerClassExample1 { public static void main(String[] args) { InnerClasses.StaticInnerClass in = new InnerClasses.StaticInnerClass(); in.access(); } }
public class InnerClassExample2 { public static void main(String[] args) { InnerClasses.InstantiateInnerClass in; InnerClasses out = new InnerClasses(); /** * 注意这里写法,因为我们现在要访问的是对象级别的Inner Class,所以必须产生外部类的对象(out)后, * 再通过out对象使用new 的方式来产生InstantiateInnerClass类的对象 */ in = out.new InstantiateInnerClass(); in.access(); } }
public class InnerClassExample3 { private int att = 0; public static void main(String[] args) { new InnerClassExample3(); } public InnerClassExample3() { new Inner(2); } public class Inner{ private int att = 1; public Inner(int att) { System.out.println(att); /* * 访问的是Inner类的att属性 */ System.out.println(this.att); /* * 访问的是外部类的att属性. 注意这里的this的用法 */ System.out.println(InnerClassExample3.this.att); } } }
Inner Class还可以声明为抽象类
public class AbstractInnerClassExample extends Outter5.StaticAbstractInnerClass{ } class Outter5{ public static abstract class StaticAbstractInnerClass{ } /** * 对象级别的Inner Class只能被外部类中的其它Inner Class继承. * 因为按extends语法后面接的必须是类的名称,对象级别的Inner Class没办法直接访问 */ public abstract class AbstractInnerClass{ } public class Inner extends AbstractInnerClass{ } }
Inner class为接口
public class InnerInterfaceExample implements Outter6.StaticInnerInterface{ } class Outter6{ static interface StaticInnerInterface{ } interface InnerInterface{ } class InnerClass implements InnerInterface{ } }
区域式内部类
区域级别的变量指的是在方法中声明的变量,同样区域式的就是在方法中声明的类. 限制是如果要访问包含它的方法中的变量的话, 该变量必须是个学时,也就是说声明时要加上 "final"这个关键字. 这种类型的没有什么大用处.
public class InnerClassExample4 { public static void main(String[] args) { Outter4 out = new Outter4(); Object obj = out.methodWithInnerClass(); System.out.println(obj); } } class Outter4{ /* * 返回值只能用Object的对象类型, 因为在这个方法之外,根本无法取得Inner Class的任务信息 */ public Object methodWithInnerClass(){ class Inner{ @Override public String toString(){ return "this is an Inner class in a method"; } } return new Inner(); } }
匿名式内部类
这种方式经常可以在我们的代码里看到,特别是写事件程序时.
import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class AnonymousInnerClassExample { public static void main(String[] args) { Frame f = new Frame("Anonymous Inner Class Example"); f.addWindowListener(new WindowAdapter(){ @Override public void windowClosed(WindowEvent e) { System.exit(1); } }); f.setSize(200, 100); f.setVisible(true); } }
总结
- Inner class 可以访问类成员和对象成员,若要访问方法的变量,则该变量必须为final变量.
- Inner class 可以是一个抽象类
- Inner class 可以是一个接口
- Inner class 可以使用任一个访问权限修饰符
- Inner class 可以使用static修饰符(类成员)
- Inner class 中的成员若要使用static修饰符,则该inner class必须也是static
- Inner class 中若要使用外部类的类成员,则该inner calss必须也是static
发表评论
-
ChartDirectorvk如何测试文本的长度跟宽度
2012-11-30 15:53 1100在使用charDirector画图时, 要确定setPlotA ... -
Java调用外部程序技巧
2012-08-24 13:43 1285http://www.yankay.com/java%E8%B ... -
java中的协变
2012-08-14 09:10 1122协变是指一个类型随着它关联的类型一起变化,有点抽像,java中 ... -
jdbm
2012-07-11 15:20 1306jdbm4也发布部分代码了, ... -
使用java实现grep功能(FileChannel, Pattern, MappedByteBuffer 直接字节缓冲区,其内容是文件的内存映射区域)
2012-02-23 10:42 2927利用正则表达式查找一系列文件,类似于grep功能. 演示了 N ... -
并发--Effective Java的一小段代码
2012-02-20 17:14 1176import java.util.concurrent.T ... -
JAVA使用EPoll来进行NIO处理的方法
2012-02-14 09:20 998JDK 6.0 以及JDK 5.0 update 9 的 ni ... -
java里的枚举
2011-12-30 15:03 1116参考: http://www.ibm.com/develope ... -
项目中用到的一个小工具类(字符过滤器)
2011-10-25 09:08 1029见: http://javatar.iteye.com/blo ... -
下载处理Servlet工具类
2011-10-25 09:06 939转自 http://javatar.iteye.com/blo ... -
局部类访问外部final变量
2011-01-26 12:21 1111在局部类, 我们要更新封闭作用域用的变量, 这一般来说是不容易 ... -
tomcat开启gzip
2011-01-21 13:46 1179在conf/server.xml中找到第一个Connector ... -
maven中国地址
2011-01-06 13:37 3296maven的中国mirror <mirror> ... -
java范型小记
2010-12-18 17:51 01. Collections.<String>em ... -
jsp里的${}和jquery template的${} 怎么样转义
2010-12-16 14:38 4766ttp://www.infoq.com/cn/news/201 ... -
正则表达式
2010-11-30 08:27 1353由于项目中需要用到正则表达式,再一每次使用正则表达式时都要查资 ... -
Java Web 应用程序的字符编码问题
2010-11-30 08:13 1070Java Web 应用程序经常会出现乱码的情况,这里可以通过 ... -
异常的限制
2010-11-30 08:09 1033java 程序声明异常时,父类的某个方法声明了异常的抛出,那 ... -
JVM参数调优(带JMX)
2010-09-09 08:48 1361JAVA_OPTS='-d64-Djava.rmi.serve ... -
java Bridge method
2010-08-06 15:15 2269bridge method may be create ...
相关推荐
Handler对象中使用匿名内部类或非静态内部类正确地释放消息避免内存泄漏或增加Native内存,在Android中,Handler对象通常会被用来在主线程(UI线程)中处理消息,以更新UI界面。当我们在Handler对象中使用匿名内部类...
1.接口-简介 2.接口-作用 3.接口-定义方式 4.接口-实现 5.接口-与抽象类之区别 6.接口-应用示例(设计模式...内部类-局部内部类 12.内部类-匿名内部类 13.内部类-静态内部类 14.综述
Java内部类是Java言语的一个很重要的概念,《Java编程思想》花了很大的篇幅来讲述这个概念。但是我们在实践中很少用到它,虽然我们在很多时候会被动的使用到它,但它仍然像一个幕后英雄一样,不为我们所知,不为我们...
内部类分类
java 内部类 实例内部类 局部内部类 匿名类 静态内部类 实例代码
java 匿名内部类的使用规范 java 匿名内部类的使用规范 java 匿名内部类的使用规范
Java内部类Java内部类Java内部类Java内部类Java内部类Java内部类Java内部类
相关android开发中内部类 匿名内部类 内部接口 对比说明
实验报告8++内部类与异常类
java 成员内部类使用 内部匿名类 方法参数匿名类 方法匿名类
成员内部类、局部内部类、静态内部类、匿名内部类
主要讲述了JAVA中内部类和匿名内部类的相关问题。
java基础第七章内部类与异常类.doc
java的内部类
反射私有内部类的例子 反射私有内部类的例子反射私有内部类的例子
- 不同类型的内部类(静态内部类、成员内部类、局部内部类和匿名内部类)的区别和用法 - 内部类的优缺点以及使用场景 这些目标将帮助你理解和掌握内部类的概念,并能够在适当的时候使用内部类来解决问题...
java内部类详解
java 利用反射获取内部类静态成员变量的值操作.docx
定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现...
内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。内部类可以是静态static的,也可用public,default,protected和private修饰。(而外部顶级类即类名和文件名相同的只能使用public和default)。