JAVA面试经典题(必看32题)易错知识点_第1页
JAVA面试经典题(必看32题)易错知识点_第2页
JAVA面试经典题(必看32题)易错知识点_第3页
JAVA面试经典题(必看32题)易错知识点_第4页
JAVA面试经典题(必看32题)易错知识点_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

谈谈final,finally,finalize的区别。final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的类变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。局部变量声明时可以不赋值,生命周期内只能赋值一次。被声明为final的方法也同样只能使用,不能重写(子类覆盖),可以重载。

finally—异常处理时提供finally块来执行任何清除操作。如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。finally语句总会被执行,如果遇到return的话,就先跑去执行finally,再returnfinalize—方法名。Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。AnonymousInnerClass(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 匿名类在实现时,必须借助一个类或一个接口,若从这个层次说它是可以继承一个类或一个接口的。但是通过extendsimplements关键字那是不可能的。一个内部类可以作为一个接口由另一个内部类实现。在使用匿名内部类时,要记住以下几个原则:

·匿名内部类不能有构造方法。

·匿名内部类不能定义任何静态成员、方法和类。

·匿名内部类不能是public,protected,private,static。

·只能创建匿名内部类的一个实例。

·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。

StaticNestedClass和InnerClass的不同,说得越多越好(面试题有的很笼统)。NestedClass一般是C++的说法,InnerClass一般是JAVA的说法。

Nestedclass分为静态Staticnestedclass的和非静态的innerclass,

静态的Staticnestedclass是不可以直接调用它的外部类enclosingclass的,但是可以通过外部类的引用来调用,就像你在一个类中写了main方法一样。

非静态类innerclass可以自由的引用外部类的属性和方法,但是它与一个实例绑定在了一起,不可以定义静态的属性、方法。

InnerClass(内部类)定义在类中的类。

NestedClass(嵌套类)是静态(static)内部类。1.要创建嵌套类的对象,并不需要其外围类的对象。2.不能从嵌套类的对象中访问非静态的外围类对象。

AnonymousInnerClass(匿名内部类)匿名的内部类是没有名字的内部类。

第四,&和&&的区别。“&&”是逻辑运算中的“短路”,若"&&"前的条件为false时判断结果为false,不再执行"&&"后的语句块。"&&"前为true则继续进行进行后半部分的判断

“&”是两边都要经过判断&&是逻辑运算符,表示逻辑与&是位运算符,表示位与;位运算针对二进制数0和1;0&0=0,0&1=0,1&0=0,1&1=1HashMap和Hashtable的区别。1.hashMap去掉了HashTable的contains方法,但是加上了containsValue()和containsKey()方法。

2.hashTable同步的,而HashMap是非同步的,效率上比hashTable要高。

3.hashMap允许空键值,而hashTable不允许。第六,Collection和Collections的区别。Collection和Collections的区别。

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。排序(Sort)2)混排(Shuffling)3)反转(Reverse)4)替换所以的元素(Fill)5)拷贝(Copy)

Collection是个java.util下的接口,它是各种集合结构的父接口。什么时候用assert。断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为true。如果表达式计算为false,那么系统会报告一个Assertionerror。它用于调试目的GC是什么?为什么要有GC?GC是垃圾收集的意思(GabageCollection),Java有了GC,就不需要程序员去人工释放内存空间。当Java虚拟机发觉内存资源紧张的时候,就会自动地去清理无用变量所占用的内存空间。当然,如果需要,程序员可以在Java程序中显式地使用System.gc()来强制进行一次立即的内存清理。Strings=newString("xyz");创建了几个StringObject?一个是编译时决定的,最后放在常量池中。一个是运行时放在堆里面的。两个都是"xyz",常量池中只可能只有一个“xyz”,但是堆中可能有多个,因为你这里用了newString来强制在堆中再创建了一个对象,所以是两个哈;如果是Strings="xyz"这样的,s这个引用就会直接指向常量池的"xyz",而不会是指向你在堆中创建的“xyz”。Math.round(11.5)等於多少?Math.round(-11.5)等於多少?他表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果是12,Math.round(-11.5)的结果为-11.ceil向上取整第十一,shorts1=1;s1=s1+1;有什么错?shorts1=1;s1+=1;有什么错?short占2个字节,int占4个字节,short型变量+上int型值计算结果是int型,占4个字节,然后付给一个short型变量s1,就要丢失2个字节的精度,这是不容许的。你非要这么做的话,我给你提供一个办法:

