Java程序员面试9

上传人:无*** 文档编号:95955977 上传时间:2022-05-25 格式:DOC 页数:26 大小:218.50KB
收藏 版权申诉 举报 下载
Java程序员面试9_第1页
第1页 / 共26页
Java程序员面试9_第2页
第2页 / 共26页
Java程序员面试9_第3页
第3页 / 共26页
资源描述:

《Java程序员面试9》由会员分享,可在线阅读,更多相关《Java程序员面试9(26页珍藏版)》请在装配图网上搜索。

1、(Java) 程序员面试 -9( 总分: 100.00 ,做题时间: 90 分钟 )一、 论述题 ( 总题数: 25,分数: 100.00)1. Java 语言有哪优点(分数: 4.00 ) 正确答案: ()解析:Sun Microsystems 公司对 Java 语言的描述如下:“Java is a simple, object -oriented, distributed, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded,and dynamic lang

2、uage ”。具体而言, Java 语言具有以下几个方面的优点:1)Java 为纯面向对象的语言。 Java 编程思想 提到 Java 语言是一种“ Everything is object ”的语言, 它能够直接反应现实生活中的对象,例如火车、动物等,因此通过它,开发人员编写程序更为容易。2)平台无关性。Java语言可以“一次编译,到处运行。无论是在windows平台还是在Linux、MacOS等其他平台上对 Java 程序进行编译,编译后的程序在其他平台上都可以运行。由于 Java 为解释型语言,编 译器会把 Java 代码变成“中间代码”,然后在 Java 虚拟机 (Javavirtua

3、l Machine, JVM) 上解释执行。由 于中间代码与平台无关,因此, Java 语言可以很好地跨平台执行,具有很好的可移植性。3)Java 提供了很多内置的类库,通过这些类库,简化了开发人员的程序设计工作,同时缩短了项目的开发 时间,例如, Java 语言提供了对多线程的支持, 提供了对网络通信的支持, 最重要的是提供了垃圾回收器, 这使得开发人员从对内存的管理中解脱出来。4)提供了对 Web应用开发的支持,例如, Applet、Servlet和JSP可以用来开发 Web应用程序;Socket、 RMI可以用来开发分布式应用程序的类库。5)具有较好的安全性和健壮性。Java 语言经常被

4、用在网络环境中, 为了增强程序的安全性, Java 语言提供了一个防止恶意代码攻击的安全机制 (数组边界检测和 Bytecode 校验等 )。 Java 的强类型机制、垃圾回收 器、异常处理和安全检查机制使得用 Java 语言编写的程序有很好的健壮性。6)去除了 C+吾言中难以理解、容易混淆的特性,例如头文件、指针、结构、单元、运算符重载、虚拟基 础类、多重继承等,使得程序更加严谨、简洁。常见笔试题:Java 语言是由 语言改进并重新设计而来的。AAda BC+ CPascal D BASIC答案:B。Ada语言是美国军方为了整合不同语言开发的系统而发明的一种语言,其最大的特点是实时性,在Ad

5、a95中已加入面向对象内容。Pascal语言是为提倡结构化编程而发明的语言。BASIC语言为了让大学生容易地控制计算机开发的语言,其特点是简单易懂,且可以用解释和编译两种方法执行。C+吾言是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言,它支持过程化程序设计、数据抽象、面向 对象程序设计、泛型程序设计等多种程序设计风格。 Java 语言是一种面向对象语言,从语法结构上看,与 C+类似。2. Java与C/C+有什么异同(分数: 4.00 ) 正确答案: ()解析:Java与C+都是面向对象语言,都使用了面向对象思想(例如封装、继承、多态等),由于面向对象有许多非常好的特性 (继承、

6、组合等 ),因此二者都有很好的可重用性。需要注意的是,二者并非完全一样,下面主要介绍它们的不同点:1). Java为解释性语言,其运行过程为:程序源代码经过Java编译器编译成字节码,然后由 JVM解释执行。而C/C+为编译型语言,源代码经过编译和链接后生成可执行的二进制代码。因此,Java的执行速度比C/C+慢,但是Java能够跨平台执行,而 C/C+不能。2) Java 为纯面向对象语言, 所有代码 (包括函数、变量等)必须在类中实现, 除基本数据类型 (包括 int 、float 等)外,所有类型都是类。此外,Java语言中不存在全局变量或全局函数,而C+兼具面向过程和面向过程编程的特点

7、,可以定义全局变量和全局函数。3) 与C/C+语言相比,Java语言中没有指针的概念,这有效防止了C/C+语言中操作指针可能引起的系统问题,从而使程序变得更加安全。4) 与C+语言相比,Java语言不支持多重继承,但是Java语言引入了接口的概念,可以同时实现多个接口。由于接口也具有多态特性,因此在Java语言中可以通过实现多个接口来实现与C+语言中多重继承类似的目的。5) 在C+语言中,需要开发人员去管理对内存的分配(包括申请与释放),而Java语言提供了垃圾回收器来实现垃圾的自动回收,不需要程序显式地管理内存的分配。在C+语言中,通常都会把释放资源的代码放到析构函数中, Java 语言中虽

8、然没有析构函数, 但却引入了一个 finalize() 方法, 当垃圾回收器将要释放 无用对象的内存时,会首先调用该对象的 finalize() 方法,因此,开发人员不需要关心也不需要知道对象 所占的内存空间何时会被释放。C+语言支持运算符重载,而 Java语言不支持运算符重载。C+语言支持预处理,而 Java语言没有预处理器,虽然不支持预处理功能(包括头文件、宏定义等),但它提供的import机制与C+中的预处理器功能类 似。C+支持默认函数参数,而 Java不支持默认函数参数。C/C+支持goto语句,而Java不提供goto语句(但Java中goto是保留关键字)。C/C+支持自动强制类

9、型转换,这会导致程序的不安全;而 Java不支 持自动强制类型转换,必须由开发人员进行显式地强制类型转换。C/C+中,结构和联合的所有成员均为公有,这往往会导致安全性问题的发生,而 Java 根本就不包含结构和联合,所有内容都封装在类里面。Java具有平台无关性,即对每种数据类型都分配固定长度,例如,int类型总是占据32位,而C/C+却不然,同一个数据类型在不同的平台上会分配不同的字节数。Java 提供对注释文档的内建支持,所以源码文件也可以包含它们自己的文档。通过一个单独的程序,这些 文档信息可以提取出来,并重新格式化成HTML。Java 包含了一些标准库, 用于完成特定的任务, 同时这些

10、库简单易用, 能够大大缩短开发周期, 例如, Java 提供了用于访问数据库的 JDBC库,用于实现分布式对象的RMI等标准库。C+则依靠一些非标准的、由其他厂商提供的库。常见笔试题: 下列说法中,错误的有 。AJava 面向对象语言容许单独的过程与函数存在BJava 面向对象语言容许单独的方法存在CJava 语言中的方法属于类中的成员(member)DJava 语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同答案:A、B、C。见上面讲解。3. 为什么需要 public static void main (Stringargs)这个方法(分数: 4.00 ) 正确答案: ()解析

11、:public static void main (Stringargs)为Java程序的入口方法,JVM在运行程序时,会首先查找 main() 方法。 其中, public 是权限修饰符, 表明任何类或对象都可以访问这个方法, static 表明 main() 方法是一个静态方法,即方法中的代码是存储在静态存储区的,只要类被加载后,就可以使用该方法而不 需要通过实例化对象来访问,可以直接通过类名.main()直接访问,JVM在启动时就是按照上述方法的签名(必须有public与static 修饰,返回值为void,且方法的参数为字符串数组)来查找方法的入口地址,若能找到,就执行;找不到,则会报

12、错。void表明方法没有返回值,main是JVM识别的特殊方法名,是程序的入口方法。字符串数组参数 args 为开发人员在命令行状态下与程序交互提供了一种手段。因为 main 是程序的入口方法,所以当程序运行时,第一个执行的方法就是main() 方法。通常来讲,要执行一个类的方法, 先必须实例化一个类的对象, 然后通过对象来调用这个方法。 但由于 main 是程序的入口 方法,此时还没有实例化对象,因此在编写 main() 方法时就要求不需要实例化对象就可以调用这个方法, 鉴于此, main() 方法需要被定义成 public 与 static 。下例给出了在调用 main() 方法时传递参数

13、的方法。public class Testpublic static void main(Stringargs)for(int i=0; i args. length ; i+);在控制台下,使用 javac Test java 指令编译上述程序,使用 java Test arg1 arg2 arg3 指令运行程序, 程序运行结果为:arg1arg2arg3引申:1main() 方法是否还有其他可用的定义格式 ?1) 由于 public 与 static 没有先后顺序关系,因此下面的定义也是合理的。static public void main (Stringargs)2) 也可以把 main

14、() 方法定义为 final 。public static final void main (String args)3) 也可以用 synchronized 来修饰 main() 方法。static public synchronized void main (Stringargs)不管哪种定义方式,都必须保证 main() 方法的返回值为 void ,并有 static 与 public 关键字修饰。同时由 于 main() 方法为程序的入口方法,因此不能用 abstract 关键字来修饰。2同一个 java 文件中是否可以有多个 main() 方法?虽然每个类中都可以定义 main()

15、方法,但是只有与文件名相同的用 public 修饰的类中的 main() 方法才能 作为整个程序的入口方法。如下例所示,创建了一个名为 Test.java 的文件。class Tpublic static void main(Stringargs)public class Test/ 程序入口函数public static void main(Stringargs)程序运行结果为:Test main常见笔试题:Java 程序中程序运行入口方法 main 的签名正确的有 。A publ ic static void main (Stringargs)B publ ic static final

16、void main (Stringargs)Cstatic public void main (Stringargs)Dstatic public synchronized void main (Stringargs)Estatic public abstract void main (Stringargs)答案:A、B、C、D。见上面讲解。4. 如何实现在 main()方法执行前输出“ Hello World ”分数: 4.00 ) 正确答案: ()解析: 众所周知, 在 Java 语言中, main() 方法是程序的入口方法, 在程序运行时, 最先加载的就是 main() 方法,但这是否意

17、味着 main() 方法就是程序运行时第一个被执行的模块呢 ?答案是否定的。在 Java 语言中,由于静态块在类被加载时就会被调用,因此可以在 main() 方法执行前, 利用静态块实现输出“ Hello World ”的功能,以如下代码为例。public class Test staticpublic static void main(String args) 程序运行结果为:Hello World1Hello World2由于静态块不管顺序如何,都会在 main() 方法执行之前执行,因此,以下代码会与上面的代码有同样的输 出结果。public class Test public stat

18、ic void main(String args) static ”);5. Java 程序初始化的顺序是怎样的(分数: 4.00 ) 正确答案: ()解析:在 Java 语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有类成 员完成初始化后,才会调用对象所在类的构造函数创建对象。Java程序的初始化一般遵循3个原则(优先级依次递减):静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次。父类优先于子类进 行初始化。按照成员变量的定义顺序进行初始化。即使变量定义散布于方法定义之中,它们依然在任何 方法

19、(包括构造函数 )被调用之前先初始化。Java 程序初始化工作可以在许多不同的代码块中来完成 ( 例如静态代码块、构造函数等 ),它们执行的顺序 如下:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态 代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。下面给出一个不同模块初 始化时执行顺序的一个例子。class Basestaticpublic Base() public class Derived extends Base staticpublic Derived()System out println( ”Derived const

20、ructor ”); public static void main(String args) new Derived() ; 程序运行结果为: Base static block Derived static block Base blockBase constructorDerived blockDerived constructor 常见笔试题: 下面代码的运行结果是什么 ? class B extends Object static public B() static class A extends B static public A()public class Testclass p

21、ublic static void main(Stringargs) new A();A Load B1 Load B2 Create B Load A Create A B Load B1 Load B2 Load A Create B Create A C Load B2 Load B1 Create B Create A Load A D Create B Create A Load B1 Load B2 Load A 答案:B。见上面讲解。6. Java 中的作用域有哪分数: 4.00 )正确答案: () 解析:在计算机程序中,声明在不同地方的变量具有不同的作用域,例如局部变量、全局变

22、量等。在Java语言中,作用域是由花括号的位置决定的,它决定了其定义的变量名的可见性与生命周期。在 Java 语言中,变量的类型主要有 3种:成员变量、静态变量和局部变量。类的成员变量的作用范围与类 的实例化对象的作用范围相同,当类被实例化时,成员变量就会在内存中分配空间并初始化,直到这个被 实例化对象的生命周期结束时, 成员变量的生命周期才结束。 被 static 修饰的成员变量被称为静态变量或 全局变量,与成员变量不同的是,静态变量不依赖于特定的实例,而是被所有实例所共享,也就是说,只 要一个类被加载,JVM就会给类的静态变量分配存储空间。因此,就可以通过类名和变量名来访问静态变 量。局部

