第一篇:高级java面试题
高级java面试题
来源:58.com 2013-09-23 17:15
高级java面试题:
第一,Anonymous Inner Class(匿名内部类)是否可以继承其它类,是否可以实现接口? 匿名的内部类是没有名字的内部类。不能继承其它类,但可作为一个接口,由另一个内部类实现。
第二,谈谈final, finally, finalize的区别。
final 如果一个类被声明为final,意味着它不能再派生出新的子类,因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
finally 用来清除异常。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize()在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。它是在 Object 类中定义的,因此所有的类都继承了它。
第三,Static Nested Class 和 Inner Class的不同。
Nested Class(一般是C++的说法),Inner Class(一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。
注:静态内部类(Inner Class)意味着:创建一个static内部类的对象不能从一个static内部类的一个对象访问一个外部类对象
第四,&和&&的区别。
&是位运算符。&&是布尔逻辑运算符。
第五,HashMap和Hashtable的区别。
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap 类 允许一个 null 键和多个 null 值。
Hashtable 类 不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。第六,Collection 和 Collections的区别。
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。Collection是个java.util下的接口,它是各种集合结构的父接口。
第七,什么时候用assert。
断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。
示例:
assert(a > 0);// throws an AssertionError if a <= 0
断言可以有两种形式:
assert Expression1;
assert Expression1 : Expression2;
Expression1 应该总是产生一个布尔值。
Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。
断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记: javac-source 1.4 Test.java
要在运行时启用断言,可使用-enableassertions 或者-ea 标记。
要在运行时选择禁用断言,可使用-da 或者-disableassertions 标记。
要系统类中启用断言,可使用-esa 或者-dsa 标记。还可以在包的基础上启用或者禁用断言。
可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其
参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。
第八,GC是什么? 为什么要有GC?
GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
第九,String s = new String(“xyz”);创建了几个String Object?
两个对象,一个是String类型的“xyx”,一个是指向“xyx”的引用对象s。
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
都不能
第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
第二十三,启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。
这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。个人猜测,可能是以下结构:
run(){
myThread.start();
······
}
第二十四,构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。第二十五,是否可以继承String类?
String类是final类故不可以继承。
第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
第二十八,编程题: 用最有效率的方法算出2乘以8等於几?
有C背景的程序员特别喜欢问这种问题。
第二十九,两个对象值相同(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。
第三十二,编程题: 写一个Singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance(){
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance(){
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if(instance==null)
instance=new Singleton();return instance;} }
第二篇:JAVA面试题
1、面向对象的四个特征:封装、继承、多态、抽象
封装:
继承:子类继承父类,除private修饰以外的所以方法和属性 多态:一个对象多种状态,可以把子类对象当作父类对象来看,一旦这样做了,就只能
去调用父类中原有定义的属性和方法,也就是子类中扩展的方法或属性就不能调用了。
抽象:
2、abstractclass 和interface的区别
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
3、final、finally、finalize的区别
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
4、匿名内部类是否可以作为父类被其他类继承,或做为接口被实现?
匿名内部类不被继承也不能被实现,因为它没有名字,而一个内部类只要有名字就可以作为父类被继承,也可以作为借口被实现。
5、多线程有几种实现方法,同步有几种实现方法,都是什么?
多线程有两种实现方法,分别继承继承Thread类与实现runnable借口。
同步的实现方法有两种,分别是synchronized,wait与notify。
6、string 与 stringbuffer的区别?
String的长度是不可变的,而stringbuffer的长度是可变的。如果你对字符中的内容经常进行操作,特别是内容修改时,那么就要使用stringbuffer,如果最后需要使用string,那么使用stringbuffer的tostring()方法。
7、解析XML文件的几种方式和区别
DOM:处理大型文件时其性能下降的非常厉害
SAX:SAX是事件驱动型的XML解析方式,它是顺序读取XML文件,不需要一次性全部装载整个文件。
8、sleep()和wait()有什么区别?
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
9、数组有没有length这个方法?string有没有length这个方法?
数组没有length()这个方法,有length这个属性
String有length()这个方法
10、LinkedList、ArrayList和Vector的区别? ArrayList和Vector是采用数组方式存储数据,此数组元素总数大于实际存储的数据个数以便增加和插入元素,二者都允许直接序号索引元素,但是插入数据要移动数组元素等内存操作,所以它们索引数据快、插入数据慢。
Vector由于使用了synchronized同步方法(如add、insert、remove、set、equals、hashcode等操作),因此是线程安全,性能上比ArrayList要差。
LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!LinkedList双向链表,是指可以从first依次遍历至last(从头到尾),也可以从last遍历至first(从尾到头),但首尾没有构成环,不同于双向循环链表(注意区分):
11、hashmap与hashtable的区别?
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap类没有分类或者排序。它允许一个null键和多个null值。
Hashtable类似于HashMap,但是不允许null键和null值。它也比HashMap慢,因为它是同步的。
12、Jsp有哪些内置对象,作用分别是什么?(至少能说出五个)
request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。
response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)
out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page表示从该页面产生的一个servlet实例
13、Javaservletapi中forward()与redirect()的区别?
前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。
14、重载(overload)与重写(override)的区别?
Overload:方法名相同,参数不同,与返回值无关
Override:方法名相同,参数相同,相同的返回值,建立在继承的基础之上
15、什么是单例模式,在程序中如何使用?
单例模式确保一个类只有一个实例 饿汉式单例类
public class Singleton {
private Singleton(){}
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}
懒汉式单例类
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance(){
if(instance==null)
instance=new Singleton();
return instance;
}
}
16、Servlet生命周期?
加载和实例化
初始化init()
请求处理service()
服务终止destroy()
17、spring中IOC与AOP的含义?
IOC:控制反转,是一种设计模式,一层含义控制权的转移,由传统的在程序中控制依赖转移到由容器来控制,第二层是依赖注入将互相依赖的对象分离,在spring配置文件中描述它们的依赖关心,它们的依赖关系只是在使用的时候才建立
AOP:面向切面,是一种编程思想,oop的延续,将系统中非核心的业务提取出来,进行单独的处理,比如事务、日志和安全等
Spring的AOP和IOC都是为了解决系统代码耦合度过高的问题,使用代码重用性高,易于维护,不过AOP和IOC并不是spring中特有的,只是spring把它们应用的更灵活方便。
18、hibernate与JDBC的区别?
相同点:
1>两者都是JAVA的数据库操作中间件。
2>两者对于数据库进行直接操作的对象都不是线程安全的,都需要及时关闭。
3>两者都可以对数据库的更新操作进行显式的事务处理。
不同点:
1>使用的SQL语言不同:JDBC使用的是基于关系型数据库的标准SQL语言,Hibernate使用的是HQL(Hibernate query language)语言
2>操作的对象不同:JDBC操作的是数据,将数据通过SQL语句直接传送到数据库中执行,Hibernate操作的是持久化对象,由底层持久化对象的数据更新到数据库中。3>数据状态不同:JDBC操作的数据是“瞬时”的,变量的值无法与数据库中的值保持一致,而Hibernate操作的数据是可持久的,即持久化对象的数据属性的值是可以跟数据库中的值保持一致的。
19、struts中的标签库有几种,分别是?
有5种标签,分别是:bean标签库、html标签库、logic标签库、tiles标签库nested标签库
20、Error与Exception有什么区别?
Error表示系统级的错误和程序不必处理的异常,Exception表示需要捕捉或者需要程序进行处理的异常。
21、Collection和Collections的区别。
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作
22、GC是什么?为什么要有GC?(基础)。
GC是垃圾收集器。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
23、启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
24、&和&&的区别。
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。
25、heap和stack有什么区别。
栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方
式进行处理。
堆是栈的一个组成元素
26、List, Set, Map是否继承自Collection接口?
List,Set是,Map不是
27、MVC的各个部分都有那些技术来实现?如何实现?
MVC 是Model-View-Controller的简写。“Model” 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),“View” 是应用的表示面(由JSP页面产生),“Controller” 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
28、Static Nested Class 和 Inner Class的不同。
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
29、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类
(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数
30、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
JSP 是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑
31、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 不能,一个对象的一个synchronized方法只能由一个线程访问。
32、运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
33、JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:include动作实现
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file=“included.htm” %>
第三篇:Java程序员面试题
北京千渡网讯科技有限公司博宝艺术网http://
Java程序员面试题
1.下列程序段执行后,t5的结果是_____.int t1=5,t2=6,t3=7,t4,t5;
t4 = t1 t5 = t4 2.String s = new String(“xyz”);创建了_____个String Object.3.类型转换 int x=4; System.out.println(“value is ” +((x>4)?99.9:9));输出是______; 4.Boolean类型 boolean a = false; if(a = true){ System.out.println(true); } else { System.out.println(false);结果是______; 5.int i = 5; Integer iInteger = new Integer(i); Integer jInteger = new Integer(i); System.out.println(i == iInteger); System.out.println(iInteger == jInteger);输出结果是______; 6.TreeSet map = new TreeSet(); map.add(“one”); map.add(“two”); map.add(“three”); map.add(“four”); map.add(“one”); Iterator it = map.iterator(); while(it.hasNext()){ System.out.print(it.next()+ “ ”); } 输出结果是 ________________________________________; class Polish { public static void main(String[] args){ int x = 4; StringBuffer sb = new StringBuffer(“..fedcba”); sb.delete(3,6); sb.insert(3, “az”); if(sb.length()> 6)x = sb.indexOf(“b”); sb.delete((x-3),(x-2)); System.out.println(sb); 北京千渡网讯科技有限公司博宝艺术网http:// } } 结果是: ____________ 8.class Emu { static String s = “-”; public static void main(String[] args){ try { throw new Exception(); } catch(Exception e){ try { try { throw new Exception(); } catch(Exception ex){ s += “ic ”;} throw new Exception(); } catch(Exception x){ s += “mc ”;} finally { s += “mf ”;} } finally { s += “of ”;} System.out.println(s);结果是:______________________ 9..抽象类和接口的区别 10.写一个方法,实现字符串的反转,如:输入abc,输出cba 11.short s1 =1;s1 = s1 + 1;有什么错? short s1 = 1;s1 += 1;有什么错? 12.下列哪些集合能够改变其容量大小,同时能够根据索引访问其元素,并且访问方法是非线形安全的? A.java.util.HashSet B.java.util.LinkedHashSet C.java.util.List D.java.util.ArrayList E.java.util.Vector F.java.util.PriorityQueue 13.下列关于泛型的说法,错误的是() A、泛型是一种参数化类型 B、可以取代继承机制。 C、避免了运行时进行类型转换可能的潜在性错误 D、增强了程序的灵活性和安全性 14.下面关于System.out的说法哪些是正确? A.System.out是1个PrintStream。 B.System.out是1个OutputStream。 C.System.out是1个FilterOutputStream。 D.System.out不是1个PrintStream。 E.System.out在异常时,将抛出IOException 15.String与StringBuffer的区别? 1、编写程序 题目:古典问题:有一对公母猪,从出生后第3个月起每个月都生一对猪,小猪长到第三个月后每个月又生一对猪,假如猪都不死,问每个月的猪总数为多少? 答案: public class lianxi01 { public static void main(String[] args){ System.out.println(“第1个月的兔子对数: 1”); System.out.println(“第2个月的兔子对数:1”); int f1 = 1, f2 = 1, f, M=24; for(int i=3;i<=M;i++){ f = f2; f2 = f1 + f2; f1 = f; System.out.println(“第” + i +“个月的兔子对数: ”+f2); } } } 2、是非题 2.1 Java程序中的起始类名称必须与存放该类的文件名相同。() 答案:正确 2.2 原生类中的数据类型均可任意转换。() 答案:错误 3、问答题 3.1 try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 答案: 会执行,在return前执行。 3.2 sleep()和 wait()有什么区别: 答案: sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会 释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 4、数据库题 聚集函数的应用 编写一条sql语句,希望从艺术家表artist_tab中,看到只有一个专长specialty的是哪些专长 答案:seelctspecialty from artist_tab group by specialty having count(*)=1’; Java程序员面试题 1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面:1)抽象2)继承3)封装4)多态性 2、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同包 子类 其他 public √ √√ √ protected√√√ × default √√× × private √××× 类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private)。受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。 3、String 是最基本的数据类型吗? 答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。 4、float f=3.4;是否正确? 答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4;或者写成float f =3.4F。 5、int 和Integer 有什么区别? 答:Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入不是对象的基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的封装类就是Integer,从JDK 1.5开始引入了自动封箱/解封箱机制,使得二者可以相互转换。 Java 为每个原始类型提供了封装类: 原始类型: boolean,char,byte,short,int,long,float,double 封装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double 6、数组有没有length()方法?String 有没有length()方法? 答:数组没有length()方法,有length 的属性。String 有length()方法。 7、在Java 中,如何跳出当前的多重嵌套循环? 答:在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环。 8、是否可以继承String 类? 答:String 类是final类,不可以被继承。 9、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对象的引用是永远不会改变的。C++和C#中可以通过传引用或传输出参数来改变传入的参数的值 10、抽象类(abstract class)和接口(interface)有什么异同? 答: 抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。 抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。 11、静态变量和实例变量的区别? 答:静态变量也称为类变量,属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。 12、String s=new String(“xyz”);创建了几个字符串对象? 答:两个对象,一个是静态存储区的“xyx”,一个是用new创建在堆上的对象 13、接口是否可继承(extends)接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承具体类,但前提是具体类必须有明确的构造函数 14、Java 中的final关键字有哪些用法? 答:(1)修饰类:表示该类不能被继承;(2)修饰方法:表示方法不能被重写;(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量) 15、Error 和Exception 有什么区别? 答:Error 表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;Exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。 选择题 1、在Java Applet程序用户自定义的Applet子类中,一般需要重载父类的(D)方法来完成一些画图操作。 A.start() B.stop() C.init()D.paint() 2、Java语言具有许多优点和特点,下列选项中,哪个反映了Java程序并行机制的特点?(B) A)安全性 B)多线程 C)跨平台 D)可移植 3、下列哪个类声明是正确的?(D) A)abstract final class HI{···} B)abstract private move(){···}C)protected private number; D)public abstract class Car{··· 4、在Java语言中,下列哪些语句关于内存回收的说明是正确的?(B) A.程序员必须创建一个线程来释放内存; B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 D.内存回收程序可以在指定的时间释放内存对象 5、字符串是Java已定义的类型,关于它的构造函数,下面说法不正确的是: B A.String(char[] value, int offset, int count) B.String(int[] codePoints,int offset,int count) C.String(String original) D.String(StringBuffer buffer) 6、下列说法中正确的是: C A.导入包会影响程序的性能 B.包存储在类库中 C.包是类的容器D.上述说法都不对 7、哪个关键字可以对对象加互斥锁? B A.transient B.synchronized C.serialize D.static8、下列叙述中,错误的是: D A、父类不能替代子类 B、子类能够替代父类 C、子类继承父类 D、父类包含子类 9、下列关于Java多线程并发控制机制的叙述中,错误的是:BC A、Java中对共享数据操作的并发控制是采用加锁技术 B、线程之间的交互,提倡采用suspend()/resume()方法 C、共享数据的访问权限都必须定义为private D、Java中没有提供检测与避免死锁的专门机制,但应用程序员可以采用某些策略防止死锁的发生 10、下列哪一个方法不是applet程序的组成部分:D A、init() B、start() C、stop() D、new() 11、下列Applet类的方法中,在Applet的整个生命周期里至多只执行一次的是:A A、init() B、start()C、stop() D、paint() 12、启动一个线程所调用的方法是:C A、run() B、init() C、start() D、new() 13、编译Java Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为(B)。 A..java B..class C..html D..exe 二、填空题(每空格1分,共20分) 1、开发与运行Java程序需要经过的三个主要步骤为编辑源程序、编译生成字节码和解释运行字节码。 2、如果一个Java Applet源程序文件只定义有一个类,该类的类名MyApplet,则类MyApplet必须是Applet类的子类并且存储该源程序文件的文件名为MyApplet。 3、若x=5,y=10,则x 4、抽象(abstract)方法方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义。最终(final)方法方法是不能被当前类的子类重新定义的方法。 5、在Java程序中,通过类的定义只能实现单重继承,但通过接口的定义可以实现多重继承关系。第四篇:java开发面试题
第五篇:Java程序员面试题