Java程序员面试秘笈(txt+pdf+epub+mobi电子书下载)


发布时间:2021-04-03 18:19:51

点击下载

作者:陈浩

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Java程序员面试秘笈

Java程序员面试秘笈试读:

前言

本书的思路

截至2013年8月,Java上升为最流行的开发语言,下面的图是TIOBE发布的编程语言排行榜。所有人都看到了Java排序的上升,越来越多的企业开始使用Java开发项目。这就增加了Java程序员的就业机会。本书就是要帮助Java程序员顺利找到工作。如果你刚毕业,或者你是一只Java小小鸟,那本书就是你的不二选择,它能提升你找到工作的机会。

本书的特色

1.内容精炼

本书不是一本讲述Java基础知识的入门书籍,而是对面试中或者是实际软件开发中经常遇到的问题进行总结和归纳,涉及的知识点多而且广泛,对读者更好地理解Java开发有极大的帮助。

2.技术点讲解透彻

本书虽然是面试书,但对基础点的介绍详尽实用,可以做到举一反三,在讲解面试题时,还有很多的拓展知识点,帮助Java面试人员全方位应对知识点的考核。

3.针对市场热点

Java 是目前软件开发技术关注度最高的语言,Java 程序员的需求量也越来越大。而目前市面上关于Java面试方面的书籍内容都比较偏。本书从软件公司技术需求角度来组织内容,只要读者阅读本书,就可以快速适应Java软件开发工作,不需要进入公司后再进行大量的培训和学习。

4.重实践,实用性强

本书针对常见的面试题,都给出了案例来辅佐解析,对一些概念题,也用了一些生活化的例子帮助读者加强记忆。

本书内容

本书内容突出了在Java面试中,或者是Java项目开发中,必须掌握的技能和容易忽略的内容,对Java面试者来说,可以快速掌握面试过程中考察的知识点,减少面试准备时间,提高面试成功率。本书共分为16章280余面试题。

第1章 Java 编程基础

本章介绍了Java的安装与调试、Java开发中的基本术语和基本概念、类、Java的调试和运行,以及常用的Java 开发工具。本章通过真实的试题,从多个角度讲解Java编程基础部分的考点,使求职者能够快速领会用人单位的需求,提高自己在应聘中成功的几率。

第2章 Java 语言基础

本章介绍了Java的基本语言元素、原始数据类型、变量声明、变量初始化、Java源文件结构和 main()方法。在用人单位的面试中,Java 语言基础知识是考察的重点之一,也是一个合格Java程序员必须掌握的知识。

第3章 运算符和类型转换

本章介绍了运算符/和%、++i、i++、--i和i--的不同、instanceof运算符、位逻辑和移位运算符、三目运算符、运算符的优先级。Java运算符起源于C和C++,但是它有自己独特的运算方式和行为,并增加了独有的运算符。这一点求职者必须充分重视。

第4章 声明和访问控制

本章介绍了一维数组和多维数组、获得数组长度、数组索引、数组元素的初始化、Java类和方法的声明、Java修饰符、Java的构造器机制等。在Java语言中,声明和访问控制是基础内容之一,也是Java程序员面试当中必考的一部分。

第5章 流程控制、异常处理和断言

本章介绍了流程控制语句、break和continue、try/catch/finally、断言。流程控制和异常处理是高级语言所必须具备的基础部分,也是Java程序员必须掌握的知识。在Java面试中,流程控制和异常处理都是考察的重点之一。

第6章 深入理解面向对象的精髓

本章介绍了面向对象的特征、面向对象设计的原则、Java 类的继承、方法重载和方法覆盖、构造函数。求职者如何理解OOP设计思想、继承及接口等是面试中常见的考查内容。

第7章 对象生存期

本章介绍了Java的对象回收、JVM的垃圾回收、finalize()方法、3种初始器和Java对象初始化的执行顺序。Java 的堆是一个运行时数据区,类的实例对象从中分配空间。Java虚拟机的堆中存储着正在运行的应用程序所建立的所有对象。这些原理性的知识,都是面试中考察的关键。不懂JVM,不懂垃圾回收,就意味着你还不懂Java。

第8章 线程

本章介绍了Java的多线程机制、线程和进程、线程的状态、创建线程、线程的同步等知识。一般来说,把正在计算机中执行的程序叫作“进程”(Process),而不将其称为程序(Program)。所谓“线程”(Thread),是“进程”中某个单一顺序的控制流。线程也是 Java中相当重要的组成部分之一。

第9章 面向对象的基础类

本章介绍了lang包、Math类和Object类、String类和StringBuffer类、util包、Java集合、常见的 IO 类、文件输入输出等技术。本章介绍的都是常见的 Java 基础类,这些类是Java软件开发的基础,也是在项目开发中经常使用的。

第10章 Servlet/JSP基础

本章介绍了Servlet技术的处理机制、Servlet技术和CGI技术的区别、Servlet的生命周期、Servlet中的重定向方法、JSP技术的处理机制、JSP内置对象的使用、JSP的基本动作指令、JSP 的页面跳转、JSP EL表达式语言、JSP 的自定义标签等技术。Servlet/JSP 技术是Java Web开发的基础,目前国内的大部分Java开发都是基于Web的,所以,Servlet/JSP 也是Java程序员面试中必考的内容。

第11章 Java EE相关概念

本章介绍了Java EE的相关概念、SOA 和Web Service的相关概念,还包括一些相关的技术名词,如JAXP、JAXM等。Java EE 技术是Java高级程序员开发工作的基础,所以了解这些概念非常重要。

第12章 数据库技术

本章介绍了 JDBC 的工作机制、JDBC 的使用、基本的数据库知识和常见的数据库(Oracle和SQL Server)。数据库是Java项目开发不可或缺的工具。求职者需要掌握基本的JDBC、数据库技术和常用的数据库基本操作。

第13章 常见的开源技术

本章介绍了一些开源框架和流行技术,如 Struts 2、Spring、Hibernate、Ajax、JSF、FreeMarker模板、Log4j等。使用开源技术的好处就在于安全、免费、自由、功能强大,而且更有前途。

第14章 软件工程和UML

本章讲解了软件工程的基本原则、生命周期、建模、UML语言、UML的 5 类图和用例的相关知识。对于高级软件开发者来说,必须熟悉软件工程和UML,这也是在面试中经常涉及到的。

第15章 上机编程面试题

在程序员面试中,经常会出现上机编程面试题,要求求职者能够根据题目的要求,使用一种编程工具,编写全部代码并调试运行。这主要是考察求职者代码书写和编程的熟练程度,本章提供的都是需要上机练习的代码面试题。

第16章 考察算法和逻辑思维的面试题

很多面试中会出现智力测试方面的内容,在考察求职者技术的同时,也考察求职者分析、解决问题和临场反应等方面的能力。这类题有的只需要伪代码,有的不需要编码,只需要给出解决方案。本章就介绍了常见的思维能力考试题,并辅助以代码,让读者能真正地了解出题方向和解决思路。

本书读者群

刚毕业想从事Java程序开发的入门程序员;

工作1年后想跳槽的初级程序员;

Java面霸们;

从其他开发语言转到Java语言开发的普通程序员;

毕业于专业培训机构的Java学员。

本书由陈浩、许少红编写,其中陈浩编写了第1~7章,许少红(寿光市人民医院信息网络中心)编写了第8~16章,由于时间匆忙,编写中难免有所疏漏和不妥之处,尽请不吝指正。作者第1章Java编程基础

通过考察Java编程基础,用人单位可以了解求职者对Java语言的理解程度和熟练程度,一个熟练、具备开发经验的程序员,可以轻松地解答相关问题。而对于刚刚准备步入职场的新人,由于基础不扎实,准备不充分,Java基础编程方面的面试题往往会给他们造成一定的困扰。值得注意的是,企业和学校对Java基础考察的方向有很大的不同,往往求职者对哪些编程基础必须掌握没有一个清醒的认识,不知道企业需要考察哪方面的知识,这样会失去很多可贵的机会。

本章通过真实的试题,从多个角度讲解Java编程基础部分的考点,使求职者能够快速领会用人单位的需求,提高自己在应聘中成功的几率。

求职者需要熟练掌握以下知识点。

Java 的安装与调试,重点是Java 环境的配置。

Java 开发中基本术语和基本概念。

理解类、对象、引用、变量、方法和成员。

熟练掌握Java 的调试和运行。

了解和掌握常用的Java 开发工具。面试题1 简单描述Java开发包的种类

考点:考察求职者对于Java体系的认识,属于Java程序员的必备知识。

出现频率:★★★【面试题解析】随着 Java 语言的成长和壮大,Java 的开发包根据用途的不同已经分为Java EE、Java SE 和Java ME 3 个开发包,求职者需要列出名称,并具体描述每个开发包的用途。

参考答案:

Java SDK的版本分类如下所述。

Java ME:(Java Platform Micro Edition)一种以广泛的消费性产品为目的的高度优化的Java运行环境,包括寻呼机、移动电话、可视电话、数字机顶盒等。它是致力于消费产品和嵌入式设备的开发人员的最佳选择。

Java SE:(Java Platform Standard Edition)是针对桌面开发以及低端商务计算解决方案而开发的版本。

Java EE:(Java Platform Enterprise Edition)是一种利用Java 平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE 的基础是JAVA SE, J2EE不仅巩固了标准版中的许多优点,同时还提供了对EJB、Servlets、JSP以及XML技术的全面支持。面向对象设计思想是Java程序设计基础,作为一个合格的Java 程序员,必须对面向对象编程(OOP)有深刻的理解。所以常见的面试题中都会出现考察求职者对OOP理解方面的题目。面试题2 Java语言的特性有哪些

考点:考察求职者对Java语言的认识。

出现频率:★★【面试题解析】需要求职者列出Java 语言的几个重要特点。答题时只需要写出特点,一般不需要详细解释。下面参考答案中给出了相应的详细描述,供读者参考,同时加强理解。

参考答案:

Java语言是一个面向对象的程序设计语言。Java语言吸收了Smalltalk语言和C++语言的优点,并增加了其他特性,如支持并发程序设计、网络通信和多媒体数据控制等。主要特性如下。(1)Java语言是简单的。一方面,Java语言的语法与C语言和C++语言很接近,大多数程序员很容易学习和使用 Java。另一方面,Java 丢弃了 C++中使用频率相对较少的、较难理解的一些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java 语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。(2)Java 语言是面向对象的。Java 语言提供类、接口和继承等特性,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java 语言全面支持动态绑定,而 C++语言只对虚函数使用动态绑定。总之,Java 语言是一个单纯的面向对象的程序设计语言。(3)Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket 等。Java 的 RMI(远程方法激活)机制也是开发分布式应用的重要手段。(4)Java 语言是健壮的。强类型机制、异常处理机制、垃圾回收机制、安全检查机制等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。(5)Java语言是安全的。Java通常被用在网络环境中,以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java 对通过网络下载的类本身具有一个安全防范机制,通过分配不同的名字空间,以防替代本地的同名类和字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。(6)Java语言是跨平台的。Java程序在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),可以在任何操作系统中的Java虚拟机上运行。(7)Java 语言是多线程的。Java 语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。面试题3 Linux操作系统下如何安装Java SE开发环境

考点:由于大部分的计算机用户都使用Windows作为操作系统,而Java语言是具有跨平台优势的,不同企业有不同的开发环境,本试题考察求职者是否有在 Linux 下开发 Java的经验。Linux环境下的Java安装是一个基础问题。

出现频率:★★★【面试题解析】该问题有两个关键点,一个是Linux版本Java SDK的文件类型,另外一个是Linux环境变量的配置。

参考答案:

Oracle 发布的Linux 操作系统Java 包有JDK 和JRE 两种版本。JDK(Java Development Kit,Java 开发包)是整个Java 的核心,包括了Java 运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。

JRE(Java Runtime Envirnment,Java运行环境)是JDK 的一个部分,仅仅提供了运行Java程序的环境,如果开发Java程序,必须安装JDK。(1)首先到Sun 的网站上去下载JDK,截止本书编写时最新版本为Java 7 update 21,下载jdk-7u21-linux-i586.tar.gz文件。(2)把安装文件解压出来。假设下载的文件保存在/opt下。打开终端,运行以下命令:

cd /opt

tar zxvf jre-7u21-linux-i586.tar.gz

Java文件将安装在/opt目录中的jdk1.7.0_21内。(3)测试是否安装成功,可以在控制台中输入如下命令:

java –version

如果安装成功,控制台会显示当前JDK的版本信息。(4)配置JAVA_HOME环境变量:一般Java开发者需要在操作系统的环境变量中配置JAVA_HOME,这样才能使其他Java项目,例如Struts、Tomcat等能够正常运行。这里以最常用的bash命令解释器为例,编辑用户目录下的.bashrc或.profile文件。如果需要在所有用户的shell下都生效,就编辑/etc/profile文件。同样都是加入以下内容:

export JAVA_HOME=/opt/ jdk1.7.0_21

export JRE_HOME=/opt/jdk1.7.0_21 /jre

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH:.

注意:在 Windows 操作系统中安装 JDK 更加简单,只需要配置好 JAVA__HOME 和CLASSPATH这2个环境变量即可。Linux配置中,多个路径直接使用“:”连接,而Windows操作系统中则使用“,”来连接。为了方便Java程序的编译,特别是使用javac来进行编译的情况下,需要在CLASSPATH中加入“.”,即当前路径。面试题4 列出你熟悉的Java开发工具

考点:该问题一般会在面试时出现,主要是看求职者是否熟悉常用的Java开发工具,因为一个项目开发团队会使用一种固定的开发工具,只有求职者能够熟练使用该工具,才能够快速融入该团队。

出现频率:★★★★★【面试题解析】Java作为一种跨平台开发语言,由于其开源性,各个公司和社区组织,都推出了各自的Java开发工具,这也是Java开发体系同微软的开发体系的区别之一。不同的项目开发团队一般都有自己熟悉的开发工具或者开发环境,求职者只有熟练使用不同的开发工具,才能适应项目开发需要,得到用人单位的认同,增加成功的把握。从国内的情况来看,大多数都是使用JBuilder和Eclipse作为项目开发的首选工具,所以,求职者应该至少掌握其一。

参考答案:

常见的Java开发工具如下所述。(1)JDK(Java Development Kit)Java 开发工具:最基本的开发工具,必须掌握。(2)Borland的JBuilder:JBuilder是历史比较悠久的Java集成开发环境,也是要求求职者需要掌握的。不过目前很多开发团队并不使用JBuilder作为开发工具,因为它是一个商业性的产品,需要付费。(3)Oracle的JDeveloper:最新版本为11g,是Oracle公司提供的开发工具,它为构建具有J2EE功能的、多层的Java应用程序提供了一个完全集成的开发环境。目前国内使用率比较低,对于初学者来说,较复杂,也比较难。(4)IBM 的Visual Age for Java:Visual Age for Java 是一个非常成熟的开发工具,它的特性对于IT开发者和业余的Java编程人员来说都是非常有用的。但是在国内,它也不是Java应用开发的主流工具。(5)Eclipse:Eclipse是一种可扩展的开放源代码的集成开发环境。Eclipse发展最快,得到了国内外大多数程序员的肯定,目前已经成为主流的Java开发工具。Eclipse的最大特点是能接受由Java开发者自己编写的开放源代码插件,同时Eclipse为工具开发商提供了更好的灵活性,使他们能更好地控制自己的软件技术。

