这些题目是近期我参加过的笔试题和一些我在网上选的部分题,在这里作笔记,认真去学习,更好的应对后面的招聘。有错误欢迎指出。java
1、Java基础部分程序员
一、指针在任何状况下均可进行>,<,>=,<=,==运算。数组
答案:正确。
解析:指针用来表示内存地址;若是仅仅是指针之间的比较,其实也就是整型变量比较,这样的话任何状况都进行比较运算。可是指针的比较通常没有实际意义。ide
二、关于 JAVA 堆,下面说法错误的是( )函数
A.全部类的实例和数组都是在堆上分配内存的 B.对象所占的堆内存是由自动内存管理系统回收post
C.堆内存由存活和死亡的对象,空闲碎片区组成 D.数组是分配在栈中的学习
答案:Dspa
解析:首先数组是分配在堆中的,故D的说法不正确。.net
Java堆的结构:JVM的堆是运行时数据区,全部类的实例和数组都是在堆上分配内存。它在JVM启动的时候被建立。对象所占的堆内存是由自动内存管理系统也就是垃圾收集器回收。堆内存是由存活和死亡的对象组成的。存活的对象是应用能够访问的,不会被垃圾回收。死亡的对象是应用不可访问尚且尚未被垃圾收集器回收掉的对象。一直到垃圾收集器把这些对象回收掉以前,他们会一直占据堆内存空间。指针
三、下面关于java.lang.Exception类的说法正确的是()
A 继承自Throwable B 继承自Serialable
答案:A
解析:Java异常的基类为java.lang.Throwable,java.lang.Error和java.lang.Exception继承 Throwable,RuntimeException和其它的Exception等继承Exception,具体的RuntimeException继承RuntimeException。
扩展:错误和异常的区别(Error vs Exception)
1) java.lang.Error: Throwable的子类,用于标记严重错误。合理的应用程序不该该去try/catch这种错误。绝大多数的错误都是非正常的,就根本不应出现的。
java.lang.Exception: Throwable的子类,用于指示一种合理的程序想去catch的条件。即它仅仅是一种程序运行条件,而非严重错误,而且鼓励用户程序去catch它。
2) Error和RuntimeException 及其子类都是未检查的异常(unchecked exceptions),而全部其余的Exception类都是检查了的异常(checked exceptions).
checked exceptions: 一般是从一个能够恢复的程序中抛出来的,而且最好可以从这种异常中使用程序恢复。好比FileNotFoundException, ParseException等。检查了的异常发生在编译阶段,必需要使用try…catch(或者throws)不然编译不经过。
unchecked exceptions: 一般是若是一切正常的话本不应发生的异常,可是的确发生了。发生在运行期,具备不肯定性,主要是因为程序的逻辑问题所引发的。 好比ArrayIndexOutOfBoundException, ClassCastException等。从语言自己的角度讲,程序不应去catch这类异常,虽然可以从诸如RuntimeException这样的异常中catch并恢复,可是并不鼓励终端程序员这么作,由于彻底不必。由于这类错误自己就是bug,应该被修复,出现此类错误时程序就应该当即中止执 行。 所以,面对Errors和unchecked exceptions应该让程序自动终止执行,程序员不应作诸如try/catch这样的事情,而是应该查明缘由,修改代码逻辑。
RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。
处理RuntimeException的原则是: 若是出现 RuntimeException,那么必定是程序员的错误。例如,能够经过检查数组下标和数组边界来避免数组越界访问异常。其余 (IOException等等)checked异常通常是外部错误,例如试图从文件尾后读取数据等,这并非程序自己的错误,而是在应用环境中出现的外部 错误。
四、分析下面程序,求输出结果,并简单列出执行过程。
public class Test{ static boolean foo(char c) { System.out.print(c); return true; } public static void main(String[] argv) { int i=0; for (foo('A'); foo('B') && i < 2; foo('C')) { i++; foo('D'); } } }
答案:ABDCBDCB
解析:①第一轮循环:foo('A')是初始条件,只执行一次,故先输出A,接着判断foo('B')&&i<2,由于此时i=0,故知足条件,再输出B,接着进入循环内,首先执行i++, 此时i=1, 再执行foo('D'),输出D,再执行foo('C'),输出C。 在这一轮中,依次输出ABDC;
②第二轮循环:初始条件foo('A')不执行,故开始执行判断条件foo('B') && i < 2,知足1<2,故先输出B,同上,接着执行i++,i=2,输出D,输出C。在这一轮中,依次输出BDC;
③第三轮循环:仍是直接从判断条件语句开始,先执行了判断语句foo('B'),故输出B,但此时不知足i<2,后面的语句再也不执行,这一轮中输出B。程序也到此结束。
五、下列说法正确的是:
A.一个文件里能够同时存在两个public修饰的类
B.构造函数能够被重写(override)
C.子类不能访问父类非public和protected修饰的属性
D.final修饰的类能够被继承
答案:C
解析:一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必须与之一致,不然没法编译,若是源文件中没有一个public类,则文件名与类中没有一致性要求。至于main()不是必需要放在public类中才能运行程序。《详解连接》
重写是子类继承父类对父类的方法进行修改。方法名,参数,返回值必须同样。 不能重写被标示为final的方法。若是不能继承一个方法,则不能重写这个方法。
扩展:重写override,重载overload的区别:
java的方法重载:就是在类中能够建立多个方法,它们具备相同的名字,但具备不一样的参数和不一样的定义。调用方法时经过传递给它们的不一样参数个数和参数类型来决定具体使用哪一个方法,并且返回值类型能够相同也能够不相同,这也是面向对象的多态性。
java的方法重写:
1)父类与子类之间的多态性,对父类的函数进行从新定义。若是在子类中定义某方法与其父类有相同的名称和参数,咱们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不须要从新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想做必定的修改,这就须要采用方法的重写。方法重写又称方法覆盖。
2)若子类中的方法与父类中的某一方法具备相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可以使用super关键字,该关键字引用了当前类的父类。
3)子类函数的访问修饰权限不能少于父类的;
4)重写方法只能存在于具备继承关系中,重写方法只能重写父类非私有的方法。
六、Java接口的修饰符能够为()
A private B protected C final D abstract
答案:CD
解析:接口很重要,为了说明状况,这里稍微啰嗦点:
(1)接口用于描述系统对外提供的全部服务,所以接口中的成员常量和方法都必须是公开(public)类型的,确保外部使用者能访问它们;
(2)接口仅仅描述系统能作什么,但不指明如何去作,因此接口中的方法都是抽象(abstract)方法;
(3)接口不涉及和任何具体实例相关的细节,所以接口没有构造方法,不能被实例化,没有实例变量,只有静态(static)变量;
(4)接口的中的变量是全部实现类共有的,既然共有,确定是不变的东西,由于变化的东西也不可以算共有。因此变量是不可变(final)类型,也就是常量了。
(5) 接口中不能够定义变量?若是接口能够定义变量,可是接口中的方法又都是抽象的,在接口中没法经过行为来修改属性。有的人会说了,没有关系,能够经过 实现接口的对象的行为来修改接口中的属性。这固然没有问题,可是考虑这样的状况。若是接口 A 中有一个public 访问权限的静态变量 a。按照 Java 的语义,咱们能够不经过实现接口的对象来访问变量 a,经过 A.a = xxx; 就能够改变接口中的变量 a 的值了。正如抽象类中是能够这样作的,那么实现接口 A 的全部对象也都会自动拥有这一改变后的 a 的值了,也就是说一个地方改变了 a,全部这些对象中 a 的值也都跟着变了。这和抽象类有什么区别呢,怎么体现接口更高的抽象级别呢,怎么体现接口提供的统一的协议呢,那还要接口这种抽象来作什么呢?因此接口中 不能出现变量,若是有变量,就和接口提供的统一的抽象这种思想是抵触的。因此接口中的属性必然是常量,只能读不能改,这样才能为实现接口的对象提供一个统 一的属性。
通俗的讲,你认为是要变化的东西,就放在你本身的实现中,不能放在接口中去,接口只是对一类事物的属性和行为更高层次的抽象。对修改关闭,对扩展(不一样的实现 implements)开放,接口是对开闭原则的一种体现。
因此:
接口的方法默认是public abstract;
接口中不能够定义变量即只能定义常量(加上final修饰就会变成常量)。因此接口的属性默认是public static final 常量,且必须赋初值。
注意:final和abstract不能同时出现。
七、如下for循环的执行次数是:____
for(int x=0,y=0;(y!=0)&&(x<4);x++)
A.无限次 B.执行4次 C.执行3次 D.一次也不执行
参考答案:D
解析:y初始值为0,在整个for循环中,y的值不变,故判断语句中的(y!=0)不成立,故一次也不执行。
八、有哪些经常使用的MAP类型。
解析:有如下三种类型:
九、Java匿名类。