----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
java接口特征:
1,Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔)
2, Java接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化
1 public interface A
2 {
3 int CONST = 1; //合法,CONST默认为public,static,final类型
4 void method(); //合法,method()默认为public,abstract类型
5 public abstract void method2(); //method2()显示声明为public,abstract类型
6 }
3, Java接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法
7 public interface A
8 {
9 int var; //错,var是常量,必须显示初始化
10 void method(){...}; //错,接口中只能包含抽象方法
11 protected void method2(); //错,接口中的方法必须是public类型
12 static void method3(){...}; //错,接口中不能包含静态方法
13 }
4, 接口中没有构造方法,不能被实例化
14 public interface A
15 {
16 public A(){...}; //错,接口中不能包含构造方法
17 void method();
18 }
5, 一个接口不能实现(implements)另一个接口,但它可以继承多个其它的接口
19 public interface A
20 {
21 void methodA();
22 }
23 public interface B
24 {
25 void methodB();
26 }
27 public interface C extends A, B //C称为复合接口
28 {
29 void methodC();
30 }
31 public interface C implements A{...} //错
6, Java接口必须通过类来实现它的抽象方法
public class A implements B{...}
7, 当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象的
8, 不允许创建接口的实例(实例化),但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例
32 public class B implements A{}
33 A a = new B(); //引用变量a被定义为A接口类型,引用了B实例
34 A a = new A(); //错误,接口不允许实例化
9, 一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承.
public class A extends B implements C, D{...} //B为class,C,D为interface
4, 通过接口,可以方便地对已经存在的系统进行自下而上的抽象,对于任意两个类,不管它们是否属于同一个父类,只有它们存在相同的功能,就能从中抽象出一个接口类型.对于已经存在的继承树,可以方便的从类中抽象出新的接口,但从类中抽象出新的抽象类却不那么容易,因此接口更有利于软件系统的维护与重构.对于两个系统,通过接口交互比通过抽象类交互能获得更好的松耦合.
5, 接口是构建松耦合软件系统的重要法宝,由于接口用于描述系统对外提供的所有服务,因此接口中的成员变量和方法都必须是public类型的,确保外部使用者能访问它们,接口仅仅描述系统能做什么,但不指明如何去做,所有接口中的方法都是抽象方法,接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量.
比较抽象类与接口
1, 抽象类与接口都位于继承树的上层
相同点
1, 代表系统的抽象层,当一个系统使用一颗继承树上的类时,应该尽量把引用变量声明为继承树的上层抽象类型,这样可以提高两个系统之间的送耦合
2, 都不能被实例化
3, 都包含抽象方法,这些抽象方法用于描述系统能提供哪些服务,但不提供具体的实现
不同点:
1, 在抽象类中可以为部分方法提供默认的实现,从而避免在子类中重复实现它们,这是抽象类的优势,但这一优势限制了多继承,而接口中只能包含抽象方法.由于在抽象类中允许加入具体方法,因此扩展抽象类的功能,即向抽象类中添加具体方法,不会对它的子类造成影响,而对于接口,一旦接口被公布,就必须非常稳定,因为随意在接口中添加抽象方法,会影响到所有的实现类,这些实现类要么实现新增的抽象方法,要么声明为抽象类
2, 一个类只能继承一个直接的父类,这个父类可能是抽象类,但一个类可以实现多个接口,这是接口的优势,但这一优势是以不允许为任何方法提供实现作为代价的三, 为什么Java语言不允许多重继承呢?当子类覆盖父类的实例方法或隐藏父类的成员变量及静态方法时,Java虚拟机采用不同的绑定规则,假如还允许一个类有多个直接的父类,那么会使绑定规则更加复杂,
因此,为了简化系统结构设计和动态绑定机制,Java语言禁止多重继承.而接口中只有抽象方法,没有实例变量和静态方法,只有接口的实现类才会实现接口的抽象方法(接口中的抽象方法是通过类来实现的),因此,一个类即使有多个接口,也不会增加Java虚拟机进行动态绑定的复杂度.因为Java虚拟机永远不会把方法与接口绑定,而只会把方法与它的实现类绑定.四, 使用接口和抽象类的总体原则:
1, 用接口作为系统与外界交互的窗口站在外界使用者(另一个系统)的角度,接口向使用者承诺系统能提供哪些服务,站在系统本身的角度,接口制定系统必须实现哪些服务,接口是系统中最高层次的抽象类型.通过接口交互可以提高两个系统之间的送耦合系统A通过系统B进行交互,是指系统A访问系统B时,把引用变量声明为系统B中的接口类型,该引用变量引用系统B中接口的实现类的实例。
35 public interface B
36 {
37 }
38 public class C implements B
39 {
40 }
41 public class A
42 {
43 }
44 B a = new C();
2, Java接口本身必须非常稳定,Java接口一旦制定,就不允许随遇更加,否则对外面使用者及系统本身造成影响
3, 用抽象类来定制系统中的扩展点,抽象类来完成部分实现,还要一些功能通过它的子类来实现
----------------------- android培训、java培训、期待与您交流! ----------------------
详情请查看:http://edu.csdn.net/heima
pop3和imap协议的区别
现在的邮件系统中通常都支持pop3和imap两种接收邮件的协议,那么这两个到底有什么区别?
前天去参加一个会议,有一个发言者提到这两个有什么区别,在场真正懂得的人不见得很多,觉得有必要在这里讨论一番:
说法一:pop3和imap收邮件,imap可以在服务器上做备份,而pop3则没有这个功能
这种说法只能说是对了一小部分,因为pop3如果你设置了也可以在服务器上备份邮件
说法二:imap收邮件有收到邮件的标头,而pop3则没有
这个说法错误,因为两种都有收到邮件的所有信息
正确的说法:
pop3和imap都是收取邮件的服务协议,只不过是读取的方式不同,pop3把邮件收到本地客户端(outlook,outlook express,...)来读,而imap则是打开服务器上邮件的一个快照来读,也就是说邮件并没有下载到本地,而是存贮在邮件服务器上。
pop3默认只收inbox内的邮件
而imap则可以同步,也就是说可以收你在服务器上新建的其他邮件夹的邮件
POP协议
POP的全称是 Post Office Protocol ,即邮局协议,用于电子邮件的接收,它使用TCP的110端口,现
在常用的是第三版 ,所以简称为 POP3。POP3仍采用Client/Server工作模式,。当客户机需要服务时,客
户端的软件(OutlookExpress或FoxMail)将与POP3服务器建立TCP连接,此后要经过POP3协议的三种工作状
态,首先是认证过程,确认客户机提供的用户名和密码,在认证通过后便转入处理状态,在此状态下用户可
收取自己的邮件或做邮件的删除,在完成响应的操作后客户机便发出quit命令,此后便进入更新状态,将做
删除标记的邮件从服务器端删除掉。到此为止整个POP过程完成。
IMAP协议
IMAP是Internet Message Access Protocol的缩写,顾名思义,主要提供的是通过Internet获取信息的
一种协议。IMAP象POP那样提供了方便的邮件下载服务,让用户能进行离线阅读,但IMAP能完成的却远远不
只这些。IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才
作出是否下载的决定。
IMAP (Internet Message Access Potocol) 是一种用于邮箱访问的协议,使用IMAP协议可以在Client端管理 Server上的邮箱,它与pop不同,邮件是保留在服务器上而不是download到本地,在这一点上IMAP是与Webmail相似的。但IMAP有比Webmail更好的地方,它比webmail更高效和安全,可以离线阅读等等,如果想试试可以用Outlook Express,只要配好一个帐号,将我的邮件接收服务器设置为IMAP服务器就可以了。
IMAP(Internet消息访问协议)是与POP3对应的另一种协议,为美国斯坦福大学在1986年开始研发的多重邮箱电子邮件系统。它能够从邮件服务器上获取有关E-mail的信息或直接收取邮件,具有高性能和可扩展性的优点。IMAP为很多客户端电子邮件软件所采纳,如OutlookExpress、NetscapeMessenger等,支持IMAP的服务器端的软件也越来越多,如CriticalPath、Eudora、iPlanet、Sendmail等。
读者不禁要问,POP3也是接收邮件的协议,现在不是用得很好么,为何还要用IMAP协议呢?
POP3协议的不足
的确,POP作为Internet上邮件的第一个离线协议标准,允许用户从服务器上把邮件下载到本地主机上,同时删除保存在邮件服务器上的邮件,从而使用户不必长时间地与邮件服务器连接,很大程度上减少了服务器和网络的整体开销。
但POP3有其天生的缺陷,即当用户接收电子邮件时,所有的信件都从服务器上清除并下载到客户机。在整个收信过程中,用户无法知道邮件的具体信息,只有照单全收入硬盘后,才能慢慢浏览和删除。这使用户几乎没有对邮件接收的控制决定权。一旦碰上邮箱被轰炸,或有比较大的邮件,用户不能通过分析邮件的内容及发信人地址来决定是否下载或删除,从而造成系统资源的浪费。而IMAP协议不但可以克服POP3的缺陷,而且还提供了更强大的功能。
二对IMAP的解析
对IMAP的解析
IMAP提供操作的三种模式
在线方式:邮件保留在Mail服务器端,客户端可以对其进行管理。其使用方式与WebMail相类似。
离线方式:邮件保留在Mail服务器端,客户端可以对其进行管理。这与POP协议一样。
分离方式:邮件的一部分在Mail服务器端,一部分在客户端。这与一些成熟的组件包应用(如LotusNotes/Domino)的方式类似。
IMAP工作原理及特性
在在线方式下,IMAP允许用户象访问和操纵本地信息一样来访问和操纵邮件服务器上的信息。IMAP软件支持邮件在本地文件夹间和服务器文件夹间的随意拖动,以把本地硬盘上的文件存放到服务器上,或将服务器上的文件取回本地,所有的功能仅需要一次鼠标拖放的操作来实现。
在用户端可对服务器上的邮箱建立任意层次结构的文件夹,并可灵活地在文件夹间移动邮件,标出那些读过或回复过的邮件,删除对你来说无用的文件。
IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息,同时还可以享受选择性下载附件的服务。比如一封邮件里含有3个附件,而其中只有1个附件是您需要的,则可以选择只下载这1个附件。你可以充分了解后才作出是否下载,是全部下载还是仅下载一部分等决定,使用户不会因下载垃圾信息而占用宝贵的空间和浪费网费。
IMAP还提供基于服务器的邮件处理以及共享邮件信箱等功能。邮件(包括已下载邮件的副本)在手动删除前保留在服务器中,这有助于邮件档案的生成和共享。用户可在任何客户机上都可查看服务器上的邮件。这让那些漫游用户感到很方便。
同时IMAP也象POP3一样,允许用户从服务器上下载信息到他们的电脑上,这意味着他们仍然可以在离线方式下阅读邮件。
在分离状态下,本地系统上的邮件状态和服务器上的邮件状态,可能和以后再连接时不一样。此时,IMAP的同步机制解决了这个问题。IMAP邮件的客户端软件能够记录用户在本地的操作,当他们连上网络后会把这些操作传送给服务器,服务器也会告诉客户端软件,当用户离线的时候服务器端发生的事件,比如有新邮件到达等,以保持服务器和客户端的同步。
在IMAP下可定义供其他拥有特别访问权利的用户使用的共享文件夹,而使用POP不能实现共享邮件信箱和共享邮件,仅能通过抄送给或用手工传送邮件。共享信箱将使以使用Internet邮件为主的工作组的工作变得更为容易。
IMAP还提供许多特别的功能比如建立子目录和通过IMAP访问Usenet。在系统管理员方面,IMAP也提供了一整套可用的特性。
IMAP的监听端口为143,消息的内在时间和日期是由服务器给出的,而不是在RFC822中信头给出的时间和日期,是消息最后到达的真实日期和时间。如果信息是被IMAP的Copy命令投递的,这应当是源信息的内在时间和日期;如果信息是被IAMP的Append命令投递的,这应当是由Append命令专门描述的时间和日期。
在IMAP协议中定义了很多的命令,可用telnet来执行,例如Authenticate、List和Close等等,此处不再详述。
实现IMAP的不足
在利用服务器磁盘资源方面,IMAP不如POP3。由于使用POP时服务器端的邮件被下载到客户机的同时会删除,因而不占用额外空间用以存放旧的邮件。而IMAP服务器将保持旧的邮件,占用了额外空间,而且需要定期地删除旧邮件。
同时,由于用户查阅信息标题和决定下载哪些附件,也需要一定时间,因此链接时间也比POP方式长。
在应用方面,由于IMAP比较复杂,给开发者开发服务器和客户机的软件带来一些难题。对于ISP来说,采用IMAP意味着要花钱购买相关商业软件,同时会付出高额技术支撑费用,因而商用的实现方案还不多。
目前有一些国内的免费电子邮件站点提供IMAP4的服务,如广州的www.21cn.com,四川的mail.777.net.cn,北京的btamail.net.cn等。只要我们到对应网址申请账号,设置好我们的客户端软件后就可体会到不同于POP3的IMAP新特性。
----------------------- android培训、java培训、期待与您交流! ----------------------
在说线程的概念之前,我们必须知道什么是进程。这两个概念仅仅只有一字之差,但代表的是两个完全不同的概念。
进程:
在讲进程之前,先介绍什么是程序。程序是计算机指令的集合,它以文件形式存储在磁盘上,而进程就是一个执行中的程序,而每一个进程都有其独立的内存空间和系统资源。进程就是一个运行的程序,Windows 操作系统是支持多进程的操作系统,即同一时间可以执行多个程序,每个程序是在自己独立的内存空间内,使用自己被分配到的系统资源。其实,这种说法并不准确,一个 CPU 在某个时刻,实际上只能运行一个程序,即一个进程。所谓的支持多进程,其实就是 CPU 在交替轮流执行多个程序,例如,利用 Windows 操作系统可以一边听歌曲、一边上网等等。
线程:
线程是运行程序(进程)中单个顺序的小程序,一个进程可以由多个线程组成,而这多个线程共享同一个存储间这使得线程间的通信比较容易。在一个多进程的程序中,如果要切换到另一个进程,需要改变地址空间的位置。然而在多线程的程序中,就不会出现这种情况,因为他们位于同一个内存空间内,只需改变运行的顺可。 多线程指单个程序可通过同时运行多个不同线程,以执行不同任务。所谓同时,也要依据 CPU。如果是多个 CPU,则并发运行,如是一个 CPU,则根据系统具体情况,执行多个线程。
创建线程的方法一般有两种:
一种是通过实现 Runnable 接口的方式创建线程。
一种是通过从 Thread 类中去继承来创建线程。
1.通过 Runnable 接口的方式创建线程
在 Java 中,线程是一种对象,但不是所有的对象都可以称为线程,只有实现了 Runnable
接口的类,才可以称为线程。下面先看看 Runnable 接口的定义。
<!--EndFragment-->
Public interface Runnable
{
public abstract void run();
}
Runnable 接口只有一个抽象方法“run()”,要实现这个接口,只要实现这个抽象方法
就可以。只要实现了这个接口的类,才有资格称为线程。创建线程的结构:
Thread t=new Thread(runnable 对象);
Runnable 对象是指实现了 Runnable 接口类的对象。当线程执行时,Runnable 对象中的
“run()”方法会被调用,如果想要运行上面创建的线程,还需要调用一个 Thread 类的方法。
2.通过继承 Thread 类来创建线程:
其实 Thread 类本身也实现了 Runnable 接口,所以只要让一个类能够继承 Thread 类,并
----------------------- android培训、java培训、期待与您交流! ----------------------
详情请查看:http://edu.csdn.net/heima