Java面试题集(2017修订版)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JAVA技术面试题
目录
JAVA技术面试题 (1)
一、Java基础部分 (10)
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?错
误!未定义书签。

2、Java有没有goto? (10)
3、说说&和&&的区别。

(10)
4、Java中的“短路”是指什么 (10)
5、在JA V A中如何跳出当前的多重嵌套循环? (10)
6、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
11
7、short s = 1; s = s + 1;有什么错? short s = 1; s += 1;有什么错? (11)
8、char型变量中能不能存贮一个中文汉字?为什么? (12)
9、用最有效率的方法算出2乘以8等于几? (12)
10、冒泡排序实现 (12)
11、"=="和equals方法究竟有什么区别? (12)
12、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对
不对? 14
13、写出Object类中定义的方法。

(14)
14、hashCode方法的作用? (14)
15、写clone()方法时,通常都有一行代码,是什么? (15)
16、静态变量和实例变量的区别? (15)
17、谈谈你对static关键词的理解 (16)
18、是否可以从一个static方法内部发出对非static方法的调用? (16)
19、Integer与int的区别 (16)
20、Math.round(11.5)等於多少? Math.round(-11.5)等于多少? (17)
21、请说出作用域public,private,protected,以及不写时的区别 (17)
22、public、protected和private这些访问权限修饰词的作用 (17)
23、Overload和Override的区别。

Overload的方法是否可以改变返回值的类型?
18
24、什么是override? (18)
25、什么是overload? (19)
26、说说has a与is a的区别。

(19)
27、一个房子里有椅子,椅子有腿和背,房子与椅子是什么关系,椅子与腿和背
是什么关系? (19)
28、什么是参数?和参数化的意义? (19)
29、构造器Constructor(构造方法)是否可被override(重写)? (20)
30、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可
继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? (20)
31、面向对象的特征有哪些方面 (20)
32、说出一些常用的类,包,接口,请各举5个 (22)
33、写出JDK中至少5个以上的包名。

(22)
34、java中实现多态的机制是什么? (23)
35、abstract class和interface有什么区别? (23)
36、java的接口和C++虚类的相同和不同之处 (25)
37、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? (25)
38、什么是内部类?Static Nested Class 和Inner Class的不同。

(25)
39、内部类可以引用它的包含类的成员吗?有没有什么限制? (28)
40、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? (28)
41、jdk中哪些类是不能继承的? (28)
42、Java是否有过程和函数? (28)
43、String是最基本的数据类型吗? (28)
44、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? (29)
45、String类是否可以继承? (30)
46、String s = new String("xyz");创建了几个String Object? 二者之间有什么区别?
30
47、String 和StringBuffer的区别 (30)
48、StringBuffer与StringBuilder的区别 (31)
49、数组有没有length()这个方法? String有没有length()这个方法? (31)
50、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
31
51、final关键词有哪些应用 (31)
52、final, finally, finalize的区别。

(31)
53、运行时异常(RuntimeException)与一般异常有何异同? (32)
54、程序中try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行?在什么时候被执行? (32)
55、error和exception有什么区别? (32)
56、Java中的异常处理机制的简单原理和应用。

(32)
57、java语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别代表什么意义?在try块中可以抛出异常吗? (33)
58、请写出你最常见到的5个runtime exception(运行时异常)。

(33)
59、介绍Collection框架的结构 (33)
60、Collection(集合)框架中实现比较要实现什么接口 (34)
61、ArrayList和Vector的区别 (34)
62、ArrayList和LinkedList有什么异同之处? (34)
63、HashMap和Hashtable的区别 (34)
64、List 和Map 区别? (35)
65、List, Set, Map是否继承自Collection接口? (35)
66、List、Map、Set三个接口,存取元素时,各有什么特点? (35)
67、说出ArrayList,Vector, LinkedList的存储性能和特性 (36)
68、如何去掉一个Vector集合中重复的元素,有几种方法 (36)
69、Collection 和Collections的区别。

(37)
70、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? (37)
71、你所知道的集合类都有哪些?主要方法? (37)
72、列出你知道的容器类(就是指集合类),简单说明其功能 (37)
73、Set和List的区别? (38)
74、集合框架中Collections和Arrays类的作用 (38)
75、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使
用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!38
76、数据结构中,数组与链表有哪些区别?为什么? (38)
77、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,
请说出他们分别是哪些类? (39)
78、字节流与字符流的区别 (39)
79、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作
用。