Eclipse可以说是求职者必须掌握的一个Java开发工具,缺点就是较复杂,对初学者来说,使用起来比较困难。

注意:此面试题的目的是了解求职者对于Java开发工具的认识和掌握。回答此类问题时,不必列出所有的开发工具。实际上,Java开发工具是非常多的,除了这里列出的之外,还有Microsoft VJ++、JCreator、Intellij IDEA和BEA 的WebLogic Workshop等。求职者一般只要熟练使用JBuilder和Eclipse就可以满足大部分的国内开发要求。值得注意的是,有些特别的公司,例如IBM 会要求求职者熟悉IBM 的Visual Age for Java,这就要求求职者在面试之前一定要先了解该公司的大致情况,做好相关的准备。面试题5 用自己的语言描述Java中的类和对象

下列关于对象的哪一种说法是正确的?请选择一个正确的答案。(a)对象是可以对其进行实例化从而得到类的东西。(b)对象是类的实例。(c)对象是一种蓝本,据此可以创建抽象的具体实现。(d)对象是指向属性的引用。(e)对象是一种变量。

考点:该面试题考察求职者对于Java类和对象的理解。

出现频率:★★★【面试题解析】

1.类

在处理复杂事物的时候,用到的一种基本手段就是抽象。抽象的目的就是区别事物之间的本质和不同,面向对象编程(OOP)的实质就是利用类和对象来建立抽象模型。

类表示了对象的类别,是创建对象的蓝本。建立一个事物的抽象模型,本质上就是表达该事物的性质和行为。使用类来建立抽象模型,是通过在类中定义变量和方法来实现的。

类中定义的属性是一种可存储值的变量,该变量代表着事物的具体性质。类的对象所具有的行是由定义的方法来实现的。类中定义的变量和方法被称为类的成员。

在项目开发中,类一般可以通过UML建模来表示,如图1.1所示。图1.1 类的UML 表示法

图1.1中,定义了类Gun的成员,即类Gun的变量和方法。从UML图中可以看到,类定义了如下所示3个变量。

caliber:是一个Double 类型的变量,表示Gun 类所抽象事物(枪)的口径。

length:是一个Double 类型的变量,表示Gun 类所抽象事物(枪)的长度。

gun_type:是一个字符串类型的变量,表示Gun类所抽象事物(枪)的类型,例如是手枪还是突击步枪。

同时类中定义了如下所示3个方法。

fire:定义了Gun 的开火行为,及fire 方法。

maintenance:定义了Gun 的维护方法。

Gun:定义了一个同类同名的构造方法。

开发者可以通过UML生成代码工具,或者是手工在编辑器中建立图1.1中所示的类,如下所示:

public class Gun {

// 定义枪的口径

public Double caliber;

// 定义枪的长度

public Double length;

// 定义枪的类型

public int gun_type;

// 构造方法

public Gun() {

}

// 带参数的构造方法

public Gun(String name) {

}

// 开火的方法

public void fire() {

System.out.println(gun_type +" is fireing");

}

// 维护的方法

public Boolean maintenance() {

return true;

}

}

2.对象

对象是类的实例。对象在构造时以类为蓝本,创建对象的过程叫做实例化。对象是类所表示的抽象事物的具体实例。例如前面所讲述的Gun类,那么可以根据Gun类创建一个ak47的对象,即Gun的具体实现。

对象可以使用UML来表示,如图1.2所示。图1.2 对象的UML 表示法

ak47是根据Gun类创建的一个对象,在Java程序中,可以使用如下代码创建一个Gun对象:

……

public static void main(String[] args) {

//建立一个Gun类对象,即Gun类的实例ak47

Gun ak47=new Gun();

//定义ak47的口径

ak47.caliber=7.6;

//定义ak47的长度

ak47.length=57.8;

//定义ak47的类型

ak47.gun_type="AK47";

//调用fire方法

ak47.fire();

}

……

运行该示例,结果如下:

AK47 is firing

参考答案:(b)。面试题6 命名Java变量

请命名以下变量。表1.1 面试题6

考点:该面试题主要考察求职者的编程习惯,良好的编程习惯是一个优秀的Java开发者的必备素质。求职者应该掌握基本的Java命名规范,这样编写出来的代码才能做到够规范和易读。

出现频率:★★★【面试题解析】在面向对象编程中,对于类、对象变量、方法等的命名是非常有技巧的,例如,大小写的区分,使用不同字母开头等。但究其本,追其源,在为一个资源命名时,应该本着描述性和唯一性两大特征,才能保证资源之间不冲突,并且便于记忆。

1.包的命名

Java包的名字都是由小写单词组成。每一名Java程序员都可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,最新的Java编程规范,要求程序员在自己定义的包的名称之前加上唯一的前缀。由于互联网上的域名是不会重复的,所以程序员一般采用自己在互联网上的域名作为自己程序包的唯一前缀。

例如:net.frontfree.javagroup。

2.类的命名

