当前位置:文档之家› 常见JAVA面试题

常见JAVA面试题

名词解释:1.HTTP:Hypertext Transfer Protocol2.J2EE:Java 2 Platfore,Enterprise Edition3.JNDI:Java Naming and Directory Interface4.SOAP:Simple Object Access Protocol5.UDDI:Universal Description Discovery and Integration6.OOP:Object Oriented Programming7.AOP:Aspect Oriented Programming8.IOC:Inversion of Control9.DI:Dependence Injection10.Web:World Wide Web11.ORM:Object/Relation Mapping12.DOM:Document Object Model13.TCP: Transmission Control Protocol14.UDP : User Datagram Protocol15.IP : Internet Protocol编程基础:1.描述面向对象特征?请一个例子说明,比方说车?面向对象的4个基本特征:封装性、继承性和多态性。

a)所有东西都是对象。

b)程序是一大堆队形的组合。

c)每个对象都有自己的存储空间,可容纳其他对象。

d)每个对象都有一种类型。

e)同一类所有对象都能接收相同的消息。

封装是面向对象编程的特征之一,也是类和对象的基本特征。

封装将数据以及加在这些数据上的操作组织在一起,成为有独立意义的构件。

外部无法直接访问这些封装了的数据,从而保证了这些数据的正确性。

如果这些数据发成了差错,也很容易定位错误是由哪些操作引起的。

继承是一种联接性的层次模型,并且允许和鼓励类的重用,他提供了一种明确表述共性的方法。

对象的一种新类可以从现有的类中派生,这个过程称之为类的继承。

新类继承了原始类的特征,新类称之为原始类的派生类(子类),而原始类称之为新类的基类(父类)。

派生类可以修改或增加新的方法使之更适合特殊的需求。

这也体现了大自然中一般与特殊的关系。

继承性很好的解决了软件的可重用问题。

比如说:所有的windows应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来的。

但是有的应用程序用于文字处理,有的程序用于绘图,这是由于派生出了不同的子类,各个子类添加了不同的特性。

多态性是指允许不同的类的对象对同一消息做出响应。

比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同,又比如,同样的选择“编辑”、“粘贴”操作,在字处理程序和绘图程序中有不同的效果。

多态性包括参数化多态性和运行时多态性,多态语言具有灵活。

抽象,行为共享、代码共享的优势,很好解决了应用程序函数同名问题。

2.abstractclass和interface有什么区别?声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。

不能创建abstract 类的实例。

然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。

不能有抽象构造函数或抽象静态方法。

Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。

取而代之,在子类中实现该方法。

知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。

在接口中,所有方法都是抽象的。

多继承性可通过实现这样的接口而获得。

接口中的所有方法都是抽象的,没有一个有程序体。

接口只可以定义static final成员变量。

接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。

当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。

然后,它可以在实现了该接口的类的任何对象上调用接口的方法。

由于有抽象类,它允许使用接口名作为引用变量的类型。

通常的动态联编将生效。

引用可以转换到接口类型或从接口类型转换。

3.char型变量中能不能存贮一个中文汉字?为什么?是能够定义成为一个中文的,因为java中以unicode编码,一个char个16个字节,所以放一个中文是没问题的。

4.谈谈final,finally,finalize的区别。

Final—用于声明属性、方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。

因此一个类不能既被声明为abstract的,又被声明为final 的。

将变量或方法声明为final,可以保证它们在使用中不被改变。

被声明为final 的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。

被声明为final的方法也同样只能使用,不能重载。

Finally—是异常处理语句结构的一部分,表示问题执行。

在异常处理时提供finally 块来执行任何清除操作。

如果抛出一个异常,那么相匹配的catch 子句就会执行,然后控制就会进入finally 块(如果有的话)。

Finalize—是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等Object类的一个方法。

Java 技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。

这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。

它是在Object 类中定义的,因此所有的类都继承了它。

子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。

finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。

5.匿名内部类是否可以作为父类被其他类继承,或作为接口被实现?匿名内部类不能被继承,也不能被实现,因为他没有名字。

而一个内部类,只要有名字,就可以作为父类被继承,也可以作为接口被实现。

6.Java使用接口比使用继承有哪些更多的好处?由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现在的单继承机制不能满足要求。

与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。

当一个类实现接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下都行public static,所有方法默认情况下是public,一个类可以实现多个接口。

7.对象实例化方式?有什么区别?直接new对象,Class.forName(xxx.xx.xx),Spring的注入机制,反射。

Class.forName(xxx.xx.xx)返回一个类首先你要明白在Java里面任何class都要装载在虚拟机上才能运行。

这句话就是装载类用的(和new不一样,要分清楚)。

可以考虑一下这个问题,给出一个字符串变量,他代表一个类的包名和类名,怎样实例化它?只有提到的这个方法了,不过要再加一点。

A a=new A();是一样的效果。

Spring将会使用默认的构造方法来建立Bean实例好处是调用静态工厂方法的对象不用了解对象建立细节。

8.类反射的作用和使用场合?Reflection是Java被视为动态(或准动态)语言的一个关键性质。

这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public,static等等)、superclass(例如Object)、实现之interfaces(例如Clonable),也包括fields和methods的所有信息,并可于运行时改变field内部唤起methods。

Java有着一个非常突出的动态相关机制:Reflection。

这个字的意思是“反射、映象、倒影”,用在Java身上指的是我们可以运行时加载、探知、使用编译期间完全未知的classes。

换句话说,Java程序可以加载一个运行时才得知的名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其field设值、或唤起其methods1。

这种“看透class”的能力(the ability of the program to examineitself)被称为introspection(内省、内观、反省)。

Reflection和introspection是常被并提的两个术语。

涉及到类和方法主要有:ng.Class,以及ng.Reflect中的Method、Field、Constructor等等classes。

9.序例化的作用?序例化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。

序列化分为两大部分:序例化和反序例化。

序例化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。

反序例化就是打开字节流并重构对象。

对象序例化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。

恢复数据的对象实例。

序例化的什么特点:如果某个类能够被序例化,其子类也可以被序例化。

声明为static和transient 类型的成员数据不能被序例化。

因为static代表类的状态,transient代表对象的临时数据。

什么时候使用序例化:对象序例可以实现分布式对象。

主要应用例如:RMI要利用对象序例化运行远程主机上的服务,就像在本机上运行对象时一样。

Java对象序例化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。

可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。

利用对象序例化可以进行对象的“深复制”,即复制对象本身引用的对象本身。

序例化一个对象可能得到整个对象序例。

可以看看接口java.io.serializable的中文解释:Serializablepublic interface Serializable类通过实现java.io.Serializable 接口以启用其序列化功能。

未实现此接口的类将无法使其任何状态序列化或反序列化。

可序列化类的所有子类型本身都是可序列化的。

序列化接口没有方法或字段,仅用于标识可序列化的语义。

要允许不可序列化类的子类型序列化,可以假定该子类型负责保存和还原超类型的公用(public)、受保护的(protected) 和(如果可访问)包(package) 字段的状态。

仅在子类型扩展的类有一个可访问的无参数构造方法来初始化该类的状态时,才可以假定子类型有此责任。

如果不是这种情况,则声明一个类为可序列化类是错误的。

该错误将在运行时检测到。

在反序列化过程中,将使用该类的公用或受保护的无参数构造方法初始化不可序列化类的字段。

相关主题