39
80、序列化的概念和序列化ID的作用? (39)
81、描述一下JVM(JA V A虚拟机)加载class文件的原理机制? (40)
82、ClassLoader(类加载器)如何加载class 。

(40)
83、能不能自己写个类,也叫ng.String? (40)
84、heap和stack有什么区别。

(40)
85、GC是什么? 为什么要有GC? (40)
86、Java内存动态管理机制 (41)
87、垃圾回收的优点和原理。

并考虑2种回收机制。

(41)
88、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办
法主动通知虚拟机进行垃圾回收? (41)
89、java中会存在内存泄漏吗,请简单描述。

(42)
90、如何使用log4j记录日志? (42)
91、什么是DAO模式,使用该模式有哪些好处? (42)
92、DAO模式由哪几部分组成? (42)
93、单一职能原则 (43)
94、开闭原则 (43)
95、里氏替代原则 (44)
96、Java反射机制 (44)
97、线程的基本概念、线程的基本状态以及状态之间的关系 (44)
98、同步和异步有何异同,在什么情况下分别使用他们?举例说明。

(45)
99、Java中有几种实现方法多线程,都是什么?用什么方法启动该线程 (45)
100、多线程有几种实现方法?同步有几种实现方法? (45)
101、启动一个线程是用run()还是start()? . (45)
102、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? (45)
103、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的该方法? (46)
104、请说出你所知道的线程同步的方法。

