您好,欢迎访问三七文档
Java基础总结文档2008-09-28作者:孙星1基础篇1.面向对象的三个基本特征面向对象的三个基本特征是:封装、继承、多态。封装封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。继承继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”。被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。在某些OOP语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。多态多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。实现多态,有二种方式:覆盖,重载。方法的重写【也叫覆盖】Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是不可以改变返回值的类型。Java基础总结文档2008-09-28作者:孙星2重载方法一定返回相同的数据类型且参数必须有区别.这里的区别是指(1)参数的类型不同(2)参数的顺序不同(3)参数的个数不同方法的覆盖方法的覆盖(override)是指子类重新定义从父类继承来的方法,实现自身的行为,而不是实现由父类定义的行为.方法的覆盖中需要注意的问题是:子类的重新定义父类已有的方法时,应保持与方法完全相同的头部声明,即应与父类有完全相同的方法名,返回类型和参数列表,否则就不是方法的覆盖,而是子类定义了自己的与父类无关的方法.父类的方法依然存在于子类中.方法的覆盖与域的隐藏的不同之处在于:子类隐藏父类的域只是使之不可见,父类的同名域在子类对象中仍然占有自己独立的内存空间,而子类方法对父类同名方法的覆盖将清除父类方法占用的内存空间,从而使父类方法在子类对象中不复存在.域的隐藏和方法的覆盖的意义在于:通过隐藏域和覆盖方法可以把父类的状态和行为改为自身的状态和行为,而对外又有同一的名字和接口,不失其继承性.继承,封装,多态的作用:继承可以扩展已存在的代码模块(类);封装可以隐藏实现细节,使得代码模块化;它们的目的都是为了——代码重用。多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。主要是为了实现接口重用。2.接口与抽象类的区别抽象类:抽象类就是有一个或多个抽象方法的类,抽象类不可以实列化,但可以声明抽象类变量。接口:接口是抽象类的变体,通过接口可以实现多继承,接口中所有的方法都是抽象的(没有方法体),接口只能定义staticfinal类型的成员变量,继承了接口的类必须实现接口中所有的方法。(1)接口不能有任何实现了的方法,而抽象类可以.(2)类可以继承(实现)许多接口,但只能继承一个父类.(3)类有严格的层次结构,而接口不是类层次结构的一部分,没有联系的类可以实现相同的接口.3.面向接口的优点(1)通过接口可以实现多继承。(2)使代码结构清晰,容易管理。4.集合框架总结1.集合框架结构图:1.Collection(接口)Set(接口)List(接口)HashSetTreeSetVertorArrayListLinkedListMap(接口)HashTableTreeMapHashMapJava基础总结文档2008-09-28作者:孙星3以下是对list接口下的类的比较说明:List:将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。实现list的类有ArrayList,LinkedList,和Vector等。Vector和ArrayList都支持可随需要而增长的动态数组。能够动态的增加或减少其大小。主要不同之处在于同步。除了两个只用于串行化的方法,没有一个ArrayList的方法具有同步执行的能力;相反,Vector的大多数方法具有同步能力,或直接或间接。因此,Vector是线程安全的,但ArrayList不是。这使得ArrayList要比Vector快速。Vector包含了许多不属于类集框架的从以前版本遗留下来的方法。由于ArrayList比Vector的访问速度要快,在这两个类作比较时,选用ArrayList比选用Vertor具有更快的速度和更高的性能。ArrayList和LinkedList比较。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历,而ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。Set:Set接口也是Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。HashSet扩展AbstractSet并且实现Set接口。它创建一个类集,该类集使用散列表进行存储。散列表通过使用称之为散列法的机制来存储信息。散列法的优点在于即使对于大的集合,它允许一些基本操作如add(),contains(),remove()和size()方法的运行时间保持不变。散列集合并没有确保其元素的顺序,因为散列法的处理通常不让自己参与创建排序集合。如果需要排序存储,另一种类集——TreeSet将是一个更好的选择。TreeSet为使用树来进行存储的Set接口提供了一个工具,对象按升序存储。访问和检索是很快的。在存储了大量的需要进行快速检索的排序信息的情况下,TreeSet是一个很好的选择。HashSet和TreeSet的比较:在各种Sets中,HashSet通常优于HashTree(插入、查找)。只有当需要产生一个经过排序的序列,才用TreeSet。Map接口Map接口常用的实现类有:HashMap和TreeMap。HashMap类使用散列表实现Map接口。散列映射并不保证它的元素的顺序。因此,元素加入散列映射的顺序并不一定是它们被迭代函数读出的顺序。TreeMap类通过使用树实现Map接口。TreeMap提供了按排序顺序存储关键字/值对的有效手段,同时允许快速检索。应该注意的是,不像散列映射,树映射保证它的元素按照关键字升序排序。说明:Map用put(k,v)/get(k),还可以使用containsKey()/containsValue()来检查其中是否含有某个key/value。Java基础总结文档2008-09-28作者:孙星4HashMap用于快速查找。在Map接口中,HashMap用的比较多,如果需要对集合中的元素进行排序,才可以用TreeMap,不需要排序就用HashMap。5.String和StringBuffer的区别JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。6.运行时异常与一般异常有何异同?异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。7.final,finally,finalize的区别。final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。8.GC是什么?为什么要有GC?GC是垃圾收集的意思(GabageCollection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。9.说出数据连接池的工作机制是什么?J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。10.Java中的异常处理机制的简单原理和应用。当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。11.请说出你所知道的线程同步的方法。wait():使一个线程处于等待状态,并且释放所持有的对象的lock。sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。Java基础总结文档2008-09-28作者:孙星512.请对以下在J2EE中常用的名词进行解释(或简单描述)web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEBAPPLICATION标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。EJB容器:Enterprisejavabean容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。JNDI:(JavaNaming&DirectoryInterface)JAVA命名目录服务。主要提供的功能是:提供一个
本文标题:JAVA常规面试题
链接地址:https://www.777doc.com/doc-5987868 .html