类的名字必须由大写字母开头,单词中的其他字母均为小写。如果类名称由多个单词组成,则建议将每个单词的首字母均用大写,例如TestPage。如果类名称中包含单词缩写,则建议将这个词的每个字母均用大写,如 XMLExample。由于类是设计用来代表对象的,所以建议在命名类时应尽量选择名词。

3.方法的命名

方法的名字的第1个单词应以小写字母作为开头,后面的单词则建议用大写字母开头。

例如:sendMessge。

4.常量的命名

常量的名字应该都使用大写字母,并且指出该常量的完整含义。如果一个常量名称由多个单词组成,则建议用下划线来分割这些单词。

例如:MAX_VALUE。

5.参数的命名

参数的命名规范和方法的命名规范相同,而且为了避免阅读程序时造成迷惑,请尽量保证在参数名称为一个单词的情况下,参数的命名尽可能明确。

6.Javadoc注释

Java 除了可以采用常见的注释方式之外,Java 语言规范还定义了一种特殊的注释,也就是通常所说的Javadoc注释,它是用来记录代码中的API的。Javadoc注释是一种多行注释,以/**开头,而以*/结束,注释可以包含一些HTML标记符和专门的关键词。使用Javadoc注释的好处是编写的注释可以被自动转化为在线文档,省去了单独编写程序文档的麻烦。例如:

/**

*This is an example of

* Javadoc

*

*@author darchon

*@version 0.1, 10/11/2002

*/

在每个程序的最开始部分,一般都用Javadoc注释进行程序的总体描述以及版权信息。在主程序中可以为每个类、接口、方法、变量添加Javadoc注释,每个注释的开头部分先用一句话概括该类、接口、方法、变量所完成的功能,这句话应单独占据一行以突出其概括作用,在这句话后面可以跟随更加详细的描述段落。

在描述性段落之后还可以跟随一些以Javadoc注释标签开头的特殊段落,例如上面例子中的@auther和@version,这些段落将在生成的文档中以特定方式显示。

虽然添加注释不会使一个设计低劣的程序变成好的程序,但是如果按照编程规范编写程序,并且为程序添加良好的注释,却可以帮助编写出设计优美、运行高效,且易于理解的程序。尤其在多人合作完成同一项目时,编程规范非常重要。俗话说“磨刀不误砍柴工”,花费一点时间去适应一下Java编程规范是有好处的。

参考答案:(符合命名规则即可。)表1.2 面试题6答案面试题7 理解成员

下面关于实例成员的哪一种说法是正确的?(a)实例成员也被称为静态成员。(b)实例成员总是变量。(c)实例成员从不是方法。(d)实例成员隶属于实例,但不隶属于整个类。(e)实例成员总是代表着运算。

考点:考察求职者对于实例成员的理解。

出现频率:★★★★【面试题解析】

1.实例成员

对象是以类为蓝本创建的类的实例。在类中,一般都定义了类的成员(变量和方法),在创建类的对象时,对象都会拥有类中所定义变量的副本,对象的变量也被称为实例变量。对象的实例变量的值代表了该对象的状态,例如ak47对象,其中gun_type的对象变量表明了该对象为“ak47”类型的Gun。如果一个类的两个对象处于同一个状态,则它们的某个实例变量应该是相同的。

对象的方法定义了该对象的行为,一般被称为实例方法。实例方法属于该类的每个对象,而方法的实现是有所有的类实例共享的。求职者应该加以区别。

隶属于对象的实例变量和实例方法合称为对象的实例成员。值得注意的是,应与类的静态成员相区别,静态成员只是隶属于类,而不隶属于对象。

2.静态成员

静态成员隶属于类,而不属于任何该类生成的对象,当类加载时就会初始化静态变量;同样,静态方法也是隶属于类的,而不是对象。静态变量和静态方法合称为静态成员。例如,类Gun中可以增加gunAmount静态变量和getGunAmount()静态方法,如图1.3所示。图1.3 增加静态成员的UML 表示图

根据图1.3所示的UML模型,修改后的Gun类代码如下所示:

public class Gun {

// 定义枪的口径

public Double caliber;

// 定义枪的长度

public Double length;

// 定义枪的类型

public String gun_type;

//定义静态变量

public static int gunAmount;

// 构造方法

public Gun() {

gunAmount++;

}

// 带参数的构造方法

public Gun(String name) {

gunAmount++;

}

// 开火的方法

public void fire() {

System.out.println(gun_type +" is firing");

}

// 维护的方法

public Boolean maintenance() {

return true;

}

//获得静态变量值

public static int getGunAmount(){

return gunAmount;

}

}

测试方法代码如下所示:

……

public static void main(String[] args) {

//建立Gun类对象,即Gun类的实例ak47

Gun ak47=new Gun();

//使用带参数的构造方法

Gun m16=new Gun("M16 Gun");

//打印类的静态变量值

System.out.println("Zhe Gun Amount is:"+Gun.gunAmount);

//定义ak47的口径

ak47.caliber=7.6;

//定义ak47的长度

ak47.length=57.8;

//定义ak47的类型

ak47.gun_type="AK47";

//调用fire方法

ak47.fire();

}

……

运行该测试方法,结果如下:

Zhe Gun Amount is:2

AK47 is firing

可见,静态成员只隶属于类,而不是对象。表1.3给出了类成员的相关解释。表1.3 类成员的相关术语

参考答案:(d)。面试题8 在Java中,对象是如何传递消息的

请选择一个正确答案。(a)对象通过彼此的变量来传递消息。(b)对象通过修改彼此类的静态变量来传递消息。(c)对象通过调用彼此的实例方法来传递消息。(d)对象通过调用彼此类的静态方法来传递消息。

考点:考察求职者对于对象传递消息的理解。

出现频率:★★

面试题解析Java对象之间的消息传递,是通过调用相互的实例方法来实现的,而不是静态方法。

参考答案:(c)。面试题9 对于类的静态变量的理解

运行下面程序,请选择输出结果。

public class x {

private static int a;

public static void main(String[] args) {

modify(a);

System.out.println(a);

}

public static void modify(int a) {

a++;

}

}(a)0(b)1(c)2(d)3

考点:考察求职者对于类的静态变量的理解。

出现频率:★★★★【面试题解析】类的静态变量a在modify()方法中并没有被改变,而是改变了modify()方法的参数。如果将上述代码修改如下:

public class x {

private static int a;

public static void main(String[] args) {

modify(a);

System.out.println(a);

}

public static void modify(int a) {

a++;

}

}

那么输出结果为1,但是面试题中静态变量a的值并没有改变,所以应该输出为0。

参考答案:(a)。面试题10 类继承的建模表示方法

根据图1.4的UML表示,选择一个正确的描述。图1.4 UML 表示图(a)Box类是MyBox类的子类。(b)Box类是MyBox类的父类。(c)Box类和MyBox类是聚合关系。(d)Box类和MyBox类是一对多关系。

考点:该面试题貌似简单,在实际的面试中回答正确的却并不是很多,其实只是考察求职者对类的继承的建模表示方法的掌握程度。

出现频率:★★★【面试题解析】Java中有两种机制来保证根据现有的类来构造新的类,那就是继承和聚合。例如,有一个盒子的类 Box,开发者就可以根据类 Box 来构造各种细化的盒子类,因为所有的细化盒子类都是类Box的一种,这是一种继承的关系。

在UML建模表示图中,继承使用一个空心的三角箭头来表示,该箭头的方向是由子类指向父类的,表明子类依赖于父类,如图1.5所示。图1.5 类的继承UML 表示图

在Java中,要从现有的类构造出新的类,需要在子类的定义中使用extends子句。值得注意的是,在Java中,子类只能扩展一种父类,子类将继承超类的成员。示例代码如下:

//定义父类Box

class Box {

//默认属性可以被继承

int high;

//private不能被继承

private static String location;

private int counter;

//protected可以被继承

protected boolean isFull;

//构造函数

Box() {

high = 20;

location = "Room";

counter = 1;

isFull = true;

}

public static void printLocation() {

System.out.println("Location:" + location);

}

private void printCounter() {

System.out.println("Number of boxs::" + counter);

}

public boolean isFull() {

return isFull;

}

public int getCounter() {

return counter;

}

public void doLoad() {

isFull = true;

}

public void doRemove() {

isFull = false;

}

}

//子类

class MyBox extends Box {

private int length = 99;

private int colorNo = 45;

//覆盖父类属性

private int high=120;

public int getLength() {

return length;

}

public void printInfo() {

System.out.println("Length:" + getLength());

System.out.println("ColorNo:" + colorNo);

System.out.println("High:" + high);

System.out.println("isFull:" + isFull);

System.out.println("Counter:" + getCounter());

printLocation();

}

}

编写一个子类的测试类,其测试方法如下:

public static void main(String[] args) {

MyBox mybox = new MyBox();

mybox.printInfo();

}

运行结果如下:

Length:99

ColorNo:45

High:120

isFull:true

Counter:1

Location:Room

可见,子类继承了父类的成员。

参考答案:(b)。面试题11 使用jar命令

请使用jar命令,将test文件夹压缩成.jar文件,并简述其压缩包的结构。

考点:对于Java程序员来说,更多情况下是使用的集成Java开发工具,例如JBuilder、Eclipse等,而对于最基本的Java编译和常见的命令行工具往往都不熟悉。这个面试题主要考察求职者对于Java命令行基本工具的使用,从而了解求职者对Java编程的熟悉程度。

出现频率:★★★【面试题解析】熟练的Java开发者应该掌握常用的Java命令行工具。求职者应该熟练掌握javac、java和jar等工具。

1.javac

javac 是JDK的标准编译工具,常见的形式为:javac <选项> <源文件>。它可能的选项包括下面各项。

□ -g:生成所有调试信息。

□ -g:none:生成无调试信息。

□ -g:{lines,vars,source}:生成只有部分调试信息。

□ -nowarn:生成无警告。

□ -verbose:输出关于编译器正在做的信息。

□ -deprecation:输出使用了不鼓励使用的API 的源程序位置。

□ -classpath <路径>:指定用户类文件的位置。

□ -sourcepath <路径>:指定输入源文件的位置。

□ -bootclasspath <路径>:覆盖自举类文件的位置。

