您的位置:首页 > 编程语言 > Java开发

java 笔试题

2017-01-05 11:36 211 查看
第一、谈谈final, finally,
finalize的区别。

 

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

finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

finalize?方法名。Java
技术允许使用finalize()
方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在
Object
类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

 

第二,Anonymous Inner Class
(匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

 

匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

 

第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。

Nested
Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。

注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象

 

第四,&和&&的区别。

&是位运算符。&&是布尔逻辑运算符。

 

第五,HashMap和Hashtable的区别。

都属于Map接口的类,实现了将惟一键映射到特定的值上。

HashMap 类没有分类或者排序。它允许一个
null 键和多个 null 值。

Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。

 

第六,Collection 和 Collections的区别。

 

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

Collection是个java.util下的接口,它是各种集合结构的父接口。。

 

第七,GC是什么? 为什么要有GC? (基础)。

GC是垃圾收集器。Java
程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:

System.gc()

Runtime.getRuntime().gc()

 

第八,String s = new
String("xyz");创建了几个String Object?

 

两个对象,一个是"xyx",一个是指向"xyx"的引用对象s。

 

第九,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

 

Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;

 

第十,short s1 = 1; s1 = s1 +
1;有什么错? short s1 = 1; s1
+= 1;有什么错?

short s1 =
1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1
=(short)(s1 + 1) 。short
s1 = 1; s1 += 1正确。

 

第十一,sleep() 和
wait() 有什么区别? 搞线程的最爱

sleep()方法是使线程停止一段时间的方法。在sleep
时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)"醒来"的线程具有更高的优先级

(b)正在运行的线程因为其它原因而阻塞。

wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

 

第十二,数组有没有length()这个方法?
String有没有length()这个方法?

数组没有length()这个方法,有length的属性。

String有length()这个方法。

 

第十三,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

 

第十四,error和exception有什么区别?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

 

第十五,List, Set,
Map是否继承自Collection接口?

List,Set是

 

Map不是

 

第十六,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

都不能

 

第十七,接口是否可继承接口?
抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

第十八,启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

 

第十九,构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

 

第二十,是否可以继承String类?

String类是final类故不可以继承。

 

第二十一,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

 

第二十二,try
{}里有一个return语句,那么紧跟在这个try后的finally
{}里的code会不会被执行,什么时候被执行,在return前还是后?

会执行,在return前执行。

 

第二十三,两个对象值相同(x.equals(y) ==
true),但却可有不同的hash code,这句话对不对?

不对,有相同的hash code。

 

第二十四,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是值传递。Java
编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

 

第二十五,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: