020XXjava面试题全攻略.docx
JAVA程序员面试32问第一,谈诙Iina1.finally,finalize的区别.tinal-修饰符关健字如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为abstract的,又被比明为final的.将变Jit或方法油明为final,可以保证它们在使用中不被改变。被声明为final的变收必须在泮明时给定初值,而在以后的引用中只能读取,不可修改。被声明为Gnal的方法也同样只能使用,不能空载tinally再弁常处理时提供finally块来执行任何清除操作.如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话.finalize-方法名.JaVa技术允许使用finalize)方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作.这个方法是由垃圾收集零在确定这个对象没有被引用时对这个对象冏用的.它是在ObjeCI类中定义的,因此所有的类都继承了它.子类/盅finalize)方法以整理系统资源或者执行其他清理工作。finalize。方法是在坨圾收集器删除对象之前时这个对象调用的,第二,AnonymousInnerClass(匿名内部类)是否可以CXtendS(维承)其它类,是否可以inlemen(s(现)inerface(接口)?匿名的内部类是没有名字的内部类。不能exlcnds(缚承)其它类,但一个内部类可以作为一个接口,例另一个内部类实现.第三,StaticNestedClass和InnerCkISS的不同,说得越多越好(面试.题有的很笼统卜NestedClass(一般是CI的说法),InnerCIass(一般是JAVA的说法)”Java内部类与C+嵌套类最大的不同就在于是否有指向外部的引用上.具体可见http:/www.frontfrcc.nctarticlcs,scrviccsvicw.asp7i(l=7(4pagc=l注:惮态内部类(InnerCIass)意味着I创建一个SUMiC内部类的对象,不蠹要一个外部类对象,2不能从一个sialic内部类的一个对象访问一个外部类对象第四,&和&&的区别.&是位运算符。&&是布尔设套运算符,第五.HaShM叩和HaShtablC的区别O都M于M叩接口的类,实现了将推一键唉射到特定的值上.HashMapH没有分类或者排序.它允许一个null键和多个null值。Hashtuble类似于HashMap.但是不允许null键和null值。它也比HashMap慢.因为它是同步的.第六,Collection和COlleC(ion$的区别.Collections是个javu.ulil卜的类,它包含有各种有关集合操作的静态方法。ColICCtion是个java.util下的接II,它是各种集合结构的父接口.笫七,什么时候用assert。断*是一个包含布尔表达式的语句.在执行这个谱句时他定该表达式为true.如果表达式计算为fake,那么系统会报告一个AsscnionEiTor,它用于词试目的:assert(a>0):"throwsanAssenionEnwifa<=0断言可以有两种形式:assertExpression1:assertExpression!:Expression?;Expressioni应该总是产生一个布尔伯。EXPNSSion2可以足得出一个值的仔意表达式.这个值用于生成显示更多调试信刖的String消息.斯言在默认情况下是禁用的.要在编译时启用断言,需要使用source1.4标记:javac-source1.4Tsstjava要在运行时启用断言,可使用-CnabIeasscrtions或者Ya标记.要在运行时选择禁用斯言.可使川-da或者-disableasscnions标记.要系统类中启用断吉,可使用Ysa或者-dsa标记.还可以在包的基础上启用或者禁用断言。Ur以在预计正常情况卜不会到达的任何位风上放置断a.Ifi言可以用于脸证传递给私有方法的参数.不过.断言不应该用于验证传递给公有方法的参数.因为不管是否启用了断言公有方法都必须检在其参数不过,既可以在公有方法中,也可以在非公有方法中利用斯方测试后巴条件。另外,断言不应该以任何方式出变程序的状态,第八,GC是什么?为什么要有GC?(基础).GC是垃圾收蛆器,Java程序员不用担心内存管理,因为坨圾收柒器会自动iS行管理,要清求垃圾收集,可以调用下面的方法之一:Systcm.gc()Runtimc.gctRuntimc().gc<)第九,Strings=newString(WXyZ创建了几个StringObject?两个对象.一个是Xy*,一个是指向“xyx”的引用对象s.第十,MaIh.round。1.5)等於多少?MammUM11.5)等於多少?MaIh.round(11.5)返回(long)I2(MaIh.round(-l1.5)返回(long)-II;第H一,shorts)=l;sl=sl+1;有什么错?ShOrtSl=I;si+=I;有什么错?shortsi=list=si+I;彳i错,Sl是short型,sl+1是int型,不能显式转化为short型。可假改为si=(ShortXSl+I)。shortsi=I:si+=IIE确。第十二,SkxpO和wait()有什么区别?搞线程的最爱SIeeP()方法是使跷程停止一段时间的方法。在sleep时间间隔期涵后,雄程不,定立即恢”执行,这是因为在那个时刻,其它级程可能正在运行而H.没有被调度为放弃执行,除IMa)“胡来”的线程具有更高的优先级(b)正在运行的线程因为其它原因而阻寤.wail()是线程交互时,如果规程对一个同步对象X发出一个Wam)调用,该践理会皆停执行,被调对象进入等待状态,直到被嗔解或等待时间到.第十JaVa有没有goto?Gotojava中的保用字,现在没有在java中使用,第十四.数组存没行legth()这个方法?String有没有ICn£th()这个方法?数组没有ICngtho这个方法,有ICngth的冏性.String有有Iengtho这个方法。15Overload和Override的区别.OVCrlOadCd的方法是否可以改变返回低的类*?方法的重写Overriding和重.我Overloading是Java多态性的不同友现.他写Overriding是父类与子类之间多态性的一种表现,HOverloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被夜写(Ovemding).子类的对象使用这个方法时.将调用子类中的定义,对它而7.父类中的定义如同被“屏蔽”了.如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的,RJ(Overk>ading),Overloaded的方,法是可以变返网值的类型.第十六,Sct里的元素是不能的元的,那么用什么方法来区分型更与否呢?是用=还是cquals?它们有何区别?Sel里的元素是不能IR过的,那么用ierato<()方法来区分由发与否。equals是判读两个Sei是否相等.CqUalSO和=方法决定引用值足否指向同对象equaM>在类中被榴盅,为的是当两个分肉的对象的内容和类型和附的话,返I可真伯.第卜七,给我一个你最常见到的runlimeexception”ArithmcticExccption.ArrayStOrcEXCCPtion.Buffcr()vcrflowExccption.ButTcrundcrflowExccpiion.CannotRcdoExccpcion.CannolUndoException,CIassCastException,CMMExcepIion,COnCUfrenlModifieationEXCePtion.DOMException.EmpiyStackExcqHion,IllegiiIArgumentException.IllegulMonitorSlateExceptiun.IllcgaipalhStateExccption.HlcgalStatcExccp<ion,ImagingOExccp<ion,InicxutIBoundsExccpiion.MissingRcsourccExccpiion,NegaiivetaySizeExcep(ion.NosuchEleinentException,NuHPoiIMerEXCePtion.ProfiIeDalaException.ProvidcrExcepliun.RasterFormatExccplion.SccurilyExceptiun.SystcmExccption.Und<xIarcdThrowabIeExccption.UnmodifiablcSetExccption.UnsupponcdOpcrationException第IA.error和exception有什么区别?error表示恢更不是不可能但很困难的情况下的一种产理问题.比如说内存溢出.不可能指里程序能处埋这样的情况.exception表示种设计或实现问题,也就是说,它表示如果程序运行正常,从不会发生的情况.第十九,1.ist.Set.Map是否继承llCollection接1.1?1.ist.Set是Map不是第二I,abstractclass和interface有什么区别?抽象类里面可以有非抽缴方法但接口里只能有抽象方法声明方法的存在而不去实现它的类被叫做抽象类(abstractclass),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况.不能创建abstract类的实例.然而可以创建一个变收.其类型是一个抽象类,并让它指向具体子类的一个实例.不能有抽象构造函数或抽象静态方法。AbSlraCl类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为,取而代之,在子类中实现该方法.知道其行为的其它类可以在类中实现这线方法.接I(interface)是抽象类的变体.在接口中,所有方法都是抽象的.多维承件可通过实现这样的接口而获知.接口中的所有方法都是抽取的,没有一个有程序体.接口只可以定义staticfal成员变量.接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法.然后.它可以在实现了该接11的类的任何对皇上网用接口的方法.由于有抽望类,它允许使用接口名作为引用变鼠的类型.通常的动态联编将生效.引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象的类是否实现了接口。第二十一,abstract的method是否可同时是SUM匕地否可同时是native,是否可同时是SynChrOnized?都不能第二十二.接I是否可继承接口?抽象类是有可实现(implements)接口?抽象类是否可维承实体类(COnCNteclass)?接口可以继承接口。抽象类可以实现(impkmenls)接口,抽象类是否可维承实体类,但前提是实体类必须有明确的构造函数.第二十三,启动一个践程是用run()还是van。?启动一个战程是调用SurtO方法,使践程所代我的虚拟处理机处于可运行状态,这意味褶它可以由JVM调度并执行.这并不意味荷线程就会立即运行,11n()方法可以产生必须退阳的标志来停止一个线程.第二十四.构