(46)
105、sleep() 和wait() 有什么区别? (46)
106、线程类中的stop()和suspend()方法为何不推荐使用? (46)
二、Java web部分 (47)
1、什么是Servlet (47)
2、说一说Servlet的生命周期? (47)
3、Servlet的基本架构 (47)
4、服务器如何响应Web客户请求? (47)
5、Servlet API中forward() 与sendRedirect ()的区别?(就是请求转发和重定向
的区别)? (48)
6、什么情况下调用doGet()和doPost()? (48)
7、request对象的几个常用方法: (48)
8、什么是Jsp (49)
9、JSP的执行过程? (49)
10、JSP页面由哪几部分组成? (49)
11、JSP指令有几种? (49)
12、page指令常用属性? (49)
13、JSP有哪些内置对象?作用分别是什么? 分别有什么方法? (50)
14、JSP有哪些标准动作?作用分别是什么? (50)
15、JSP中动态Include与静态Include的区别? (51)
16、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? (51)
17、如何实现servlet的单线程模式 (51)
18、在JSP中如何实现页面跳转? (51)
19、在servlets和JSP之间能共享session对象吗? (51)
20、什么是Cookie? (51)
21、如何设置cookie在某一时间后过期? (51)
22、在JSP中如何设置Cookie? (52)
23、Cookie的应用场景? (52)
24、cookie与session有什么区别? (52)
25、什么是MVC设计模式 (52)
26、MVC设计模式的优缺点: (53)
27、Web应用的目录结构: (53)
28、Tomcat的目录结构: (53)
29、Tomcat工作原理? (53)
30、什么是URL: (54)
31、什么是Session机制 (54)
32、四种会话跟踪技术 (55)
33、Web应用中的四大作用域(注意不要和四种会话跟踪技术搞混淆了) (55)
34、B/S与C/S的联系与区别 (55)
35、http协议有几种提交方式 (56)
36、什么是EL表达式 (56)
37、EL隐式对象有哪些? (56)
38、什么是JSTL (56)
39、JSTL迭代标签使用? (56)
40、Filter 基本工作原理 (57)
三、JavaScript和Ajax部分 (57)
1、JavaScript变量有哪些数据类型? (57)
2、JavaScript中常用的系统函数其作用? (57)
3、js中的3种弹出式消息提醒(警告窗口,确认窗口,信息输入窗口)的命令是什
么?58
4、Javascript中定时执行如何实现,JavaScript如何实现一段代码在执行时间后
运行?如何指定一段代码每隔指定时间就运行? (58)
5、javaScript的变量能复制到JSP的session中吗? (58)
6、什么是BOM? (58)
7、什么是DOM? (58)
8、DOM模型中的常用对象及其方法? (58)
9、如何设置页面元素的显示和隐藏? (59)
10、使用什么事件可以实现当鼠标移动某文本上时,文本样式改变,当鼠标离开
时文本样式恢复为原来的样式? (59)
11、DOM如何操作文档的标准节点? (59)
12、CSS样式表有哪几种? (60)
13、Javascript中String对象常用方法? (60)
14、文本框对象常用的方法和事件 (60)
15、正则表达式的概念 (60)
16、正则表达式有几种构造方式,分别是什么? (61)
17、RegExp对象使用什么方法匹配正则表达式? (61)
18、用正则表达式写出HTTP的url格式 (61)
19、你是怎么理解Ajax的,什么是Ajax? (61)
20、实现AJAX异步调用需要哪些步骤 (61)
21、原生(native)Ajax使用实例 (61)
22、XMLHttpRequest对象简介? (62)
23、怎么处理Ajax中的缓存 (63)
24、为什么使用Ajax框架? (63)
25、常用的Ajax框架有哪些? (63)
26、什么是jQuery (64)
27、你为什么要使用jQuery? (64)
28、你在公司是怎么用jQuery的? (64)
29、jQuery 能做什么? (65)
30、$(document).ready()方法和window.onload有什么区别? (65)
31、什么是jQuery选择器 (65)
32、jQuery选择器的种类 (65)
33、jQuery中的选择器和 css中的选择器有区别吗? (66)
34、siblings() 方法和 $('prev~div')选择器是一样的嘛? (66)
35、jQuery中的hover()和toggle()有什么区别? (66)
36、$("#msg").text()和$("#msg").text("<b>new content</b>")有什么区别? $("#msg").html()及$("#msg").html("<b>new content</b>")的区别呢? (66)
37、Jquery对象和dom对象的区别 (66)
38、jQuery对象和dom对象是怎样转换的? (66)
39、你是如何使用jQuery中的ajax的? (67)
40、jQuery中$.get()提交和$.post()提交有区别吗? (67)
41、jQuery中的load方法一般怎么用的? (67)
42、你在ajax中使用过JSON吗,你是如何用的? (67)
43、你使用过哪些数据格式,它们各有什么特点? (67)
44、在jQuery执行ajax中,提交的data(数据)主要有几种方式? (67)
45、jQuery是如何处理缓存的? (67)
46、你读过有关于jQuery的书吗? (68)
47、你知道jQuery中的事件冒泡吗,它是怎么执行的,何如来停止冒泡事件?
68
48、例如单击超链接后会自动跳转,单击"提交"按钮后表单会提交等,有时候我想阻止这些默认的行为,该怎么办? (68)
49、你使用过jQuery中的动画吗,是怎样用的? (68)
50、你使用过jQuery中的插件吗? (68)
51、怎样给jQuery动态附加新的元素?那么怎样给新生成的元素绑定事件呢?68
52、jQuery中有几种方法可以来设置和获取样式 (68)
53、jQuery中如何来获取或和设置属性? (69)
54、解决jQuery和其它库的冲突 (69)
四、项目开发经验 (69)
1、在eclipse中调试时,怎样查看一个变量的值? (69)
2、你们公司使用的代码配置管理工具是什么? (69)
3、你们的项目总金额多少,多少人开发,总共花了多少个月? (69)
4、对表单输入的数据应该作哪些验证? (69)
5、防止SQL 注入有哪些方法? (69)
6、DDoS攻击的主要攻击方式包括? (70)
7、为什么需要单元测试? (70)
8、你在项目开发过程中遇到的最大的问题是什么? (70)
9、分层设计的好处 (70)
10、你们公司的开发流程是什么? (71)
11、你们项目成员组成? (72)
五、数据库部分 (72)
1、设计数据库的三大范式是什么? (72)
2、说出一些数据库优化方面的经验? (73)
3、Oracle数据库如何提高访问性能? (73)
4、你有优化SQL查询数据经验吗?如有能说一下你一般用那些什么方式进行优
化?77
5、什么是事务,事务的四个特性是什么?有哪些隔离级别? (77)
6、怎样建索引及索引的分类,索引有什么好处,要注意一些什么问题,如会不
会影响其他表? (77)
7、数据库中,数据类型char与varchar2有什么区别?性能方面各有什么优势?
78
8、你怎么知道查询SQL的性能高还是低? (78)
9、在开发过程中遇到过数据库锁吗?怎样解锁? (78)
10、怎样处理并发数据? (79)
11、能写出oracle中你常用到的sqlplus命令吗? (79)
12、delete from table 与truncate table的区别?drop table呢 (79)
13、union和union all有什么不同? (80)
14、一个用户表中有一个积分字段,假如数据库中有100多万个用户,若要在每
年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决? (80)
15、用JDBC如何调用存储过程 (80)
16、JDBC访问数据库的步骤? (81)
17、写一个用jdbc连接并访问oracle数据的程序代码 (81)
18、Class.forName的作用?为什么要用? (82)
19、大数据量下的分页解决方法。

