Java面试题目
第一部分:问答题,每道题3分
1. Java基本的数据类型有哪些?
boolean ,byte ,char ,short ,int ,long ,float ,double
2. String 和StringBuffer的主要区别
String 的长度是不可变的,StringBuffer的长度是可变的。如果对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法。
3. 运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
一般异常是原代码的问题,运行时异常是虚拟机的问题。
一般异常可以捕获,运行时异常就管不了,无能为力(也可以捕获)。
4. 说出Servlet的生命周期。
Servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。
5. 说出ArrayList, Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
6. Collection 和 Collections的区别。
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
7. &和&&的区别。
&是位运算符。&&是布尔逻辑运算符。
8. HashMap和Hashtable的区别。
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。 Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。
9. final, finally, finalize的区别。
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
finally—在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
10. sleep() 和 wait() 有什么区别?
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级 (b)正在运行的线程因为其它原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
11. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
Overload是覆盖,子类的方法跟父类方法名字一样,子类的方法把父类的覆盖了。
Override是重载,不同的方法参数、返回值不一样,紧紧返回值不一样的两个函数不叫重载,编译不会通过的。
Overloaded的方法是可以改变返回值的类型。
12. error和exception有什么区别?
Error表示系统级的错误和程序不必处理的异常,
Exception表示需要捕捉或者需要程序进行处理的异常。
13. abstract class和interface有什么区别?
1、接口可以多重implement(实现),抽象类只能单一extends(继承)
2、接口内只能是功能的定义,抽象类中可以包括功能的定义和功能的实现。
3、接口字段定义默认为public static final,而抽象类的则默认为friendly。
14. Servlet中forward 和redirect的区别
Redirect()是向浏览器发送一个redirect通知,浏览器重定向到新的URL。
而forward是在服务器端直接转到新的URL,对于浏览器是透明的。
前者浏览器的地址栏显示的是新的URL,后者浏览器的地址栏显示的是Servlet的URL。
因而当目标URL会自动刷新时,两者会造成一些差别。
15. JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:include动作实现它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面
16. 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正确。
17. Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)=12;
Math.round(-11.5)=-11;
18. 启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
19. 应用服务器有那些(列出至少3个)?
WebLogic、WebSphere、Tomcat、Resin、JBoss
20. 给我一个你最常见到的runtime exception。
ArithmeticException,ArrayStoreException,BufferOverflowException,BufferUnderflowException, CannotRedoException, CannotUndoException,ClassCastException,CMMException,ConcurrentModificationException,DOMException, EmptyStackException,IllegalArgumentException,IllegalMonitorStateException,IllegalPathStateException, IllegalStateException,ImagingOpException,IndexOutOfBoundsException,MissingResourceException, NegativeArraySizeException,NoSuchElementException,NullPointerException,ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
21. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
23. abstract的method是否可同时是static? 是否可同时是native? 是否可同时是synchronized?
都不能
24. 数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。
String有length()这个方法。
25. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否
26. 构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
27. 是否可以继承String类?
String类是final类故不可以继承
28. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
29. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
30. 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问
31. Java中最顶层的集合接口有哪些?
接口有两层,顶层接口有Collection,直接子接口有List,Set;Map没有继承Collection
32. 多线程有几种实现方法,都是什么? 同步有几种实现方法是什么?
多线程有3种方法:
1.
class mt implements Runnable
{
public void run(){...}//run()由Runnable定义,就是你要执行的代码
}
new Thread(new mt()).start();
2.
class mt extends Thread
{
public void run(){...}
}
...
new mt().start();
3.
class mt extends TimerTask
{
public void run(){...}
}
...
new Timer().schedule(new mt(),1000,200);//等待1秒钟后每2毫秒执行一次
后两种方法在本质上和第一种一样,因为Thread 和 TimerTask 都implements Runnable
但显然第一种方法最好,因为mt 还可以extends其他类
至于同步,只要在你要同步的方法前加synchronized,然后适当用一下wait() 和 notify()
33. JSP的内置对象及方法。
request request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。
response response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)
out out 对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
session session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
application applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page page表示从该页面产生的一个servlet实例
34. 什么情况下调用doGet()和doPost()?
form的method为get时调用doGet()方法,
form的method为post时调用doPost()方法。
35. 页面间对象传递的方法
page,request,session,application.
36. JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。
37. Servlet执行时一般实现哪几个方法?
public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destroy()
38.关键字:throws, throw, try, catch, finally分别代表什么意义?
try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。
用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。
throw语句用来明确地抛出一个"异常"。
throws用来标明一个成员函数可能抛出的各种"异常"。
Finally为确保一段代码不管发生什么"异常"都被执行一段代码。
39. 静态变量和实例变量的区别?
如static i = 10; //常量 class A a; a.i =10;//可变
40. 什么是java序列化,如何实现java序列化?
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
41. 是否可以从一个static方法内部发出对非static方法的调用?
不可以,如果其中包含对象的method();不能保证对象初始化.
42. 写clone()方法时,通常都有一行代码,是什么?
Clone 有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。
43. 如何跳出当前的多重嵌套循环?
用break,return方法。
44. List、Map、Set三个接口,存取元素时,各有什么特点?
List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。
第二部分:JAVA代码走查,每道题5分
1.
abstract class Name {
private String name;
public abstract boolean isStupidName(String name) { }
}
请问这有何错误?
答案:
有错误,抽象方法不能有方法体
2.
public class Something {
void doSomething () {
private String s = "";
int l = s.length();
}
}
有错吗?
答案:
有错误,变量s为空不能在方法内定义为private类型。
3.
abstract class Something {
private abstract String doSomething ();
}
这好像没什么错吧?
答案:
有错误,abstract的修饰符不能是private类型。
4.
public class Something {
public int addOne(final int x) {
return ++x;
}
}
这个比较明显。
答案:
有错,x为final类型。不能进行运算。
5.
public class Something {
public static void main(String[] args) {
Other o = new Other();
new Something().addOne(o);
}
public void addOne(final Other o) {
o.i++;
}
}
class Other {
public int i;
}
和上面的很相似,都是关于final的问题,这有错吗?
答案:
没有错误。
6.
class Something {
int i;
public void doSomething() {
System.out.println("i = " + i);
}
}
有什么错呢? 看不出来啊。
答案:
没有错误。
7.
class Something {
final int i;
public void doSomething() {
System.out.println("i = " + i);
}
}
和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?
答案:
有错误,i没有初始化。
8.
public class Something {
public static void main(String[] args) {
Something s = new Something();
System.out.println("s.doSomething() returns " + this.doSomething() );
}
public String doSomething() {
return "Do something ...";
}
}
看上去很完美。
答案: main是个静态方法,不能引用this,静态方法可以通过类直接调用 不用初始化对象。
9.
此处,Something类的文件名叫OtherThing.java
class Something {
private static void main(String[] something_to_do) {
System.out.println("Do something ...");
}
}
这个好像很明显。
答案:
在java中类名必须和文件名相同。
10.
interface A{
int x = 0;
}
class B{
int x =1;
}
class C extends B implements A {
public void pX(){
System.out.println(x);
}
public static void main(String[] args) {
new C().pX();
}
}
答案:
程序有错误,C如果引用了父类的变量x,应使用关键字super,
posted on 2008-10-11 10:37
fly 阅读(167)
评论(0) 编辑 收藏 所属分类:
java学习