23、变量的作用域与可见性为它所在的花括号内。此外,成员变量也有 4 种作用域,它们的区别见下表。作用域的对比作用域与可见性当前类同一 package子类其他 packagepublicVVVVprivateVXXXprotectedVVVXdefaultVVXX1) public 。表明该成员变量或方法对所有类或对象都是可见的,所有类或对象都可以直接访问。2) private 。表明该成员变量或方法是私有的,只有当前类对其具有访问权限,除此之外的其他类或者对象都没有访问权限。3) protected 。表明成员变量或方法对该类自身, 与它在同一个包中的其它类,在其它包中的该类的子类都可见。4)de

24、fault 。表明该成员变量或方法只有自己和与其位于同一包内的类可见。 若父类与子类位于同一个包内, 则子类对父类的 default 成员变量或方法都有访问权限;若父类与子类位于不同的 package( 包)内,则没 有访问权限。需要注意的是,这些修饰符只能修饰成员变量,不能用来修饰局部变量。private 与 protected 不能用来修饰类 ( 只有 public 、abstract 或 final 常见笔试题:能用来修饰类 )。下列说法中,正确的是 A.实例方法可直接调用超类的实例方法 C.实例方法可直接调用其他类的实例方法 答案:D。当超类的实例方法或类方法为 private 时,也

25、不能被直接调用。7.一个 Java 文件中是否可以定义多个类B实例方法可直接调用超类的类方法D 实例方法可直接调用本类的类方法private 时,是不能被子类调用的。同理,当其他类的实例方法为分数: 4.00 ) 正确答案: ()解析:一个 Java 文件中可以定义多个类,但是最多只能有一个类被 public 修饰,并且这个类的类名与文 件名必须相同,若这个文件中没有 public 的类,则文件名随便是一个类的名字即可。需要注意的是,当用 javac 指令编译这个 .java 文件时,它会给每一个类生成一个对应的 .class 文件,如下例定义 Derived.jave 为: class Ba

26、se public void print() public class Derived extends Base public static void main(Stringa) Base c=new Derived();c.print();使用 javac Derived.java 指令编译上述代码,会生成两个字节码文件: Base.class 与 Derived.class ,然 后使用 java Derived 指令执行代码,此时,控制台的输出结果为:Base。8. 什么是构造函数(分数: 4.00 ) 正确答案: () 解析:构造函数是一种特殊的函数,用来在对象实例化时初始化对象的成员

27、变量。在 Java 语言中,构造函 数具有以下特点。1) 构造函数必须与类的名字相同,并且不能有返回值( 返回值也不能为 void) 。2) 每个类可以有多个构造函数。当开发人员没有提供构造函数时,编译器在把源代码编译成字节码的过程 中会提供一个没有参数默认的构造函数, 但该构造函数不会执行任何代码。 如果开发人员提供了构造函数, 那么编译器就不会再创建默认的构造函数了。3) 构造函数可以有 0 个、1个或 1 个以上的参数。4) 构造函数总是伴随着 new操作一起调用,且不能由程序的编写者直接调用,必须要由系统调用。构造函 数在对象实例化时会被自动调用,且只运行一次;而普通的方法是在程序执行

28、到它时被调用,且可以被该 对象调用多次。5) 构造函数的主要作用是完成对象的初始化工作。6) 构造函数不能被继承,因此,它不能被覆盖,但是构造函数能够被重载,可以使用不同的参数个数或参 数类型来定义多个构造函数。7) 子类可以通过 super 关键字来显式地调用父类的构造函数,当父类没有提供无参数的构造函数时,子类的构造函数中必须显式地调用父类的构造函数。如果父类提供了无参数的构造函数,此时子类的构造函数 就可以不显式地调用父类的构造函数,在这种情况下编译器会默认调用父类提供的无参数的构造函数。当 有父类时,在实例化对象时会先执行父类的构造函数,然后执行子类的构造函数。8) 当父类和子类都没有

29、定义构造函数时,编译器会为父类生成一个默认的无参数的构造函数,给子类也生 成一个默认的无参数的构造函数。 此外, 默认构造器的修饰符只跟当前类的修饰符有关 ( 例如,如果一个类 被定义为 public ,那么它的构造函数也是 public) 。引申:普通方法是否可以与构造函数有相同的方法名 ?可以,示例如下。public class Testpublic Test()public void Test()public static void main(Stringargs) Test a=new Test(); / 调用构造函数a.Test(); / 调用 Test 方法程序运行结果为:cons