(82)
20、这段代码有什么不足之处? (82)
21、简述建立索引的作用和索引的分类? (83)
22、什么是存储过程,有什么优缺点 (83)
23、Oracle存储过程的基本语法是什么? (84)
24、存储过程与SQL的区别? (84)
25、什么是视图?它的作用? (84)
26、视图给用户和开发人员带来的好处 (84)
27、如何创建视图? (84)
28、如何删除视图? (84)
29、Oracle数据库的主要特点如下: (85)
30、Oracle 基本概念 (85)
31、数据库、数据库实例的含义及区别? (85)
32、Oracle使用PL/SQL Developer导出数据的三种方式及区别? (85)
33、游标(CURSOR)的概念 (85)
34、表分区的特点及实现方式 (86)
35、SYS和SYSTEM中,哪个用户权限更大? (86)
36、Oracle中用什么函数按字符串截取字段? (86)
37、Oracle有哪些常用的函数? (86)
六、XML部分 (87)
1、Java解析XML有哪几种方法?并简述各自的优缺点(重复题个人觉得比较好)
87
2、你在项目中用到了xml技术的哪些方面?如何实现的? (87)
3、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几
种方式? (88)
4、如何使用DOM模式解析XML文档? (88)
七、Hibernate框架技术 (88)
1、为什么需要使用Hibernate? (88)
2、Hibernate使用步骤 (89)
3、谈谈你对Hibernate的理解。

(89)
4、iBatis与Hibernate有什么不同? (90)
5、Hibernate中实体对象的三种状态。

(90)
6、介绍一下Hibernate的二级缓存 (90)
7、Hibernate的数据加载方式 (91)
8、Hibernate如何延迟加载? (91)
9、Hibernate中怎样实现类之间的关系?(如:一对多、多对多关系) (92)
10、如何优化Hibernate? (92)
11、说下Hibernate缓存机制 (92)
12、hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集
没有一个实体类与之对应如何解决 (92)
13、hibernate的工作原理 (93)
14、hibernate的inverse属性的作用? (93)
15、cascade属性和inverse属性的作用和区别? (93)
16、为什么要用ORM? 和JDBC 有何不一样? (93)
17、hibernate中get()与load()区别 (94)
18、Hiberane中Query对象的list()方法和iterate()方法的区别: (94)
19、Hibernate支持两种查询方式: (94)
20、为什么使用HQL查询? (94)
21、使用HQL步骤 (94)
22、HQL优化 (95)
23、HQL联接查询有几种方式? (95)
八、Struts框架技术 (95)
1、什么是设计模式模式? (95)
2、什么是框架? (95)
3、Java领域中的主流框架有哪些? (95)
4、如何实现自定义MVC框架? (96)
5、谈谈你对Struts 1.x的理解。

(96)
6、Struts1.x的工作机制? (97)
7、Struts1.x优缺点 (97)
8、说说struts1与struts2的区别。

(98)
9、Struts 1有哪些核心组件? (99)
10、Struts 2中如何解决中文乱码问题? (99)
11、Struts2配置文件中的package元素与Java中的包有什么异同之处? (99)
12、Struts2开发Action有几种模式,Action的作用是什么? (99)
13、Struts 2结构体系的运行原理(重点) (100)
14、Struts 2核心接口和类 (101)
15、说说对Struts 2拦截器的理解? (101)
16、拦截器工作原理 (102)
17、为什么要用拦截器? (102)
18、Struts2内置的拦截器 (102)
19、Struts2自定义拦截器? (103)
20、拦截器和拦截器栈有什么异同? (103)
21、Struts 2 表单标签和普通HTML表单标签有什么不同之处? (103)
22、Struts 2中自定义类型转换器 (104)
23、为什么要进行类型转换? (104)
24、国际化、本地化的含义是什么? (104)
25、Struts2国际化资源文件的范围 (104)
26、Struts2的配置文件介绍 (105)
27、什么是OGNL (106)
28、OGNL和EL有什么异同? (106)
29、OGNL中访问根元素和非根元素有什么区别? (106)
30、OGNL在Struts 2中的作用 (107)
九、Spring框架 (107)
1、什么是依赖,什么是依赖注入? (107)
2、Spring依赖检查机制 (107)
3、SpringMVC工作机制? (107)
4、Spring是什么? (108)
5、为什么要使用Spring框架? (108)
6、Spring主要包含哪些模块? (108)
7、Spring的自动装配机制? (109)
8、Spring自动装配的优缺点 (110)
9、Spring如何实现IOC容器功能 (110)
10、Spring如何与Struts 2集成? (111)
11、什么是声明式事务。

