java基础考试题及答案

新员工考试

一、 选择题(共30题,每题2分) 1. 下面哪些是合法的标识符?(多选题) A. $persons B. TwoUsers C. *point D. this

E. _endline 答案 A,B,E

分析 Java的标识符可以以一个Unicode字符,下滑线(_),美元符($)开始,后续字符可以是前面的符号和数字,没有长度限制,大小写敏感,不能是保留字(this保留字)。

2. 哪些是将一个十六进制值赋值给一个long型变量?(单选题) A. long number = 345L; B. long number = 0345; C. long number = 0345L;

D. long number = 0x345L 答案 D

分析 十六进制数以0x开头,long型数以L(大小写均可,一般使用大写,因为小写的l和数字1不易区分)。

3. 下面的哪些程序片断可能导致错误? (多选题) A. String s = \ String t = \ String k = s + t;

B. String s = \ String t;

t = s[3] + \

C. String s = \ String standard = ();

D. String s = \ String t = s - \答案 B,D 分析

A:String类型可以直接使用+进行连接运算。

B:String是一种Object,而不是简单的字符数组,不能使用下标运算符取其值的某个元素,错误。

C:toUpperCase()方法是String对象的一个方法,作用是将字符串的内容全部转换为大写并返回转换后的结果(String类型)。 D:String类型不能进行减(-)运算,错误。

4. point x处的哪些声明是句法上合法的? (多选题)

class Person { private int a;

public int change(int m){ return m; } }

public class Teacher extends Person { public int b;

public static void main(String arg[]){ Person p = new Person(); Teacher t = new Teacher(); int i; i = m;

B. i = b; C. i = ; D. i = (30); E. i = . 答案 D,E 分析

A:m没有被声明过,不能使用。

B:虽然b是类Teacher的public成员变量,但是在静态方法中不能使用类中的非静态成员。

C:a是类Person的private成员,在类外不能直接引用。 D:change(int m)方法是public方法,并且返回一个int型值,可以通过类的实例变量p引用并赋值给一个int型变量。

E:b是类Teacher的public成员变量,且是int型,可以通过类的实例变量t引用并赋值给一个int型变量。 5. 下面的代码片断(多选题):

1) public void create() {

2) Vector myVect;

3) myVect = new Vector(); 4) }

下面的哪些陈述正确?

A. 第二行的声明不会为变量myVect分配内存空间。

B. 第二行的声明分配一个到Vector对象的引用的内存空间。 C. 第二行语句创建一个Vector类对象。 D. 第三行语句创建一个Vector类对象。

E. 第三行语句为一个Vector类对象分配内存空间。 答案 A,D,E 分析

要为一个新对象分配空间必须执行new Xxx()调用,new调用执行以下的操作: 1.为新对象分配空间并将其成员初始化为0或者null。 2.执行类体中的初始化。(例如在类中有一个成员声明int a=10;在第一步后a=0 ,执行到第二步后a=10)

3.执行构造函数。

4.变量被分配为一个到内存堆中的新对象的引用。 6. 下面的哪些答案可以用以表示八进制值8? (单选题)

A. 010 B. 0x10

C. 08

D. 0x8 答案 A

分析 八进制值以0开头,以0x开头的为十六进制值,八进制中不能出现数字8,最大只有7。

1) class Person {

2) public void printValue(int i, int j) {/*…*/ } 3) public void printValue(int i){/*...*/ } 4) }

5) public class Teacher extends Person { 6) public void printValue() {/*...*/ } 7) public void printValue(int i) {/*...*/} 8) public static void main(String args[]){ 9) Person t = new Teacher(); 10) (10); 11) } 12) }

第十行的声明将调用哪些方法? (单选题) A. on line 2 B. on line 3 C. on line 6 D. on line 7 答案 D