30、tructcall Test 常见笔试题: 1下列关于构造方法的叙述中,错误的是 。A Java 语言规定构造方法名与类名必须相同B Java 语言规定构造方法没有返回值,但不用void 声明C Java 语言规定构造方法不可以重载D. Java语言规定构造方法只能通过new自动调用答案:C。可以定义多个构造函数,只要不同的构造函数有不同的参数即可。2.下列说法中,正确的是 。A. class 中的 constructor 不可省略B. constructor 必须与 class 同名,但方法不能与 class 同名C. constructor 在一个对象被 new时执行D. 个 class

31、只能定义一个 constructor答案:C。见上面讲解。9. 为什么 Java 中有接口没有任何方法(分数: 4.00 ) 正确答案: ()解析:由于 Java 不支持多重继承,即一个类只能有一个父类,为了克服单继承的缺点,Java 语言引入了接口这一概念。接口是抽象方法定义的集合 (接口中也可以定义一些常量值 ) ,是一种特殊的抽象类。接口 中只包含方法的定义,没有方法的实现。接口中的所有方法都是抽象的。接口中成员的作用域修饰符都是 public ,接口中的常量值默认使用 public static final 修饰。由于一个类可以实现多个接口,因此通常 可以采用实现多个接口的方式来间接达

32、到多重继承的目的。在 Java 语言中,有些接口内部没有声明任何方法,也就是说,实现这些接口的类不需要重写任何方法,这 些没有任何方法声明的接口又被叫做标识接口,标识接口对实现它的类没有任何语义上的要求,它仅仅充 当一个标识的作用,用来表明实现它的类属于一个特定的类型。这个标签类似于汽车的标志图标,每当人 们看到一个汽车的标志图标时,就能知道这款汽车的品牌。Java 类库中已存在的标识接口有 Cloneable 和Serializable 等。在使用时会经常用 instanceof 来判断实例对象的类型是否实现了一个给定的标识接口。 下面通过一个例子来详细说明标识接口的作用。例如要开发一款游戏

33、,游戏里面有一个人物专门负责出去 寻找有用的材料, 假设这个人物只收集矿石和武器, 而不会收集垃圾。 下面通过标识接口来实现这个功能。import Java. util. ArrayList;interface Stuff/ 矿石interface Ore extends Stuff/ 武器interface Weapon extends Stuff/ 垃圾interface Rubbish extends Stuff/ 金矿class Gold implements Orepublic String toString( )return Gold;/ 铜矿class Copper implem

34、ents Orepublic String toString( )return Copper;/ 枪class Gun implements Weaponpublic String toString( )return Gun;/ 榴弹class Grenade implements Weaponpublic String toString( )return Grenade;class Stone implements Rubbish public String toString( )return Stone;public class Test public static ArrayList c

35、ollectStuff(Stuff s)ArrayList al= new ArrayList ();for(int i =0;i s. length;i + ) if( ! (si instanceof Rubbish) )al. add(si);return al;public static void main(String args) Stuff s = new Gold( ), new Copper( ), new Gun( ), new Grenade( ), new Stone( );ArrayList al=collectStuff(s);for(int i=0;i b)retu

36、rn 1 ;else if(a b)return-1 ;else if(a b)return1 ;elsereturn0;public class Testpublic static void insertSort(inta, IntCompare cmp)if(a !=null)for(int i=1; i =1 cmp.cmp(aj-1,temp)=1)aj=aj-1;j-;aj=temp;public static void main(Stringargs)intarray1=7,3,19,40,4,7,1;insertSort(array1,new Cmp1();升序排列 :);for

37、(int i=O;i array1.length;i+)intarray2=7,3,19,4O,4,7,1;insertSort(array2,new Cmp2();降序排列 :);for(int i=O;i array2.length;i+)程序运行结果为:升序排列: 1 3 4 7 7 19 4O降序排列: 4O 19 7 7 4 3 1上例定义了一个用来比较大小的接口 IntCompare ,这个接口实际上充当了 C 语言中函数指针的功能,在使 用时,开发人员可以根据实际需求传入自定义的类。在上例中分另U有两个类cmpl和Cmp2都实现了这个接口,分别用来在实现升序排序和降序排序时使用。其实这也是策略设计模式所用到的思想。4 2 面向对象技术14. 面向对象与面向过程有什么区另(分数: 4.OO ) 正确答案: ()解析:面向对象中的对象不是指女朋友,它是一

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!