(111)
12、Spring如何使用声明式事务管理Hibernate的事务 (111)
13、AOP核心概念 (111)
14、什么是AOP(Aspect-oriented programming面向方面编程) (112)
15、Spring AOP原理 (112)
16、Spring中的通知类型? (112)
17、Spring对持久层的支持: (113)
18、Spring的事务机制 (113)
19、数据库并发操作存在的异常情况? (113)
20、事务隔离级别 (114)
21、数据库锁概念 (115)
22、关于Spring与EJB (115)
23、在Tomcat 上配置https 协议有哪些主要的步骤: (115)
24、实际开发过程中为什么拆分Spring配置文件? (116)
25、采用何种策略拆分Spring配置文件? (116)
十、软件工程与设计模式 (116)
1、UML方面 (116)
2、j2ee常用的设计模式? (116)
3、常用的设计模式分类 (116)
4、单例模式的优点 (117)
5、什么是工厂模式? (117)
6、开发中都用到了那些设计模式?用在什么场合? (117)
7、您看过哪些JA V A方面的书籍,能列举一下吗? (118)
8、您了解Open Source的项目吗? 如果了解请描述几个,并讲述一下他们的作用?
118
十一、JA V AEE部分 (118)
1、JNDI是什么? (118)
2、说出数据连接池的工作机制是什么? (118)
3、BS与CS的联系与区别。

(119)
十二、EJB部分 (120)
1、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,
StatefulBean和StatelessBean的区别。

(120)
2、EJB与JA V A BEAN的区别? (120)
3、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务
的?121
4、EJB的几种类型 (121)
5、什么是POJO类 (121)
6、EJB2和EJB3在架构上的不同点 (121)
7、介绍一下EJB的分类及其各自的功能及应用? (122)
8、JPA的特点 (123)
9、EJB发布WEB 服务一般步骤? (123)
10、你熟悉的应用服务器有哪些? (123)
十三、WebService部分 (123)
1、什么是Web服务(web service) (123)
2、Web服务的优点有哪些? (124)
3、XFIRE框架如何创建和发布Web服务? (124)
4、XFIRE框架如何调用Web服务? (124)
5、WEB SERVICE名词解释。

JSWDL开发包的介绍。

JAXP、JAXM的解释。

SOAP、UDDI,WSDL解释。

(124)
6、CORBA是什么?用途是什么? (125)
7、什么是SOA? (125)
8、SOA与web服务的区别?SOA的优势是什么? (125)
十四、人事面试 (126)
一、Java基础部分
1、一个.Java源文件中是否可以包含多个类,(不是内部类)?有什么区别·
可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。

2、Java有没有goto?
java中的保留字,现在没有在java中使用。

3、说说&和&&的区别。

&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。

&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。

If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。

备注:这道题先说两者的共同点,再说出&&和&的特殊之处,并列举一些经典的例子来表明自己理解透彻深入、实际经验丰富。

4、Java中的“短路”是指什么
在java逻辑运算中使用逻辑运算符||与&&时将采取“短路”运算。

举一个例子
上面一段代码的执行过程是当a满足大于0的时候将不会再执行后面的a<1代码,这就是“短路”。

5、在JA V A中如何跳出当前的多重嵌套循环?
在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里
层循环体的代码中使用带有标号的break 语句,即可跳出外层循环。

例如,
ok://定义的标号
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
System.out.println(“i=” + i + “,j=” + j);
if(j == 5) {
break ok;//跳出到指定的标号 vvv.3.
}
}
}
另外,我个人通常并不使用标号这种方式,而是让外层的循环条件表达式的结果可以受到里层循环体代码的控制,例如,要在二维数组中查找到某个数字。

int arr[][] = {{1,2,3},{4,5,6,7},{9}};
boolean found = false;
for(int i=0;i<arr.length && !found;i++){
for(int j=0;j<arr[i].length;j++){
System.out.println(“i=” + i + “,j=” + j);
if(arr[i][j] == 5){
found = true;
break;
}
}
}
6、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
在switch(expression)中,expression只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char 都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。