□ -extdirs <目录(多个)>:覆盖安装的扩展类的位置。

□ -d <目录>:指定输出类文件的位置。

□ -encoding <编码>:指定源文件中所用的字符集编码。

□ -target <版本>:生成指定虚拟机版本的类文件。

常见的问题:在使用javac编译.java源文件时找不到jar包,则需使用-classpath选项。例如:

javac -classpath .;jar01.jar;jar01.jar;……;jarN.jar class_name.java

使用-classpath选项,指定了在编译Java源代码时,用到类库的位置。一般用于该类库不在当前CLASSPATH的环境变量中。

2.java

java命令是JDK默认的java执行程序,在这里值得注意的是,在执行带包的.class文件时,需要使用标准的Java包形式。例如:

java com.nsfc.hello

3.jar

随着JDK安装,在JDK安装目录下的bin目录中存在一个可执行文件,Windows下文件名为jar.exe,Linux下文件名为jar。它的运行需要用到JDK安装目录下lib目录中的tools.jar文件。jar命令行格式为:

jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名

其中{ctxu}是jar命令的子命令,每次jar命令只能包含一个子命令,这些子命令的含义如下所述。

-c 创建新的JAR 文件包。

-t 列出JAR 文件包的内容列表。

-x 展开JAR 文件包的指定文件或者所有文件。

-u 更新已存在的JAR 文件包(添加文件到JAR 文件包中)。

[vfm0M]中的选项可以任选,也可以不选,它们是jar命令的选项参数。

-v 生成具体报告,并打印到标准输出。

-f 指定JAR 文件名,通常这个参数是必须的。

-m 指定需要包含的MANIFEST 清单文件。

-0 只存储,不压缩,这样产生的JAR 文件包会比不用该参数产生的体积大,但速度更快。

-M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略-m参数。

[jar-文件]:即需要生成、查看、更新或者解开的JAR文件包,它是-f参数的附属参数。

[manifest-文件]:即MANIFEST清单文件,它是-m参数的附属参数。

[-C 目录]:表示转到指定目录下去执行这个 jar 命令的操作。它相当于先使用 cd 命令转到该目录下,再执行不带-c参数的jar命令,它只能在创建和更新JAR文件包的时候使用。

文件名:指定一个文件/目录列表,这些文件/目录就是要添加到JAR文件包中的文件/目录。假如指定了目录,那么jar命令打包的时候会自动把该目录中的所有文件和子目录打入包中。

使用JDK的jar命令打包,会自动在压缩包中生成一个META-INF目录,其中有一个MANIFEST.MF文件。

使用jar命令进行如下压缩:

jar cf test.jar test

即将当前目录下的test目录所有文件压缩到test.jar文件中,使用WinRaR软件可以看到该压缩文件的目录,结果如图1.6所示。图1.6 jar压缩文档的结构

参考答案:

可以使用“jar cf test.jar test”命令来完成压缩。在压缩包中,包含一个test 文件夹和一个META-INF文件夹,其中有一个MANIFEST.MF文件。面试题12 如何执行mian()方法

利用Java SDK中哪一条命令能够执行test 的main()方法?(a)java test(b)javac test(c)java test.java(d)java test.class(e)java test.main

考点:考察求职者对java命令的熟悉程度。

出现频率:★★★【面试题解析】求职者容易出现的错误是选择了(d)。实际上,java命令后面只需要class文件的名称就可以,不用加入.class全名。如果使用java test.class 命令,系统会认为这是一个包的结构,会查找test.class.class文件。会出现如下异常信息:

Exception in thread “main” java.lang.NoClassDefaultError:test/class

提示找不到相应的类文件。

参考答案:(a)。面试题13 Java开发原则

请选择下面Java语言描述正确的项。(a)Java的开发都是封装到类中的。(b)Java中只有一种值:元数据类型值。(c)引用代表那些根据类创建的对象。(d)对象可以通过多种方式加以操作。

考点:考察求职者对Java开发原则的理解。

出现频率:★★★

面试题解析Java开发一般遵循以下几个原则:

Java 中的代码必须封装到类中。

Java 中有两种值:对象的引用和元数据类型值。

引用代表根据类创建的对象。

对象只能通过引用加以操作。

Java 中的对象不能包含其他对象,对象只能拥有指向其他对象的引用。

参考答案:(a)、(c)。第2章Java语言基础

在用人单位的面试中,Java语言基础知识是考察的重点之一,也是一个合格Java程序员必须掌握的知识。一个对于Java语言基础知识一知半解的程序员,会在实际的项目开发工作中犯一些低级错误,对项目开发的质量和团队的开发进度都有很大的影响。代码的质量,直接影响了软件工程的质量。

Java语言基础主要涉及以下几个方面。

Java 的基本语言元素。

原始数据类型。

变量声明。

变量的初始化。

Java 源文件的结构。

main()方法。面试题1 掌握Java标识符

请标记出下面代码中的错误。

public class JavaSign {

public int 48abc=20;

private int Num=100;

private int m-48abc;

private int m_abc=30;

private int number=60;

private String $hk;

private double ¥money;

public String 我的变量="我是一个兵!";

private String my@email="helloworld";

public static void main(String[] args) {

System.out.println(num);

System.out.println(my@email);

System.out.println(48abc+m_abc);

System.out.println(number);

}

}