简单赋值运算和复合赋值运算的最大差别就在于:复合赋值运算符会自动地将运算结果转型为其左操作数的类型!第十二,sleep()和wait()有什么区别?sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。第十三,Java有没有goto?goto,const都是Java的保留字但并没有实现它,一直不用,所以现在就等于没有。第十四,数组有没有length()这个方法?String有没有length()这个方法?

数组中没有length()这个方法,但是数组中有length这个属性。用来表示数组的长度。

String中有length()这个方法。用来得到字符串的长度。第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?==是用来判断两者是否是同一对象,而equals是用来判断是否引用同一个对象。再看一下Set里面存的是对象,还是对象的引用。根据java的存储机制可知,set里面存放的是对象的引用,所以当两个元素只要满足了equals()时就已经指向同一个对象,也就出现了重复元素。所以应该用equals()来判断。第十七,给我一个你最常见到的runtimeexception。ClassCastException对象强转时出错NullPointerExceptionArrayIndexOutOfBoundsException一般异常:

IOException

FileNotFoundException

SqlException第十八,error和exception有什么区别?Error类和Exception类都继续自Throwable类。Exception:1.可以是可被控制(checked)或不可控制的(unchecked)?2.表示一个由程序员导致的错误?3.应该在应用程序级被处理Error:1.总是不可控制的(unchecked)?2.经常用来用于表示系统错误或低层资源的错误?3.如何可能的话,应该在系统级被捕捉像内存溢出之类的就是error第十九,List,Set,Map是否继承自Collection接口?Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同key,每个key只能映射一个value第二十,abstractclass和interface有什么区别?前者是抽象类,后者是接口。

抽象类和接口都可以被继承,不同的是,接口内的方法不能实现,需要继承的类来具体实现其方法,而抽象类中的方法可以被具体实现,并且继承的类可以重写其方法。一个类可以继承一个抽象类,但是可以继承多个接口。通常,接口被运用于实现比较常用的功能,便于日后维护或者添加删除方法,而抽象类更倾向于充当公共类的角色。不适于在日后重新对里面的代码进行修改。第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?abstract需要重载,static为类方法,没有覆盖一说

.abstract为没有实现的方法,native为本机实现的方法,自相矛盾.abstract方法没有实现,也不可能实际调用抽象方法,没有必要synchronized修饰,当然子类可以根据需要同步该方法.所以

都不能第二十二,接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concreteclass)?接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。第二十三,启动一个线程是用run()还是start()?启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。第二十四,构造器Constructor是否可被override?构造器Constructor不能被继承,因此不能重写Override。但在同类中可以被重载Overload。第二十五,是否可以继承String类?它是finally类,主要是为了“效率”和“安全性”的缘故。若String允许被继承,由于它的高度被使用率,可能会降低程序的性能,所以String被定义成final。第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?可以进入其他非synchronized的方法,synchronized的方法不可以的如果一个对象有多个synchronized方法,某一时刻某个线程已经进入到了某个synchronized方法,那么在该方法没有执行完毕前,其他线程是无法访问该对象的任何synchronized方法的。第二十七,try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?只有代码中有system.exit()

这一种情况

才不会执行finally,因为终止了虚拟机进程第二十八,编程题:用最有效率的方法算出2乘以8等於几?用移位运算inta=2<<3;

a就是2乘以8最后结果是16这是最省内存最有效率的方法

这个方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论