显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。

7、short s = 1; s = s + 1;有什么错? short s = 1; s += 1;有什么错?
对于short s = 1; s = s + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。

对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对
它进行特殊处理,因此可以正确编译。

8、char型变量中能不能存贮一个中文汉字?为什么?
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。

不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。

补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

备注:后面一部分回答虽然不是在正面回答题目,但是,为了展现自己的学识和表现自己对问题理解的透彻深入,可以回答一些相关的知识,做到知无不言,言无不尽。

9、用最有效率的方法算出2乘以8等于几?
最有效率的计算方式:int result = 2 << 3;
因为将一个数左移n位(二进制移位运算),就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算是cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。

10、冒泡排序实现
口诀:n个数字来比较,外层循环N-1,内层循环N-1-i,两两相比小靠前。

代码示例:
11、"=="和equals方法究竟有什么区别?
(单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在
一起说,则很难说清楚)
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。

如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();引用变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。

对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。

equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。

例如,对于下面的代码:
String a=new String("foo");
String b=new String("foo");
两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式 a.equals(b)将返回true。

在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,String input = new String(“quit”); input.equals(“quit”),许多人稍不注意就使用==进行比较了,这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有大量这样的错误。

记住,字符串的比较基本上都是使用equals方法。

如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,Object 类的equals方法的实现代码如下:
boolean equals(Object o){
return this==o;
}
这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object 类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。

如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须重写equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。

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

如果对象要保存在HashSet或HashMap中,它们的equals相等,那么,它们的hashcode 值就必须相等。

如果不是要保存在HashSet或HashMap,则与hashcode没有什么关系了,这时候hashcode 不等是可以的,例如arrayList存储的对象就不用实现hashcode,当然,我们没有理由不实现,通常都会去实现的。

13、写出Object类中定义的方法。

clone():创建并返回此对象的一个副本。

equeals(Object obj):指示某个其他对象是否与此对象“相等”。

finalize():当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

getClass():返回一个对象的运行时类。

hashCode():返回该对象的哈希码值。

notify():唤醒在此对象监视器上等待的单个线程。

notifyAll:唤醒在此对象监视器上等待的所有线程。

toString():返回该对象的字符串表示。

wait():导致当前的线程等待,直到其他线程调用此对象的notify方法或notifyAll()方法wait(long timeout):wait方法的overload方法。

wait(long timeout,int nanos):wait方法的overload方法。

14、hashCode方法的作用?
hashcode这个方法是用来鉴定2个对象是否相等的。

那你会说,不是还有equals 这个方法吗?
不错,这2个方法都是用来判断2个对象是否相等的。

但是他们是有区别的。

一般来讲,equals这个方法是给程序员编码时调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,就可以判断他们是否相等了。

简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。

举个例子,有个学生类,属性只有姓名和性别,那么我们可以认为只要姓名和性别相等,那么就说这2个对象是相等的。

hashcode方法一般程序员编码时不会去调用,比如在hashmap中,由于key是不可以重复的,它在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。

这里不可以重复是说equals和hashcode只要有一个不等就可以了!所以简单来讲,hashcode相当于是一个对象的编码,就好像文件中的MD5(一种唯一标识文件的加密代码),它和equals不同就在于他返回的是int型的,比较起来不直观。

我们一般在重写equals的同时也要重写hashcode,让它们的逻辑一致。

举个例子,还是刚刚的例子,如果姓名和性别相等就算2个对象相等的话,那么hashcode的方法也要返回姓名的hashcode值加上性别的hashcode值,这样从逻辑上,它们就一致了。

要从物理上判断2个对象是否相等,用==就可以了。

1)
15、写clone()方法时,通常都有一行代码,是什么?
clone方法就是克隆,用于复制对象。

clone 有缺省行为,super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。

16、静态变量和实例变量的区别?
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。

在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。

静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。

总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar变量,并且每创建一个实例对象,这个staticVar就会加1;但是,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar的值都只自加了1次。

public class VariantTest{
public static int staticVar = 0;
public int instanceVar = 0;
public VariantTest() {
staticVar++;
instanceVar++;
System.out.println(“staticVar=”+ staticVar + ”,instanceVar=”+ instanceVar);。

相关文档
最新文档