考点:这是一个比较有代表性的面试题,考察求职者Java语言基础的基本功,重点考察求职者对Java标识符的掌握。

出现频率:★★★★★【面试题解析】标识符是一个语言的基本元素,在Java开发语言中,标识符可以用来表示类、方法、变量和标签。标识符是由一系列的字符组成,每个字符可以是字母、数字、连接符号(例如_)或者任意的货币符(如$、¥等)。

求职者必须要注意的是,Java标识符的第1个字母不能为数字,Java语言是区分字母大小写的,Num和num是两个毫不相干的标识。

注意:Java使用的是Unicode编码。Unicode中每个字符都对应了一个唯一的数字,而不论是什么平台、使用什么语言、编写什么程序。Unicode标准已经被当今工业界的领导们所采用,例如Apple、HP、IBM、JustSystem、Microsoft、Oracle、SAP、Sun、Sybase、Unisys和其他许多公司。最新的标准例如XML、Java、ECMAScript (JavaScript)、LDAP、CORBA2.0、WML等,以及许多操作系统、所有最新的浏览器和许多其他产品都支持。Unicode标准的出现和支持它的工具存在,是近来全球软件技术最重要的发展趋势。

基本上,计算机只是处理数字,输入或输出的字母或其他字符都被编码为一个数字。在创造Unicode之前,有数百种指定这些数字的编码系统,没有一个编码可以包含足够的字符。例如,欧州共同体就需要好几种不同的编码系统来包括所有的语言。即使是单一种语言,例如英语,也没有哪一个编码可以适用于所有的字母、标点符号和常用的技术符号。不同编码系统也会互相冲突。也就是说,两种编码可能使用相同的数字代表两个不同的字符,或使用不同的数字代表相同的字符。因此任何一台特定的计算机(特别是服务器)都需要支持许多不同的编码,而且不论什么时候数据通过不同的编码或平台之间,数据总会存在损坏的风险。

例如,在简体中文(GB)、繁体中文(BIG5)、日文中,“赵”都是同一个字,但是编码方式不同。BIG5的赵对应0xBBAF,而0xBBAF在GB里面就被显示为“化”,这就是我们常见的乱码的原因之一。Unicode采用统一的编码,“赵”只对应一个数字,不必管它来自哪种语系。

下面举例来说明如何区分正确和错误的标识符。

正确的Java标识符示例:

Abc123、abc、¥m、$kill、my_code、gач

非法的Java标识符:

46m、my@email、 int-1

面试题中,求职者容易忽略一点,中文变量和中文字符是合法的。

参考答案:

public class JavaSign {

// 错误:Java的标识符不能以数字开头

public int 48abc=20;

private int Num=100;

// 错误:Java的标识符不能包含-,只能在表达式中使用

private int m-48abc;

private int m_abc=30;

private String $hk;

private double ¥money;

public String 我的变量="我是一个兵!";

private int number=60;

// 错误:不能在变量中使用@,为不合法标识符

private String my@email="helloworld";

public static void main(String[] args) {

// 错误:没有定义num变量,因为Java是区分大小写的

System.out.println(num);

// my@email定义错误

System.out.println(my@email);

// 48abc定义错误

System.out.println(48abc+m_abc);

// 错误:不能在静态方法中引用一个非静态变量

System.out.println(number);

}

}面试题2 掌握Java关键字

编译、运行如下代码,请选择正确的一项描述。

public class JavaKey {

private int java=100;//(1)

public String True="my Java";//(2)

public static void main(String[] args) {

int ingeter=20;(3)

JavaKey key=new JavaKey(); //(4)

System.out.println(key.java);//(5)

}

}(a)编译成功,打印100。(b)编译不通过,提示(1)处有错误。(c)编译不通过,提示(2)处有错误。(d)编译不通过,提示(3)处有错误。(e)编译不通过,提示(4)、(5)处有错误。

考点:主要考察求职者对于Java关键字的掌握,一般都会在面试题中出现开发中容易出现的混淆关键字。

出现频率:★★★★【面试题解析】Java语言中的关键字是开发语言中预定义的保留标识符,不能在程序代码中表示类、变量、方法等成员。Java的关键字有如下特征。

Java 的关键字都是小写的。

then 和sizeof 都不是Java 的关键字。熟悉C 或者C++,写惯了ASP 的程序员一定要注意。

大写的NULL 不是java 语言的关键字。String 是Java 语言的一个封装类的类名,也不是关键字。

下面给出Java语言的关键字,如表2.1所示。表2.1 Java语言的关键字

Java语言中的保留字:null、true和false。

Java语言中保留但是未使用的关键字:const和goto。

参考答案:(a)。面试题3 找出Java关键字

Which of the following are keyWords or reserved words in Java?(下面哪些是Java 语言的关键字或者是保留字?)(a)if(b)then(c)goto(d)while(e)case(f)sizeof

考点:主要考察求职者对于Java关键字的掌握。

出现频率:★★★★【面试题解析】请参考Java关键字表。

参考答案:(a)(c)(d)(e)。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载