《java面试题8.pdf》由会员分享,可在线阅读,更多相关《java面试题8.pdf(77页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、E J B 方面1、E J B 2.0有哪些内容?分别用在什么场合?E J B 2.0 和 E J B 1.1 的区别?答:规范内容包括B ean 提供者,应用程序装配者,E J B 容器,E J B 配置工具,E J B 服务提供者,系统管理员。这里面,E J B 容器是E J B 之所以能够运行的核心。E J B 容器管理着E J B 的创建,撤 消,激 活,去 活,与 数 据 库 的 连 接 等 等 重 要 的 核 心 工 作。J S P,S er v l et,E J B,J N D I,J D B C,J M S.2、E J B 与 J A V A B E A N 的区别?答:J a
2、v a B ean 是可复用的组件,对 J av a B ean 并没有严格的规范,理论上讲,任何一个J av a类都可以是一个B ean。但通常情况下,由于J av a B ean 是被容器所创建(如 T o m cat)的,所以 J av a B ean 应具有一个无参的构造器,另外,通常J av a B ean 还要实现S er i al i z abl e接口用于实现B ean 的持久性。J av a B ean 实际上相当于微软C O M 模型中的本地进程内C O M 组件,它是不能被跨进程访问的。E n t er p r i s e J av a B ean 相 当 于 D C O
3、 M,即分布式组件。它是基于J av a的远程方法调用(R M I)技术的,所以E J B 可以被远程访问(跨进程、跨计算机)。但 E J B必须被布署在诸如W ebs p er e、W ebL o gi c这样的容器中,E 川客户从不直接访问真正的E J B 组件,而是通过其容器访问。E J B 容器是E J B 组件的代理,E J B 组件由容器所创建和管理。客户通过容器来访问真正的E J B 组件。3、E J B 的基本架构答:一个E J B 包括三个部分:R em o t e I n t er face 接口的代码p ack age B ean s;i m p o r t j av a
4、x.ej b.E J B O bj ect;i m p o r t j av a.r m i.R em o t eE x cep t i o n;p u bl i c i n t er face A dd ex t en ds E J B O bj ect/s o m e m et h o d decl ar eH o m e I n t er face 接口 的代码p ack age B ean s;i m p o r t j av a.r m i.R em o t eE x cep t i o n;i m p o r t j aax.ej b.C r eat eE x cep t i o
5、n;i m p o r t j av ax.ej b.E J B H o m e;p u bl i c i n t er face A ddH o m e ex t en ds E J B H o m e(/s o m e m et h o d decl ar eE J B 类的代码p ack age B ean s;i m p o r t j av a.r m i.R em o t eE x cep t i o n;i m p o r t j av ax.ej b.S es s i o n B ean;i m p o r t j av x.ej b.S es s i o n C o n t
6、ex t;p u bl i c cl as s A ddB ean I m p l em en t s S es s i o n B ean(/s o m e m et h o d decl ar e)J 2 E E,M V C 方面1、M V C 的各个部分都有那些技术来实现?如何实现?答:M V C 是 M o del V i ewC o n t r o l l er 的简写。”M o del”代表的是应用的业务逻辑(通过J av aB ean,E J B 组件实现),V i ew”是应用的表示面(由 J S P 页面产生),C o n t r o l l er”是提供应用的处理过程控制(
7、一般是一个S er v l et),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。2、应用服务器与W E B S E R V E R 的区别?希望大家补上,谢谢3、J2EE是什么?答:J e 2 2 是 S u n 公 司 提 出 的 多 层(multi-diered),分 布 式(distributed),基于组件(componenl-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次
8、包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。4、WEB SERVICE 名词解释。JSWDL 开发包的介绍。JAXP、JAXM 的解释。SOAP、UDDI,WSDL 解释。答:Web Service描述语言WSDLSOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML编码信息的轻量级协议。UDDI的目的是为电子商务建立标准;UDDI是一套基于W eb的、分布式的、为 Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Servi
9、ce注册,以使别的企业能够发现的访问协议的实现标准。5、BS与 CS的联系与区别。希望大家补上,谢谢6、STRUTS的应用(如STRUTS架构)答:Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的frameworko 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。Struts有如下的主要功能:一.包含一个 controller servlet,能将用户的请求发送到相应的Action对象。.J S P 自山tag库,并且在controller servlet中提供关联支持,帮助开
10、发员创建交互式表单应用。三.提供了一系列实用对象:XML处理、通 过 Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。设计模式方面1、开发中都用到了那些设计模式?用在什么场合?答:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到了 M V C 的设计模式。用来开发J S P/S e r v l e t 或者J 2 E E 的相关应用。简单工厂模式等。2、U M L 方面答:标准建模语言U M L。用例图,静态图(包括类图、对象图和包图
11、),行为图,交互图(顺序图,合作图),实现图,J a v a S c r i p t 方面1、如何校验数字型?v a r r e=/*d l,8$|.d l,2$/;v a r s t r=d o c u m e n t.f o r m l.a l l(i).v a l u e:v a r r=s t r.m a t c h(r e);i f (r=n u l l)(s i g n=-4;b r e a k;)e l s e d o c u m e n t,f o r m l.a l l(i).v a l u e=p a r s e F l o a t(s t r);)C O R BA方面1、
12、C O R BA是什么?用途是什么?答:C O R BA 标准是公共对象请求代理结构(C o m m o n O b j e c t R e q u e s t Br o k e r Ar c h i t e c t u r e),山对象管理组织(O b j e c t M a n a g e m e n t Gr o u p,缩 写 为 O M G)标准化。它的组成是接口定义语言(I D L),语言绑定(b i n d i n g:也译为联编)和允许应用程序间互操作的协议。其目的为:用不同的程序设计语言书写在不同的进程中运行为不同的操作系统开发L I N U X方面1、L I N U X下线
13、程,GD I 类的解释。答:L I N U X实现的就是基于核心轻量级进程的“一 对 线 程 模 型,个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中实现。GD I 类为图像设备编程接口类库。1、面向对象的三个基本特征2、方法重载和方法重写的概念和区别3、接口和内部类、抽象类的特性4、文件读写的基本类*5、串行化的注意事项以及如何实现串行化6、线程的基本概念、线程的基本状态以及状态之间的关系7、线程的同步、如何实现线程的同步8、几种常用的数据结构及内部实现原理。9、S o c k e t 通信(T C P、U D P 区别及J a v a 实现方式)*1 0、J a v a 的
14、事件委托机制和垃圾回收机制1 1、J D BC 调用数据库的基本步骤*1 2、解析XM L 文件的几种方式和区别1 3、J a v a 四种基本权限的定义1 4、J a v a 的国际化二、J S P1、至少要能说出7 个隐含对象以及他们的区别*2 f o r w a r d 和 r e d i r e c t 的区别3、J S P 的常用指令三、s e r v l e t1、什么情况下调用d o Ge t()和 d o P o s t ()?2、s e r v l e t 的 i n i t()方法和s e r v i c e。方法的区别3、s e r v l e t 的生命周期4、如何现实
15、s e r v l e t 的单线程模式5、s e r v l e t 的配置6、四种会话跟踪技术四、E JB*1、E 川容器提供的服务主要提供声明周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务。2、E JB 的角色和三个对象E JB 角色主要包括B ea n开发者 应用组装者 部署者 系统管理员E JB 容器提供者E JB 服务器提供者三个对象是 Rem ote(Loca l)接口、Hom e(Loca l Hom e)接口,B ea n 类2、E 川的儿种类型会 话(S essi on)B ea n,实 体(E nti ty)B ea n 消息驱动的(Messa g
16、e D ri v en)B ea n会话B ea n又可分为有状态(S ta teful)和无状态(S ta tel ess)两种实体B ea n可分为B ea n管理的持续性(B MP)和容器管理的持续性(C MP)两种3、bea n实例的生命周期对于 S ta tel ess S essi on B ea n E nti ty B ea n、Messa g e D ri v en B ea n 一般存在缓冲池管理,而对于E nti ty B ea n和 S ta teful l S essi on B ea n存在C a ch e管理,通常包含创建实例,设置上下文、创建E JB O bj
17、ect(crea te)、业务方法调用、rem ov e等过程,对于存在缓冲池管理的 B ea n,在 crea te之后实例并不从内存清除,而是采用缓冲池调度机制不断重用实例,而对于存在C a ch e管理的B ea n则通过激活和去激活机制保持B ea n的状态并限制内存中实例数旦里。4、激活机制以 S ta teful l S essi on B ea n为例:其 C a ch e大小决定了内存中可以同时存在的B ea n实例的数量,根据MRU 或 NRU 算法,实例在激活和去激活状态之间迁移,激活机制是当客户端调用某个E JB 实例业务方法时,如果对应E JB O bj ect发现自己
18、没有绑定对应的B ea n实例则从其去激活B ea n存储中(通过序列化机制存储实例)回 复(激活)此实例。状态变迁前会调用对应的 ej bA cti v e 和 ej bP a ssi v a te 方法。5、rem ote接口和h om e接口主要作用rem ote接口定义了业务方法,用于E JB 客户端调用业务方法h om e接口是E JB 工厂用于创建和移除查找E JB 实例6、客服端调用E JB 对象的几个基本步骤-、设置JND I服务工厂以及JND 1 服务地址系统属性二、查找Hom e接口三、从 Hom e接口调用C rea te方法创建Rem ote接口四、通过Rem ol e
19、接口调用其业务方法五、数据库1、存储过程的编写2、基本的S QL语句六、w ebl og i c1、如何给w ebl og i c指定大小的内存?在启动W ebl og i c的脚本中(位于所在D omi an对应服务器目录下的st ar t S e r ve r N ame),增加se t M E M _A R G S=-X ms3 2 m-X mx 2 0 0 m,可以调整最小内存为 3 2 M,最大 2 0 0 M2、如何设定的w e bl og i c 的热启动模式(开发模式)与产品发布模式?可以在管理控制台中修改对应服务器的启动模式为开发或产品模式之一。或者修改服务的启动文件或者 c
20、 omme nv 文件,增加 se t P R O D U C T I 0 N _M 0 D E=t r ue 13、如何启动时不需输入用户名与密码?修改服务启动文件,增 加 W L S _U S E R 和 W L S _P W 项。也可以在boot,p r op e r t i e s文件中增加加密过的用户名和密码.4、在 w e bl og i c 管理制台中对一个应用域(或者说是一个网站,D omai n)进 行 j ms及 e j b或连接池等相关信息进行配置后,实际保存在什么文件中?保存在此D omai n的 c onf i g.x ml 文件中,它是服务器的核心配置文件。5、说说
21、w e bl og i c 中一个D omai n的缺省目录结构?比如要将-个简单的h e l oW or l d.j sp 放入何目录下,然的在浏览器上就可打入h t t p:主机:端口号h e l l ow or d,j s p 就可以看到运行结果了?又比如这其中用到了一个自己写的j avaB e an该如何办?D omai n目录、服务器目录ap p l i c at i ons,将应用目录放在此目录下将可以作为应用访问,如果是W e b应用,应用目录需要满足W e b应用目录要求,j sp 文件可以直接放在应用目录中,J avabe an需要放在应用目录的W E B T N F 目录的
22、c l asse s目录中,设置服务器的缺省应用将可以实现在浏览器上无需输入应用名。6、如何查看在w e b l og i c 中已经发布的E J B?可以使用管理控制台,在它的D e p l oy me nt 中可以查看所有已发布的E J B7、如何在w e bl og i c 中进行ssl 配置与客户端的认证配置或说说j 2 e e (标准)进 行 ssl 的配置缺省安装中使用D e mol d e nt i t y,j k s和 D e moT r ust,j k s K e y S t or e 实 现 S S L,需要配置服务器使 用 E nabl e S S L,配置其端口,在产品
23、模式下需要从CA获取私有密钥和数字证书,创建i d e nt i t y 和 t r ust k e y st or e,装载获得的密钥和数字证书。可以配置此S S L 连接是单向还是双向的。8、在 w e bl og i c 中发布e j b需涉及到哪些配置文件不 同 类 型 的 EJB涉 及 的 配 置 文 件 不 同,都 涉 及 到 的 配 置 文 件 包 括e j b-j ar.x ml,w e bl og i c-e j b-j ar.x ml C M P 实体 B e an一般还需要 w e bl og i c-c mp-r d bms-j ar.x ml9、E J B 需直接实现
24、它的业务接口或H ome 接口吗,请简述理由.远程接口和H o m e 接口不需要直接实现,他们的实现代码是由服务器产生的,程序运行中对应实现类会作为对应接口类型的实例被使用。10、说说在we b l o g i c 中开发消息Be a n 时的p e rs i s t e n t 与 n o n-p e rs i s t e n 的差别p e rs i s t e n t 方式的M DB可以保证消息传递的可靠性,也就是如果E JB容器出现问题而JM S服务器依然会将消息在此M DB可用的时候发送过来,而 n o n p e rs i s t e n t 方式的消息将被丢弃。11、说说你所熟悉
25、或听说过的j 2e e 中的几种常用模式?及对设计模式的些看法Se s s i o n F a c a d e P a t t e rn:使用 Se s s i o n Be a n 访问 E n t i t y Be a nM e s s a g e F a c a d e P a t t e rn:实现异步调用E JB C o m m a n d P a t t e rn:使用 C o m m a n d Ja v a Be a n s 取代 Se s s i o n Bo a n,实现轻量级访问Da t a T ra n s f e r O b j e c t F a c t o ry:
26、通过 DT O F a c t o ry 简化 E n t i t y Be a n 数据提供特性G e n e ri c At t ri b u t e Ac c e s s:通过 At t i b u t e Ac c e s s 接口简化 E n t i t y Be a n 数据提供特性Bu s i n e s s In t e rf a c e:通过远程(本地)接口和Be a n 类实现相同接口规范业务逻辑一致性E J B 架构的设计好坏将直接影响系统的性能、可扩展性、可维护性、组件可重用性及开发效率。项目越复杂,项目队伍越庞大则越能体现良好设计的重要性f ro m j a v a-
27、c n本 贴 来 自 Z DN e t C hi n a 中 文 社 区 ht t p:/b b s.z d n e t.c o m.c n ,本 贴 地 址:ht t p:/b b s.z d n e t.c o m.c n/v i e wt hre a d.p hp?t i d=l 127 4322,Arra y L i s t 和 V e c t o r 的区别,H a s hM a p 和 H a s ht a b l e 的区别答:就 Arra y L i s t 与 V e c t o r主要从二方面来说.一.同步性:V e c t o r是线程安全的,也就是说是同步的,而 Arr
28、a y L i s t 是线程序不安全的,不是同步的二.数据增长:当需要增长时,V e c t o r默认增长为原来一培,而 Arra y L i s t 却是原来的一半就 H a s hM a p 与 H a s hT a b l e 主要从三方面来说。一.历史原因:H a s ht a b l e 是基于陈旧的Di c t i o n a ry 类的,H a s hM a p 是 Ja v a 1.2 引进的M a p接口的一个实现二.同步性:H a s ht a b l e 是线程安全的,也就是说是同步的,而 H a s hM a p 是线程序不安全的,不是同步的三.值:只有H a s
29、hM a p 可以让你将空值作为一个表的条目的k e y或 va lue3,c h a r型变量能不能定义为一个中文?为什么?答:是能够定义成为一个中文的,因为J a va 中以unic od e 编码,一个c h a r占 1 6 个字节,所以放一个中文是没问题的4,多线程有几种表示方法,都是什么?同步有几种实现方法,都是什么?答:多线程有两种实现方法,分别是继承Th re a d 类与实现R unna b le 接口同步的实现方面有两种,分别是sync h ronize d,wa it与notif y5,继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?答:父类:pa c ka
30、 g e te st;pub lic c la ss F a th e rC la sspub lic F a th e rC la ss0(S yste m,out.print I n(z/F a th e rC la ss C re a te );)子类:pa c ka g e te st;import te st.F a th e rC la ss;pub lic c la ss C h iI d C la ss e xte nd s F a th e rC la ss(pub lic C h iI d C la ss()S yste m,out.print I n(zzC h i I
31、d C la ss C re a te );pub lic sta tic void ma in(S tring a rg s)F a th e rC la ss f c =ne w F a th e rC la ssO;C h ild C la ss c c =ne w C h ild C la ss();输出结果:C:j a va te st.C h ild C la ssF a th e rC la ss C re a teF a th e rC la ss C re a teC h ild C la ss C re a te6,内部类的实现方式?答:示例代码如下:pa c ka g e
32、 te st;pub lic c la ss Oute rC la ss(priva te c la ss I nte rC la ssIpub lic I nte rC la ss()S yste m,out.printin(I nte rC la ss C re a te );)pub lic Oute rC la ss()(I nte rC la ss ic =ne w I nte rC la ss();S yste m.out.printI n(Oute rC la ss C re a te );pub lic sta tic void ma in(S tring a rg s)(Ou
33、te rC la ss oc =ne w Oute rC la ss();)I输出结果:C:j a va te st/Oute rC la ssI nte rC la ss C re a teOute rC la ss C re a te再一个例题:pub lic c la ss Oute rC la ss(priva te d oub le d l=1.0;/inse rt c od e h e reIYou ne e d to inse rt a n inne r c la ss d e c la ra tion a t line 3.Wh ic h two inne r c la ssd
34、 e c la ra tions a reva lid?(C h oose two.)A.c la ss I nne rOne pub lic sta tic d oub le me th od a()re turn d l;)B.pub lic c la ss I nne rOne sta tic d oub le me th od a()re turn d l;C.priva te c la ss I nne rOne d oub le me th od a()re turn d l;D.sta tic c la ss I nne rOne prote c te d d oub le me
35、 th od a()re turn d l;E.a b stra c t c la ss I nne rOne(pub lic a b stra c t d oub le me th od a();)说明如下:一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。故 A、B错静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;re turn d l 出错。故 D错三.非静态内部类的非静态成员可以访问外部类的非静态变量。故 C正确四.答案为C、E7,垃圾回收机制,如何优化程序?8,float 型 float f=3.4 是否正确?答:不正确。精度不准确,应该用强
36、制类型转换,如下所示:float f=(float)3.49、介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)?答:Collection FrameWork 如下:CollectionH/ist卜LinkedList|-ArrayListI LVector|LStackY etM apHlashtableHlashMapLWeakHashMapCollection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)Map提 供key到value的映射10、Java中异常处理机制,事件机制?答:使用
37、New操作创建对象后,JAVA虚拟机自动该对象分配内存并保持跟踪,JAVA虚拟机能判断出对象是否还被弓I用,对不再被引用的对象释放其占用的内存.H JAVA中的多形与继承?希望大家补上,谢谢12、抽象类与接口?答:抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。13、J a v a的通信编程,编程题(或问答),用J AVA S O CK ET编程,读服务器几个字符,再写入本地显示?答:S erver端程序:package test;import .import java.io.public class S erverpriv
38、ate S erverS ocket ss;private S ocket socket;private BufferedR eader in;private P rintW riter out;public S erver()Itry(ss=new S erverS ocket(10000);while(true)(socket=ss.accept();S tring R emotelP =socket.getlnetAddressO.getH ostAddress();S tring R emoteP ort=:,z+socket.getL ocalP ort();S ystem,out.
39、println(,A client come in!I P:,/+R emoteI P+R emoteP ort);in=new BufferedR eader(newI nputS treamR eader(socket,getI nputS tream();S tring line=in.readL ineO ;S ystem,out.printlnCT leint send is:+line);out=new P rintW riter(socket.getO utputS treamO,true);out.printin(z,Your M essage R eceived!”);out
40、.close();in.close();socket,close();)catch(lO Exception e)out.printin(wrong);IIpublic static void main(S tring args)J AVA面试题集基础知识:1.C+或 J ava中的异常处理机制的简单原理和应用。当 J AVA程序违反了 J AVA的语义规则时,J AVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2 种情况。一 种 是 J AVA类库内置的语义检查。例如数组下标越界,会引发I ndexO utO fBoundsException;访问 null 的对象时会引发 N
41、ullP ointerException。另一种情况就是J AVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自山选择在何时用 throw关键字引发异常。所有的异常都是java.lang.T howable的子类。2.J ava的接口和C+的虚类的相同和不同处。由于J ava不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是
42、public.一个类可以实现多个接口。3.垃圾回收的优点和原理。并考虑2 种回收机制。J ava语言中一个显著的特点就是引入了垃圾回收机制,使 C+程序员最头疼的内存管理的问题迎刃而解,它使得J a va 程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,J a va 中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机
43、制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。4 .请说出你所知道的线程同步的方法。wa i t。:使一个线程处于等待状态,并且释放所持有的对象的l o c k。s l e e p。:使个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉I n t e r r up t e d E x c e p t i o n 异常。n o t i f y。:唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由J V M 确定唤醒哪个线程,而且不是按优先级。A l l n o t i t y O:唤醒所有处入等待状态的线程,注意并不是给所有唤醒线
44、程一 个对象的锁,而是让它们竞争。5 .请讲一讲析构函数和虚函数的用法和作用。6 .E r r o r 与 E x c e p t i o n 有什么区别?E r r o r 表示系统级的错误和程序不必处理的异常,E x c e p t i o n 表示需要捕捉或者需要程序进行处理的异常。7 .在 j a va 中一个类被声明为f i n a l 类型,表示了什么意思?表示该类不能被继承,是顶级类。8 .描述一下你最常用的编程风格。9.h e a p 和 s t a c k 有什么区另限栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素1
45、 0 .如果系统要使用超大整数(超 过 l o n g 长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算)。p u bl i c c l a s s Bi g l n t()i n t Ar r O n e =n e w Ar r 0n e 1000;S t r i n g i n t S t r i n g=;p u bl i c i n t Ar r(S t r i n g s)i n t S t r i n g =s;f o r(i n t i=0;i 0);/t hr o w s a n As s e r t io n e r r o r if
46、 a cha r 或者 b y t e。l o n g,s t r in g 都不能作用于 s w t ich。4 2,编程题:写一个Sin g l et o n 出来。Sin g l et o n 模式主要作用是保证在J a v a 应用程序中,一个类C l a s s 只有一个实例存在。一般Sin g l et o n 模式通常有几种种形式:第一种形式:定义一个类,它的构造函数为p r iv a t e的,它有一个s t a t ic的 p r iv a t e的该类变量,在类初始化时实例话,通过一个p u b l ic的 g et l n s t a n ce方法获取对它的引用,继而调用
47、其中的方法。p u b l ic cl a s s Sin g l et o n p r iv a t e Sin g l et o n ()在自己内部定义自己一个实例,是不是很奇怪?注意这是p r iv a t e只供内部调用p r iv a t e s t a t ic Sin g l et o n in s t a n ce=n ew Sin g l et o n();这里提供了一个供外部访问本cl a s s 的静态方法,可以直接访问p u b l ic s t a t ic Sin g l et o n g et l n s t a n ce()r et u r n in s t a
48、 n ce;)第二种形式:p u b l ic cl a s s Sin g l et o n (p r iv a t e s t a t ic Sin g l et o n in s t a n ce=n u l l;p u b l ic s t a t ic s y n chr o n iz ed Sin g l et o n g et l n s t a n ce()这个方法比上面有所改进,不用每次都进行生成对象,只是第一次使用时生成实例,提高了效率!if(in s t a n ce二 二 n u l l)in s t a n ce=n ew Sin g l et o n ();r et
49、 u r n in s t a n ce;I其他形式:定义一个类,它的构造函数为p r iv a t e的,所有方法为s t a t ic的。一般认为第一种形式要更加安全些H a s ht a b l e 和 H a s hMa pH a s ht a b l e 继承自 D ict io n a r y 类,而 H a s hMa p 是 J a v a l.2 引进的 Ma p in t er fa ce 的一个实现H a s hMa p 允许将n u l l 作为一个en t r y 的 k ey 或者v a l u e,而 H a s ht a b l e不允许还有就是,H a s h
50、Ma p 把 H a s ht a b l e 的 co n t a in s 方法去掉了,改成 co n t a in s v a l u e 和co n t a in s Key o 因为co n t a in s 方法容易让人引起误解。最大的不同是,H a s ht a b l e的方法是Sy n chr o n iz e的,而 H a s hMa p 不是,在多个线程访问I l a s ht a b l e时,不需要自己为它的方法实现同步,而 H a s hMa p就必须为之提供外同步。Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差