- 浏览: 662476 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (252)
- Html/Div+CSS (12)
- Js/Jquery (34)
- Flex (2)
- Ajax (3)
- Java (35)
- C# (15)
- Spring (16)
- Hibernate (13)
- Struts2 (12)
- Struts1 (7)
- DWR (1)
- iBatis/myBatis (9)
- Tag(JSTL、EL) (1)
- Android (44)
- SQL (7)
- SEO (7)
- Exception (3)
- Tool (10)
- Other (3)
- WebService (9)
- Apache (7)
- Ext (0)
- Utils (12)
- thinking in programme (2)
- Hadoop (0)
- ActiveMQ (0)
- HTML5/CSS3 (0)
- WPF (1)
- NodeJs (1)
- 设计模式 (0)
- 程序人生 (1)
- 随笔 (1)
- Linux (1)
- Load Balance (0)
最新评论
-
drinkjava2:
太复杂了而且不通用,利用ThreadLocal可完美解决这一问 ...
JDBC的多条件动态查询 -
u013107014:
multipartRequest.getFiles(" ...
多文件上传 by MultipartFile and Multiple -
liyys:
可惜没讲你mysql数据库的表的设计
iBatis入门 -
Mapple_leave:
效果还是挺不错的,谢谢了。
中文简体与繁体的转换 -
arcpad:
JS禁用浏览器退格键
前端时间在写.net项目中,一直错将.cs里的两个class当作内部类,原来是一个文件里的两个类而已,这让我想起了Java中的内部类,比较内部类,那么还有两个类,那就是匿名类和匿名内部类。今天我想就Java中的这三种类进行个比较。
我们知道在Java语言规范中可以做很多事,例如一个类或一个接口中可以声明一个类或接口,在一个方法中可以声明一个类,类与接口声明可以嵌套任意深度等。
匿名类:
1、new <类或接口><类的主体>,匿名类的声明是在编译时进行的,实例化是在运行时进行的,所以在for循环中一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。
2、如果要执行的对象需要一个对象,但却不值得创建全新的对象(可能是因为该对象只在一个方法内部使用),在这个时候使用匿名类就会非常合适,所以说,匿名类一般会在swing程序中快速创建事件处理程序。
firstButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { getTxtValue().setText("第一个按钮触发的事件!"); } });
3、从技术上说,匿名类可以被看作非静态的内部类,所以他们具有方法内部声明的非静态内部类相同的权限和限制。
内部类:
内部类顾名思义就是在一个类的内部还有一个类
package com.iflytek.innerclass; /** * @author xudongwang 2012-1-11 * * Email:xdwangiflytek@gmail.com */ public class InnerClassDemo { public static void main(String[] args) { new Outer().fun(); } } class Outer { private String name = "Hello 内部类"; class Inner { public void print() { System.out.println("name = " + name); } }; public void fun() { new Inner().print(); } }
内部类生成的.class文件名为:Outer$Inner.class,从上面的结构发现内部类的的缺点是“结构非常的混乱”。
package com.iflytek.innerclass; /** * @author xudongwang 2012-1-11 * * Email:xdwangiflytek@gmail.com */ public class InnerClassDemo02 { public static void main(String[] args) { new Outer02().fun(); } } class Outer02 { private String name = "Hello 内部类"; public void fun() { new Inner02(this).print(); } public String getName() { return this.name; } }; class Inner02 { private Outer02 out; public Inner02(Outer02 out) { this.out = out; } public void print() { System.out.println("name = " + this.out.getName()); } };
从上可以看出内部类的优点是“可以方便的访问外部类中的私有成员”;
如果要在外部直接使用内部类的实例化对象:
外部类.内部类 内部类对象 = 外部类实例.new 内部类实例();
package com.iflytek.innerclass; /** * @author xudongwang 2012-1-11 * * Email:xdwangiflytek@gmail.com */ public class InnerClassDemo03 { public static void main(String[] args) { Outer03 out = new Outer03();//外部类实例 Outer03.Inner inner = out.new Inner();//实例化内部类对象 inner.print(); } } class Outer03{ private String name = "Hello 内部类"; class Inner { public void print() { System.out.println("name = " + name); } } }
一个内部类如果使用static关键字声明的话,则此内部类就将成为外部类,可以直接通过外部类.内部类的形式访问
package com.iflytek.innerclass; /** * @author xudongwang 2012-1-11 * * Email:xdwangiflytek@gmail.com */ public class InnerClassDemo04 { public static void main(String[] args) { Outer04.Inner inner = new Outer04.Inner();// 实例化内部类对象 inner.print(); } } class Outer04 { private static String name = "Hello 内部类"; static class Inner { public void print() { System.out.println("name = " + name); } } }
内部类可以在任意的地方使用,例如方法中声明
package com.iflytek.innerclass; /** * @author xudongwang 2012-1-11 * * Email:xdwangiflytek@gmail.com */ public class InnerClassDemo05 { public static void main(String[] args) { new Outer05().fun(); } } class Outer05 { private static String name = "Hello 内部类"; public void fun() { class Inner { public void print() { System.out.println("name = " + name); } } new Inner().print(); } }
在方法中定义的内部类,可以直接访问外部类中的各个成员,但是如果要访问方法中的参数,则需要在参数上加上final关键字声明;
package com.iflytek.innerclass; /** * @author xudongwang 2012-1-11 * * Email:xdwangiflytek@gmail.com */ public class InnerClassDemo06 { public static void main(String[] args) { new Outer06().fun(20); } } class Outer06 { private static String name = "Hello 内部类"; public void fun(final int temp) { class Inner { public void print() { System.out.println("temp = " + temp); System.out.println("name = " + name); } } new Inner().print(); } }
匿名类与内部的联系与区别:
按所在位置可以分为两大类:
1、在类的方法中
特点:
a、可以访问宿主类的所有元素 ;
b、保存宿主类对象的引用,创建对象时必须有宿主类对象;
c、 不能有静态数据;
继续划分:
A、本地内部类;
B、匿名内部类
两者的区别在于本地内部类有构造方法,而匿名内部类只能实例初始化;
2、在类或接口作用域中;
继续划分:
A、普通内部类
B、静态内部类
匿名内部类:
匿名内部类是在抽象类和接口的基础之上发展起来的。
package com.iflytek.innerclass; /** * @author xudongwang 2012-1-11 * * Email:xdwangiflytek@gmail.com */ public class NoNameClass01 { public static void main(String[] args) { new X().fun2(); } } interface A { public void fun(); } class B implements A { public void fun() { System.out.println("Hello 准备匿名内部类"); } } class X { public void fun1(A a) { a.fun(); } public void fun2() { this.fun1(new B()); } }
通过上面的Demo,如果现在假设B类只使用一次,那么还有必要将其定义成一个单独的类么?
呵呵,此时就可以使用匿名内部类:
package com.iflytek.innerclass; /** * @author xudongwang 2012-1-11 * * Email:xdwangiflytek@gmail.com */ public class NoNameClass02 { public static void main(String[] args) { new XX().fun2(); } } interface AA { public void fun(); } class XX { public void fun1(AA a) { a.fun(); } public void fun2() { this.fun1(new AA() { public void fun() { System.out.println("Hello 准备匿名内部类"); } }); } }
其实在真正的项目开发中匿名内部类使用的非常之少,一般在Java的图形界面和现在的Android中使用的比较多点。
最后给一个内部类实现的简单链表:
package com.iflytek.innerclass; /** * @author xudongwang 2012-1-11 * * Email:xdwangiflytek@gmail.com */ public class LinkDemo { public static void main(String args[]) { Link link = new Link(); link.add("A"); link.add("B"); link.add("C"); link.add("D"); link.add("E"); link.print(); } }; class Link { class Node { private String name; private Node next; // 单向链表,每个节点指向下一个节点 public Node(String name) { this.name = name; // 通过构造方法为name属性赋值 } public void addNode(Node newNode) { // 增加节点 if (this.next == null) { this.next = newNode; // 保存节点 } else { this.next.addNode(newNode); // 继续向下查找 } } public void printNode() { // 输出节点 System.out.println(this.name); if (this.next != null) { // 此节点之后还存在其他的节点 this.next.printNode(); } } }; private Node root; // 链表的头 public void add(String name) { // 增加节点 Node newNode = new Node(name); // 定义一个新的节点 /* * 如果是第一个节点,则肯定是根节点, 如果是第二个节点,则肯定放在根节点next中 如果是第三个节点,则肯定放在第二个节点的next中 */ if (this.root == null) { this.root = newNode; // 将第一个节点设置成根节点 } else { // 肯定要放在最后一个节点之后 // 通过节点.next来不断的判断 this.root.addNode(newNode); } } public void print() { if (this.root != null) { // 如果根节点为空了,则没有任何内容 this.root.printNode(); } } };
发表评论
-
log4j xml配置详解
2014-06-18 10:37 1098<?xml version="1.0&qu ... -
test
2013-07-29 09:16 0private static CacheImpl insta ... -
多文件上传 by MultipartFile and Multiple
2012-12-03 09:13 14294最近的一个项目中,需要用到 ... -
布局框架-SiteMesh
2012-11-30 08:57 2542最近在一个项目中使用 ... -
Servlet
2012-12-07 08:36 1496一、认识 Servlet : ... -
连接池
2012-12-10 08:42 1394... -
忆Java String
2012-11-15 08:38 1219平时 .NET 写多了, Java ... -
Eclipse中右键快速定位文件资源的工具
2012-11-09 08:43 1946当你开发.NET项目后,使用VS习惯了再来使用Java和Ecl ... -
Java中MessageFormat对象实现格式化字符串输出,类似C#中的string.format方法
2012-09-29 11:39 3622平时.NET做多了,再做Java时,总会进行一些比较,比如说J ... -
byte[]与InputStream互转
2012-09-29 11:39 1526InputStream转byte[] private ... -
统一中英文长度问题
2012-07-20 00:17 1891最近因为在做一个项目要求很多都是英文,所以这就涉及到在页 ... -
Java中Process的waitFor()阻塞问题
2012-07-21 01:00 8842在做视频转换时,调用外部的 exe 去进行一些视频 ... -
Tomcat注册成系统服务
2012-07-17 00:00 1513为了部署项目后不出现黑色的 doc 命令框,所以很 ... -
urlrewrite实现伪静态化
2012-07-25 00:41 3171产生背景 静态网页与动态网页比较: ... -
Java中java.util.Date时间和java.sql.Date时间的相互转化
2012-01-30 22:49 2906刚刚写用 JS 禁用退格键时( http ... -
使用BeanUtils类简化request和resultset转换
2012-01-21 20:23 2885当提交表单时,如果没有使用Struts等框架的话,你的代 ... -
JDBC的多条件动态查询
2012-01-19 11:05 7096前面我已经提到了现在的项目无非就是列表里的分页加多条件查 ... -
JDBC分页
2012-01-19 10:15 5469不知道大家做项目做到最后有什么感觉没有,其实大家做来做去 ... -
Java农历(阴历)工具类
2012-01-20 11:30 2300在真实的项目开发中会可能会遇到项目需要对阴历即我们所说的农历节 ... -
Eclipse中java项目引用dll库的路径设置(System.loadLibrary()调用Dll路径问题)
2012-01-16 14:13 4198右击项目名|选择属性properties|在左边列表内选择“J ...
相关推荐
java 成员内部类使用 内部匿名类 方法参数匿名类 方法匿名类
java 匿名内部类的使用规范 java 匿名内部类的使用规范 java 匿名内部类的使用规范
相关android开发中内部类 匿名内部类 内部接口 对比说明
Handler对象中使用匿名内部类或非静态内部类正确地释放消息避免内存泄漏或增加Native内存,在Android中,Handler对象通常会被用来在主线程(UI线程)中处理消息,以更新UI界面。当我们在Handler对象中使用匿名内部类...
详细对比测试了匿名类/内部类/本地类之间的区别,有例子+博客对比说明,希望对大家有所帮助
java 内部类 实例内部类 局部内部类 匿名类 静态内部类 实例代码
16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名...
Java 匿名内部类的学习demo
java中的匿名内部类总结
主要讲述了JAVA中内部类和匿名内部类的相关问题。
Android 匿名内部类作为事件监听类
使用swift匿名内部类,实现jave匿名内部类功能,java中的匿名内部类,可以做到的是,就是想要重写一个类中的方法,并且执行,但是不想重新定义一个类,因为只调用一次,或者调用多次,但是每次调用的实现过程都不同,这时候就...
java所需要的匿名内部类,Android开发有所帮助。
匿名内部类详解.pdf
内部类的相关知识-静态内部类,匿名内部类……内部类 静态内部类 匿名内部类 static inner
匿名内部类核心重点知识讲解和经典例子讲解,匿名内部类一直都是很多最头疼的知识,那么到底什么是匿名内部类呢?这里就有答案,这里就带你学会,这里是知识的宝藏,期待你的挖掘
定义一个按钮bn,并通过创建匿名内部类实现事件监听bn是否被按下。
- 不同类型的内部类(静态内部类、成员内部类、局部内部类和匿名内部类)的区别和用法 - 内部类的优缺点以及使用场景 这些目标将帮助你理解和掌握内部类的概念,并能够在适当的时候使用内部类来解决问题...
掌握java四中匿名内部类
the different code of create factory.