分析 变量t是一个Person对象,但是它是用Teacher实例化的,这个问题涉及到java的编译时多态和运行时多态的问题,就编译时多态来说,t实际上是一个Person类,这涉及到类型的自动转换(将一个子类的实例赋值给一个父类的变量是不用进行强制类型转换,反之则需要

进行强制类型转换,而且被赋值的变量实际上应该是一个子类的对象),如果对t调用了子类中新增的方法则造成编译时错误编译将不能通过,而在运行时,运行时系统将根据t实际指向的类型调用对应的方法,对于本例来说,(10)将调用t实际指向的Teacher类的对应方法。在java中,可以用一个子类的实例实例化父类的一个变量,而变量在编译时是一个父类实例,在运行时可能是一个子类实例。 7. 给出下面的代码:(单选题)

x的取值在什么范围内时将打印字符串\。 A. x > 0 B. x > -3 C. x <= -3

D. x <= 0 & x > -3 答案 D

分析 x>0时打印\,x>-3&&x<=0时打印\,x<=-3时打印\。这个题目没有什么难的,只要理解if语句的语法就可以了。 8. 下面的哪些赋值语句是不正确的(单选题)

A. float f = ; B. double d = ; C. double d = ;

D. double d = . 答案 A 题目:。

浮点数的赋值是带有小数点的数字缺省是double型的,如果在浮点数后面加f或者F则是float,后面加d或者D则是double,科学计数法形式的浮点数也是double型的,而double的精度比float高,将一个高精度的double赋值给一个低精度的float时需要进行强制类型转换,反之则不需要。 9. 给出下面的不完整的类代码: (单选题)

class Person {

String name, department; int age;

public Person(String n){ name = n; }

public Person(String n, int a){ name = n; age = a; } public Person(String n, String d, int a) { .\处?

A. Person(n,a);

B. this(Person(n,a)); C. this(n,a);

D. this(name,age). 答案 C

分析:

在同一个类的不同构造方法中调用该类的其它构造方法需要使用this(…)的形式,而且必须是在构造方法的第一行调用,这个和普通的方法重载调用的方式不同,普通的方法可以直接使用方法名加参数来调用,而且调用位置没有限制,因此答案A是不行的,B的语法就是错误的,D的错误在于在父类型的构造函数被调用前不能引用类的成员。构造方法是一个类对象实例化的起点(虽然严格来说首先执行的并不是构造方法的第一个语句,而是内存的分配),因此在构造方法中不能将成员作为参数引用。

public void test() {condition 1 B. condition 2 C. condition 3 D. finally 答案 ad 分析:

如果try块中的语句在执行时发生异常,则执行从该处中断而进入catch块,根据异常的类型进行匹配,最前面的优先进行匹配比较,只要该异常是catch中指定的异常的子类就匹配成功进而执行相应的catch中的内容,而finally块中的内容无论是否发生异常都将被执行。 10. 给出下面的代码:(单选题)

public class Test {

void printValue(int m){ while( --m > 10 ) }

public static void main(String arg[]) { int i=10;

Test t= new Test();

(i); } }

输出将是什么? A. The value is 8 B. The value is 9 C. The value is 10 D. The value is 11 答案:c

此题考察的是do… while循环和 -- 操作符的知识,do…while最少被执行一次,在执行完do中的内容后判断while中的条件是否为true,如果为true的话就再执行do中的内容,然后再进行判断,以此类推直到while的判断为false时退出循环执行循环后面的内容,而—操作符的规则是在变量右边的-- 将先进行运算,然后才是使变量的值减一,而在变量左边的是先将变量的值减一再运算。 11. 给出下面的代码:(单选题)

1) public void modify() { 2) int i, j, k; 3) i = 100;

4) while ( i > 0 ) { 5) j = i * 2; 7) k = k + 1; 8) i--; 9) } 10) }

哪些行在编译时可能产生错误。 A. line 4 B. line 6 C. line 7 D. line 8 答案 c

这个问题在前面有关变量的类型及其作用域的问题中讨论过,局部变量在使用前必须显式初始化,而代码中的变量k在使用前没有。 12. 给出下面的代码片断:(单选题)

1) String str = null;

2) if ((str != null) && () > 10)) { 3) 4) }

5) else if ((str != null) & () < 5)) { 6) 7) }

哪些行将导致错误? A. line 1 B. line 2 C. line 5 D. line 8

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4