Java笔试题+答案.docx
《Java笔试题+答案.docx》由会员分享,可在线阅读,更多相关《Java笔试题+答案.docx(43页珍藏版)》请在冰豆网上搜索。
Java笔试题+答案
Java笔试题
1.J2EE是什么?
答:
Je22是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterprieseapplicationmodel).在这样的一个应用系统中
,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。
所属层次包括客户层(clietntier)组件,web层和组件,Business层和组件,企业信
息系统(EIS)层。
2.J2EE是技术还是平台还是框架?
答:
J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。
J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。
3.MVC的各个部分都有那些技术来实现?
如何实现?
答:
MVC是Model-View-Controller的简写。
"Model"代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),"View"是应用的表示面(由JSP页面产生),"Controller"是
提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。
这些组件可以进行交互和重用。
4.STRUTS的应用(如STRUTS架构)
答:
Struts是采用JavaServlet/JavaServerPages技术,开发Web应用程序的开放源码的framework。
采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架
。
Struts有如下的主要功能:
一.包含一个controllerservlet,能将用户的请求发送到相应的Action对象。
二.JSP自由tag库,并且在controllerservlet中提供关联支持,帮助开发员创建交互式表单应用。
三.提供了一系列实用对象:
XML处理、通过JavareflectionAPIs自动处理JavaBeans属性、国际化的提示和消息。
5.WEBSERVICE名词解释。
JSWDL开发包的介绍。
JAXP、JAXM的解释。
SOAP、UDDI,WSDL解释。
答:
WebServiceWebService是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得WebService能与其他兼容的组件进行互操作。
JAXP(JavaAPIforXMLParsing)定义了在Java中使用DOM,SAX,XSLT的通用的接口。
这样在你的程序中你只要使用这些通用的接口,当你需要改变具体的实现时候也不需要修改
代码。
JAXM(JavaAPIforXMLMessaging)是为SOAP通信提供访问方法和传输机制的API。
WSDL是一种XML格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操作。
这种格式首先对操作和消息进行抽象描述,然后将其绑定
到具体的网络协议和消息格式上以定义端点。
相关的具体端点即组合成为抽象端点(服务)。
SOAP即简单对象访问协议(SimpleObjectAccessProtocol),它是用于交换XML编码信息的轻量级协议。
UDDI的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为WebService提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web
Service注册,以使别的企业能够发现的访问协议的实现标准。
6.C/S与B/S区别:
答:
有如下八个方面的不同:
(1)硬件环境不同:
C/S一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务.
B/S建立在广域网之上的,不必是专门的网络硬件环境,例与电话上网,租用设备.信息自己管理.有比C/S更强的适应范围,一般只要有操作系统和浏览器就行
(2)对安全要求不同
C/S一般面向相对固定的用户群,对信息安全的控制能力很强.一般高度机密的信息系统采用C/S结构适宜.可以通过B/S发布部分可公开信息.
B/S建立在广域网之上,对安全的控制能力相对弱,可能面向不可知的用户。
(3)对程序架构不同
C/S程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑.
B/S对安全以及访问速度的多重的考虑,建立在需要更加优化的基础之上.比C/S有更高的要求B/S结构的程序架构是发展的趋势,从MS的.Net系列的BizTalk2000Exchange
2000等,全面支持网络的构件搭建的系统.SUN和IBM推的JavaBean构件技术等,使B/S更加成熟.
(4)软件重用不同
C/S程序可以不可避免的整体性考虑,构件的重用性不如在B/S要求下的构件的重用性好.
B/S对的多重结构,要求构件相对独立的功能.能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子
(5)系统维护不同
C/S程序由于整体性,必须整体考察,处理出现的问题以及系统升级.升级难.可能是再做一个全新的系统
B/S构件组成,方面构件个别的更换,实现系统的无缝升级.系统维护开销减到最小.用户从网上自己下载安装就可以实现升级.
(6)处理问题不同
C/S程序可以处理用户面固定,并且在相同区域,安全要求高需求,与操作系统相关.应该都是相同的系统
B/S建立在广域网上,面向不同的用户群,分散地域,这是C/S无法作到的.与操作系统平台关系最小.
(7)用户接口不同
C/S多是建立的Window平台上,表现方法有限,对程序员普遍要求较高
B/S建立在浏览器上,有更加丰富和生动的表现方式与用户交流.并且大部分难度减低,减低开发成本.
(8)信息流不同
C/S程序一般是典型的中央集权的机械式处理,交互性相对低
B/S信息流向可变化,B-BB-CB-G等信息、流向的变化,更像交易中心。
7.什么是JNDI
答:
(JavaNaming&DirectoryInterface)JAVA命名目录服务。
主要提供的功能是:
提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和
定位分布式应用程序的功能。
8.什么是JMS
答:
(JavaMessageService)JAVA消息服务。
主要实现各个应用程序之间的通讯。
包括点对点和广播
9.什么是JTA
答:
(JavaTransactionAPI)JAVA事务服务。
提供各种分布式事务服务。
应用程序只需调用其提供的接口即可。
10.开发中都用到了那些设计模式?
用在什么场合?
答:
每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。
通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的
工作。
主要用到了MVC的设计模式。
用来开发JSP/Servlet或者J2EE的相关应用。
简单工厂模式等。
11.、j2ee常用的设计模式?
说明工厂模式。
答:
Java中的23种设计模式:
Factory(工厂模式),Builder(建造模式),FactoryMethod(工厂方法模式),
Prototype(原始模型模式),Singleton(单例模式),Facade(门面模式),
Adapter(适配器模式),Bridge(桥梁模式),Composite(合成模式),
Decorator(装饰模式),Flyweight(享元模式),Proxy(代理模式),
Command(命令模式),Interpreter(解释器模式),Visitor(访问者模式),
Iterator(迭代子模式),Mediator(调停者模式),Memento(备忘录模式),
Observer(观察者模式),State(状态模式),Strategy(策略模式),
TemplateMethod(模板方法模式),ChainOfResponsibleity(责任链模式)
工厂模式:
工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同
的方法,但是这些方法针对不同的数据进行了不同的操作。
首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。
然后需要定义一个工厂类,工厂类可以根据
条件生成不同的子类实例。
当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。
12.UML方面
答:
标准建模语言UML。
用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图
13.RMI
RMI指的是远程方法调用(RemoteMethodInvocation)。
它是一种机制,能够让在某个Java虚拟机上的对象调用另一个Java虚拟机中的对象上的方法。
可以用此方法调用的任
何对象必须实现该远程接口。
调用这样一个对象时,其参数为"marshalled"并将其从本地虚拟机发送到远程虚拟机(该远程虚拟机的参数为"unmarshalled")上。
该方法终止时
,将编组来自远程机的结果并将结果发送到调用方的虚拟机。
如果方法调用导致抛出异常,则该异常将指示给调用方。
JAVA基础
1.如何获得数组的长度?
数组名.length
2.访问修饰符“public/private/protected/缺省的修饰符”的使用类?
public:
公共,均可访问
private:
私有的,同一个java类中可以访问.子类不能访问.
protected:
同一个包中的类都可访问.子类可以访问.
缺省,friendly:
当前类,同一个包,都可以访问.
作用域当前类同一package子孙类其他package
public√√√√
protected√√√×
friendly√√××
private√×××
3.AnonymousInnerClass(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
匿名内部类是没有名字的内部类,不能继承其它类,但一个内部类可以作为一个接口,由另一个内部类实现.
一、由于匿名内部类没有名字,所以它没有构造函数。
因为没有构造函数,所以它必须完全借用父类的构造函数来实例化,换言之:
匿名内部类完全把创建对象的任务交给了父类
去完成。
二、在匿名内部类里创建新的方法没有太大意义,但它可以通过覆盖父类的方法达到神奇效果,如上例所示。
这是多态性的体现。
三、因为匿名内部类没有名字,所以无法进行向下的强制类型转换,持有对一个匿名内部类对象引用的变量类型一定是它的直接或间接父类类型。
new<类或接口><类的主体>
匿名类
匿名类是不能有名称的类,所以没办法引用它们。
必须在创建时,作为new语句的一部分来声明它们。
这就要采用另一种形式的new语句,如下所示:
new<类或接口><类的主体>
这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。
它还创建那个类的一个新实例,并把它作为语句的结果而返回。
要扩展的类和要
实现的接口是new语句的操作数,后跟匿名类的主体。
如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。
如果匿名类实现了一个接口,它的主体必须实现接口的方
法。
注意匿名类的声明是在编译时进行的,实例化在运行时进行。
这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。
从技术上说,匿名类可被视为非静态的内部类,所以它们具有和方法内部声明的非静态内部类一样的权限和限制。
如果要执行的任务需要一个对象,但却不值得创建全新的对象(原因可能是所需的类过于简单,或者是由于它只在一个方法内部使用),匿名类就显得非常有用。
匿名类尤其适合
在Swing应用程序中快速创建事件处理程序。
exp:
returnnewContents(){
privateinti=11;
publicintvalue(){returni;}
};
这种奇怪的语法要表达的意思是:
“创建从Contents衍生出来的匿名类的一个对象”。
由new表达式返回的句柄会自动上溯造型成一个Contents句柄。
匿名内部类的语法其实要表达
的是:
classMyContentsextendsContents{
privateinti=11;
publicintvalue(){returni;}
}
returnnewMyContents();
若试图定义内部类,并想使用在匿名内部类外部定义的一个对象,则编译器要求外部对象必须是final属性.
publicclassParcel9{
publicDestination
dest(finalStringdest,finalfloatprice){
returnnewDestination(){
privateintcost;
//Instanceinitializationforeachobject:
{
cost=Math.round(price);
if(cost>100)
System.out.println("Overbudget!
");
}
privateStringlabel=dest;
publicStringreadLabel(){returnlabel;}
};
}
publicstaticvoidmain(String[]args){
Parcel9p=newParcel9();
Destinationd=p.dest("Tanzania",101.395F);
}
}
4.staticnestedclass和innerclass的不同?
nestedclass在c++中是嵌套类,innerclass在java中是内部类.不同就是在于是否有指向外部的引用上.静态内部类意味着创建一个static内部类的对象,不需要一个外部类对象;不
能从一个static内部类的一个对象访问到一个外部类的对象.
5.&和&&的区别
&是位运算符,表示按位与运算;&&是逻辑运算符,表示逻辑与(and)
6.Collection和Collections的区别
collection是集合类的上级接口,继承与它的接口主要是set和list
其中list必须以特定的顺序容纳元素;而一个set不能包含重复的元素.
映射(Map)一系列"键-值"对.可以返回自己键的一个set,一个包含自己值的list,或者包含自己(键-值)对的一个list.
均可构建自己的反复器.
collections类是针对集合类的一个帮助类.它提供一系列的静态方法对各种集合的搜索,排序,线程安全化等操作.
publicclassSimpleCollection{
publicstaticvoidmain(String[]args){
Collectionc=newArrayList();
for(inti=0;i<10;i++)
c.add(Integer.toString(i));
Iteratorit=c.iterator();
while(it.hasNext())
System.out.println(it.next());
}
}
7.什么时候用assert
assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。
在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个
正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。
一般来说,assertion用于保证程序最基本、关
键的正确性。
assertion检查通常在开发和测试时开启。
为了提高性能,在软件发布后,assertion检查通常是关闭的.
8.Strings=newString("xyz");创建了几个StringObject***
两个,一个字符对象,一个字符对象引用对象
9.math.round(11.5)和math.round(-11.5)
前者等于12,后者等于-11.round方法返回与参数最接近的长整数.参数加0.5,求其floor
10.shorts1=1;s1=s1+1;是否有错误?
shorts1=1;s1+=1;是否有错误?
前者s1+1返回一个int型,需要强制类型转换.
后者正确.
11.java种有没有goto?
有,为保留字.但是尚未使用.
12.Overload和Override的区别。
Overloaded的方法是否可以改变返回值的类型?
答:
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被
"屏蔽"了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
Overloaded的方法是可以改变返回值的类型
12.Overload和Override的区别。
Overloaded的方法是否可以改变返回值的类型?
答:
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类
与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。
子
类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类
型,则称为方法的重载(Overloading)。
Overloaded的方法是可以改变返回值的类型这个说法是错误的,多态是一种运行时的行为,而不是编译时的行为。
Overriding属于运行时
的行为,而Overloading是编译时的行为。
具体请参照thinkinjava中关于多态的描述
13.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
是用==还是equals()?
它们有何区别
答:
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。
equals()是判读两个Set是否相等
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值
14.给我一个你最常见到的runtimeexception?
答:
常见的运行时异常有如下这些
ArithmeticException(异常的运算条件),
ArrayStoreException(向一个对象数组存放一错误类型的对象时)BufferOverflowException,BufferUnderflowException,CannotRedoException,CannotUndoException,
ClassCastException,CMMException,ConcurrentModificationException,DOMException,EmptyStackException,IllegalArgumentException,IllegalMonitorStateException,
IllegalPathStateException,IllegalStateException,ImagingOpException,IndexOutOfBoundsException,MissingResourceException,NegativeArraySizeException,
NoSuchElementException,NullPointerException,ProfileDataException,ProviderException,RasterFormatException,SecurityException,SystemException,
UndeclaredThrowableException,UnmodifiableSetException,UnsupportedOperationException..
15.error和exception有什么区别?
答:
error表示恢复不是不可能但很困难的情况下的一种严重问题。
比如说内存溢出。
不可能指望程序能处理这样的情况
exception表示一种设计或实现问题。
也就是说,它表示如果程序运行正常,从不会发生的情况
16.List,Set,Map是否继承自Collection接口
答:
List,Set是,Map不是
17.abstractclass和interface的区别
答:
声明方法的存在而不去实现它的类叫虚拟类(abstractclass).它用于创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况.不能创建abstract
class的实例.但是可以声明一个abstractclass变量,将其指向其具体子类的一个实例.不能有抽象构造函数或抽象静态方法.Abstract类的子类为它们父类中的所有抽象方法提供
实现,否则它们也是抽象类为。
取而代之,在子类中实现该方法。
知道其行为的其它类可以在类中实现这些方法.
接口(interface)是抽象类的变体。
在接口中,所有方法都是抽象的。
多继承性可通过实现这样的接口而获得。
接口中的所有方法都是抽象的,没有一个有程序体