- 浏览: 42598 次
- 性别:
- 来自: 山东->北京
最新评论
-
lancezhcj:
我的配置文件在WEB-INF下的config文件夹下
配置文件在WEB-INF下的读取方式 -
davidx:
正则表达式
判断字符是否为中文
Java语言提供了一种接口(interface)机制。这种接口机制使Java的面向对象编程变得更加灵活。我们可以用接口来定义一个类的表现形式,但接口不能包含任何实现。在《Thinking in Java》一书中,作者对接口有这样的描述:“接口(interface)比抽象(abstract)的概念更进了一步。你可以把一个接口看成是一个纯的抽象类。”我认为作者对接口的这一解释再准确不过了。
理解并用好接口机制将帮助我们更好的掌握Java这种面向对象的编程语言。下面我们来讨论一下接口的使用规则以及相关的应用。
一、接口的定义及实现
定义接口和定义类相似,只是要把 class关键字换为 interface。定义方法时只需要方法名,返回类型和参数列表,不能有方法体。接口中可以定义字段,这些字段都被暗指为 static 和 final,因此应该根据需要先定好这些字段的值。例如:
public interface Flyable{ voidfly(); } public interface Talkable{ voidtalk(); } public interface Message{ intMAX_SIZE=4096; StringgetMessage(); }
上面定义的几个接口中,Flyable 和 Talkable 只定义了一个方法,而 Message 里除了方法外还有一个字段 MAX_SIZE。可以看出这些接口只定义了类的表现形式,而不包含任何实现,所以不能直接使用。要使用这些接口就需要有相应的类去实现它们。实现接口时应该先在类名后用 implements 关键字申明将要实现的接口,如果要实现多个接口,应该用逗号将它们隔开,然后一一实现这些接口中定义的方法。如下面的例子:
public class Parrot implements Flyable,Talkable{ publicvoidfly(){ System.out.println("Flyinglikeaparrot…"); } publicvoidtalk(){ System.out.println("Hello!Iamaparrot!"); } } public class TextMessage implements Message{ Stringmessage; public void setMessage(Stringmsg){ message=msg; if(message.length()>MAX_SIZE) message=message.substring(0,MAX_SIZE); } public String getMessage(){ returnmessage; } }
在 Parrot(鹦鹉)例子中,我们用接口 Flyable 来表示飞行能力,Talkable 表示说话能力,但它们并不包含具体实现。而 Parrot 同时具有这两种能力,所以我们为 Parrot 类同时实现了 Flyable 和 Talkable 这两个接口。同样我们还可以定义一个Swallow(燕子)类,但燕子只有飞行能力,所以我们只需要为 Swallow 实现 Flyable 就行了。因为它们各自的的飞行方法有所不同,所以它们有各自关于飞行的具体实现。
另外,正因为一个类可以同时实现多个接口,使得Java的面向对象特性变得非常灵活。运用这种特性,我们可以实现类似C++语言中多继承那样的特性,甚至更灵活的一些特性。下面我们来讨论一下接口在实际中的应用。
二、用接口来定义一些全局变量
因为接口内的字段都是static和final的,所以我们可以很方便的利用这一点来创建一些常量。例如:
public interface Constants{ StringROOT="/root"; intMAX_COUNT=200; intMIN_COUNT=100; }
在使用时可以直接用Constants.ROOT这样的形式来引用其中的常量。我们还可以用下面这种方法来创建初始值不确定的常量。
public interface RandomColor{ intred=Math.random()*255; intgreen=Math.random()*255; intblue=Math.random()*255; }
其中red、green和blue的值会在第一次被访问时建立,然后保持不变。
三、用接口来定义基本数据结构
在设计一套软件系统的初期,我们可以用接口来对一些基本数据元素的特性来进行一些描述,再根据需要进行不同的实现。请大家看看下面这个例子:
public interface User{ intgetAge(); StringgetName(); StringgetPassword(); } public class XMLUser implements User{ public int getAge(){...} public String getName(){...} public String getPassword(){...} } public abstract class UserFactory{ public static UserFactory getUserFactory(){ return new XMLUserFactory(); } public User getUser(String name); public User getAdmin(); public UsercreateUser(String name,String password,int age); public void addUser(User user); public void delUser(User user); } public class XMLUserFactory extendsUserFactory{ //这里用XML技术实现的UserFactory的抽象方法 }
在这个例子中,我们定义了一个接口User和一个抽象类UserFactory。然后我们用XML技术实现这两个类。可以看出,我们只需要从用UserFactory的getUserFactory()就可以得到一个UserFactory的实例,而不用去考虑这个实例的具体实现方法。通过UserFactory的这个实例我们还可以直接得到User的实例,也不用去考具体的实现方法。
如果我们决定用JDBC技术来实现User和UserFactory,我们只需要按上面的形式实现JDBCUser和JDBCUserFactory就行了。然后把UserFactory中的getUserFactory方法修改一下就可以改变了它们的实现方法。而我们已经写好的调用UserFactory和User的部分不需要做任何修改。
这是用接口来定义数据结构的一个简单的例子,在实际应用中还有很多灵活的使用方法,大家需要在学习过程中不断的去体会。
四、理解分布式应用的原理
目前有很多软件项目都使用了分布式的技术。Java 有多种支持分布式应用的技术,早期用的比较多的有 RMI、CORBA 等技术,而现在 EJB 技术更为流行一些。但这些技术不管怎么发展,其实都是以接口为基础的。
以远程方法调用 RMI(Remote Method Invocation)为例。在编写 RMI 应用时,我们需要做两件最基本的事,首先要定义一个接口,这个接口要继承 java.rmi.Remote 接口,这个接口中应该包含你要从远端调用的方法名。接下来就是写一个类来实现这个接口中的方法。例如:
public interface Product extends java.rmi.Remote{ String getName() throws java.rmi.RemoteException; } public class ProductImpl implements Product{ String name; public ProductImpl(String n){ name = n; } public String getName() throws java.rmi.RemoteException{ return name; } }
在这个例子中,接口 Product 是放在客户端的,而 ProductImpl 是放在服务器端的,客户在使用时只需要用指定的规则得到Product 的实例就行了,不用去考虑 Product 接口里的方法是如何实现的。在定义好这两个类后,用Java开发包命令“rmic ProductImpl”就可以帮助我们自动生成两个类 ProductImpl_Skel 和 ProductImpl_Stub。这两个类就包含了RMI调用的运作机制。有兴趣的朋友可以把这两个类反编译后研究一下。你会发现其中 ProductImpl_Stub 实际上是接口 Product 的一个实现类。RMI 机制就是用这个类来生成 Product 的实例供客户端使用。另一个类 ProductImpl_Skel 则是在服务端响应 ProductImpl_Stub 的调用请求的类。而 RMI 最底层的通讯原理则是利用 ObjectInputStream 和 ObjetOutputStream 通过 Socket 将要调用的方法名及参数列表传到服务器端,服务器端再通过特定的方法调用实现类(在本例中是 ProductImpl)的对应方法,然后将结果通过 Socket 传回客户端就行了。由于 Skel 和 Stub 类是用工具生成的,所以就大大节省了开发的时间。另外,如果我们需要修改一些实现方法或错误,只需要对服务器端的实现类进行修改就可以了,也就是说这种分布式应用的大部分维护工作在服务器端就可以完成。
现在越来越多的应用使用了 EJB 这种技术。EJB 是从 RMI 发展而来的一项技术,它比RMI定义得更加完善,可以获得更好的面向对象的特性。但它的规则要比RMI复杂一些。但是不管它多复杂,它同样是使用了接口来定义各种不同的 Bean,也同样需要编写相应的实现类来完成具体的功能,最后还要通过 Socket 来进行通讯。EJB的运作机制本身有一定的复杂性,所以其应用的效率理所当然就会受到一定的影响。因此在选择开发技术时应该根据应用的规模和特点仔细考虑,不一定流行的技术就一定能适应你的应用。如果你很好的掌握了面向对象的设计原则,你就可以自行设计。也许你可以根据自己应用的特点设计出更合适的分布式应用结构。
发表评论
-
日期操作函数
2008-12-04 15:16 1407import java.util.Date; import j ... -
判断字符是否为中文
2008-12-04 15:07 1120package cn.wangy.test; import ... -
System.getProperties()参数列表
2008-12-04 14:44 1458JAVA.version :JAVA运行时环境版本JAVA.v ... -
Class.forName()详解
2008-12-04 14:35 1608Class.forName(xxx.xx.xx) 返回的是一个 ... -
Java中日期操作函数
2008-12-04 14:25 9691.计算某一月份的最大天数 Calendar time = C ... -
Java中使用MD5加密
2008-12-04 14:12 1119在各种应用系统的开发 ... -
Java文件操作大全
2008-12-04 13:50 842一.获得控制台用户输入的信息 /**获得控制台用户输入的信 ... -
泛型与反射
2008-12-04 13:31 1058我们知道,反射和泛型都是Java的一种动态技术。而不像继承和多 ... -
Java的多线程
2008-12-04 13:09 944一.实现多线程1. 虚假的多线程例1: public clas ... -
线程的wait(),notify()例子
2008-12-04 13:01 2387package cn.wangy; class Produc ... -
共5次每隔2秒检查指定文件是否存在 读取并强制删除
2008-12-04 12:56 1589package cn.wangy.io; import ja ... -
String和InputStream的转换
2008-12-04 12:33 19171. String --> InputStream I ... -
Java学习杂谈(10)
2008-12-04 12:28 834今天的主题是目前很流行也很好的一个开源框架-Spring。 ... -
Java学习杂谈(9)
2008-12-04 12:27 735J2ee的开源框架很多,笔 ... -
Java学习杂谈(8)
2008-12-04 12:25 805终于正式进入J2ee的细节部分了,首当其冲的当然是Servle ... -
Java学习杂谈(7)
2008-12-04 12:24 697终于又静下来继续写这 ... -
Java学习杂谈(6)
2008-12-04 12:18 5161. Java中的RMI机制 RMI的全称是远程方法调 ... -
Java学习杂谈(5)
2008-12-04 12:13 7101. Java关于XML的解析 ... -
java的几种对象(PO,VO,DAO,BO,POJO)解释
2008-12-04 12:10 457一、PO:persistant object 持 ... -
Java学习杂谈(4)
2008-12-04 12:06 734第三篇讲的是反射机制集合框架之类的,这次打算讲讲自己对反序 ...
相关推荐
通过深入学习Java应用程序设计接口中的窗口部分,开发者能够熟练掌握创建和管理GUI的技巧,从而开发出具有吸引力且用户体验良好的Java应用程序。书中可能还会涵盖更多的高级主题,如拖放操作、打印支持、Swing组件的...
Java程序设计及应用开发教程是面向初学者和进阶者的一门重要课程,旨在深入讲解Java编程语言的基础知识以及在实际应用中的开发技巧。通过这门教程,学习者可以掌握如何利用Java进行高效、可靠的软件开发。 首先,...
Java程序设计及应用开发是计算机科学领域中的核心课程之一,主要教授如何使用Java语言进行软件开发。本资源“java程序设计及应用开发习题参考答案.rar”是一个压缩包,包含了针对该课程习题的详细解答,旨在帮助学习...
这本书涵盖了Java程序设计的基础到高级应用,旨在帮助读者掌握Java编程的核心技能,并能将其应用于实际开发中。以下是该书可能涉及的一些关键知识点: 1. **Java语言基础**:介绍Java的历史、特点和应用领域,以及...
《Java程序设计及应用开发》是一本深入浅出的Java编程教材,涵盖了Java语言的基础到高级应用,旨在帮助学习者掌握Java编程技能并应用于实际项目开发。资源包含电子教案、习题解答和源代码,为学习者提供了全方位的...
《Java程序设计与应用开发(第2版)》是一本深度探讨Java编程语言以及其在实际应用中的开发方法的专业书籍。这本书涵盖了从基础语法到高级特性的全面内容,旨在帮助读者掌握Java编程的核心技能,并能将这些技能应用...
从标签“java程序设计”我们可以推断,这些示例将围绕Java语言的核心概念展开,如类、对象、方法、变量、数据类型、控制结构(如if-else,for,while循环)、继承、接口、异常处理等。这些都是学习Java时必须掌握的...
"Java程序设计与应用开发代码.rar"这个压缩包文件显然包含了与Java编程相关的基础代码示例,适合初学者或者需要复习Java基础知识的开发者。在Java的世界里,了解并掌握基本的语法、类库和设计模式至关重要。 1. **...
《Java程序设计与应用开发》源代码包含了多个章节的学习材料,这些章节的命名按照课程的逻辑顺序排列,从基础到高级,逐步深入讲解Java编程语言的各个方面。在解压后的文件夹中,我们可以看到以下几个部分: 1. **...
Java程序设计与应用开发是计算机科学中的核心课程之一,它主要教授如何使用Java语言进行高效、可靠的软件开发。本课件旨在提供一个全面的Java学习框架,覆盖了从基础语法到高级特性的各个方面,帮助学生和开发者深入...
Java程序设计是计算机科学中的一个重要领域,主要涉及使用Java编程语言进行软件开发。Java是一种广泛应用于服务器端、桌面应用、移动应用(尤其是Android平台)的高级编程语言。天津大学计算机系提供的这门java程序...
JAVA 程序设计师们可以使用 JAVA 语言开发各种应用程序,例如桌面应用程序、移动应用程序、Web 应用程序等。 7. JAVA 的前景 JAVA 的前景非常广阔,随着网络技术的发展,JAVA 将继续扮演着重要的角色。JAVA 的跨...
本章主要讲解 Java 语言程序设计中接口和多态的概念、语法和应用。接口是 Java 语言中的一种抽象机制,它提供了一种定义类之间的“协议”的方式,允许类之间实现多继承,同时免除 C++ 中的多继承那样的复杂性。同时...
Java程序设计与应用是计算机科学领域的一个重要主题,它涵盖了从基本语法到高级特性的全面学习。Java作为一种广泛使用的面向对象编程语言,以其跨平台、安全性强和性能优秀等特点深受开发者喜爱。本教程将深入探讨...
《Java程序设计(第3版)》是唐大仕教授编著的一本深入浅出的Java编程教材,适合初学者和有一定经验的开发者学习。这本书的课件包含了丰富的教学资源,帮助读者更好地理解和掌握Java语言的核心概念和技术。下面将根据...
在Java程序设计中,基础至关重要。Java是一种面向对象的编程语言,由Sun Microsystems(现为Oracle公司)的James Gosling于1995年发布。它的设计目标是“简单、面向对象、健壮、安全”,这使得Java在软件开发领域...
总的来说,Java程序设计涵盖了广泛的知识领域,从基本语法到高级特性,再到实际项目中的应用。熟练掌握这些知识点,能够帮助开发者构建稳定、高效的应用程序。不断学习和实践,是提升Java编程技能的关键。
在雍俊海的《Java程序设计教程》第二版的课后答案中,学生可以通过查看提供的代码,了解各种编程问题的解决方案,学习如何组织和优化代码,同时加深对Java语言特性和编程技巧的理解。通过实践,理论知识将更加牢固,...
- JDBC(Java Database Connectivity):Java数据库连接,提供了一套API,用来在Java程序中连接和操作数据库。 - JavaMail API:Java提供的用于读写邮件的API,支持SMTP和POP3等邮件传输协议。 - Java Plug-in:...
在《Java程序设计与应用开发案例教程》中,汪志达老师通过精心设计的案例,将这些知识点融入实际编程实践中,帮助读者更好地理解和掌握Java编程。书中的PDF文档可能包含了详细的讲解、代码示例和练习题,是学习Java...