javaSE基础测试题

这套题目是传智播客javaEE入学测试题,我是在自己学完javaSE之后做的套题,感觉这套题考察的内容很基础,很适合自学javaSE的自测。全套试题有50个选择题,单选和多选都有,每道题2分,80分合格,快来看看你能考多少分吧!


1. JAVA中,下列哪些说法是正确的( AC )  

A.java源文件的扩展名为.java    //正确

B.写好的java源程序可以直接运行  //源程序需要先编译才能运行

C.编写的源程序必须先编译后才能运行  //正确

D.程序员可以读懂扩展名为.class的文件  //class文件为字节码文件,看不懂


2.下列标识符哪个是合法的( BD )

A.class

B.$abc

C.1234

D._name

变量名必须是一个以字母开头的由字母和数字构成的序列。需要注意的是,与大多数程序设计语言相比,java中的字母和数字的范围要大。字母包括‘A’~‘Z’、‘a’~'z'、‘_’、‘$’或在其他某种语言中代表字母的任何Unicode字符。


3.下面哪些赋值语句是正确的?(ABD)

A. long test = 012; //正确

B. float f = -412; //正确

C. int other = (int) true;//布尔型不能强转成整型

D. double d = 0x12345678;//正确,在double的范围内

E. byte b = 128;   //错误,-128~127


4.Java中,下列语句不能通过编译的有( BD)

A. String s= “join”+ 3; //正确,整型可以通过这种方式转换成字符串类型

B. int a= “join”+3;//错误,字符串类型不能这样转换成整型

C. int a= ‘a’+5;//正确,字符型可以转换成整型

D. float f=5+5.5;//错误,5.5的默认类型为double类型,转换成float类型需要进行强转


5.a = 3,则表达式(--a )< < a的结果为( B )

A. 16

B. 8

C. 24

D. 12

这个题目主要考察的是运算符的优先级和对为运算符的运用。具体的运算过程如下:

先计算小括号里面的--a,变成了2<<2,即将0010向左移动2位,变成了1000,即等于8


6.下列代码运行的结果是(  C ) 

public static void main(String[] args) {

int x = 4;

int y = 5;

if(x++>4 & ++y>5) {

x++;

}

System.out.println("x=" + x + ",y=" + y);

}

A. x=4,y=5

B. x=4,y=6

C. x=5,y=6

D. x=6,y=6

此题主要考察的自增运算符的运用。x++,即先用x的值之后再将x+1,++x即先将x+1,然后再进行运算。

这个题目还有一点,就是&运算符,&与&&都是位运算符,但两者之间又有区别,读者可以自己去思考一下这个问题


7.尝试运行下面的代码会发生什么?( B )  

public class Test {

public static void main(String[] args) {

boolean m = true;

if (m = false) {

System.out.println("true");

} else {

System.out.println("false");

}

}

}

A.输出字符串”true”

B.输出字符串”false”

C.编译时错误

D.运行时错误

此题主要问题在if(m = false),很多人可能选C,觉得 “=” 是赋值符,如果将“=”改成“==”这个题目就选B 了,不然编译不能通过。其实我们忽略了m本身声明时就说boolean型,所以这里可以用“=”对m进行赋值。


8.编译并运行以下代码将发生什么? ( E ) 

public static void main(String args[]){

char digit = 'a';

for (int i = 0; i < 10; i++){

switch (digit)

{

case 'x' :

{

int j = 0;

System.out.println(j);

}

default :

{

int j = 100;

System.out.println(j);

}

}

}

int i = j;

System.out.println(i);

}

A.输出11100

B.输出10100,然后抛出运行期异常

C.编译错误,因为变量i不能在main()方法中被声明2

D.编译错误,因为变量j不能在main()方法中被声明2

E.以上都不对

此题是编译无法通过,因为变量j在main()中没有声明,而switch里面的j只能在各自的case里面有效


9. class Demo   

{

public static int fun(int c)

{

return c+=2;

}

public static void main(String[] args)

{

int temp = fun(2);

System.out.println(temp);

}

}

打印结果是(B)

A. 2

B. 4

C. 6

D. 8

此题考查的java的参数传递,值传递。


10.下面哪些函数是public void aMethod(){...}的重载函数?( BD ) 

A. void aMethod( ){...}

B. public int aMethod(int a, float b){...}

C. public void aMethod (){...}

D. public float aMethod (int m){…}

函数重载的条件:

1.函数名必须相同

2.函数的参数列表不同(这个不同主要体现在参数的个数,类型,顺序,至少满足一个)

与函数的访问权限,返回类型无关


11.java中,关于数组描述正确的是( BD ) 

A.数组中的索引下标从1开始//从0开始

B.存储在数组当中的数据都属于同一数据类型//正确

C.通过数组名.length()能获得数组的长度//错误,length是数组的属性,是String的方法

D.数组的最大索引下标是数组的长度减1//正确


12.下面程序的输出结果是什么(D ) 

int[] arr = new int[10];

System.out.println(arr[0]);

A.编译不通过

B.运行时出错

C.输出null

D.输出0

数组通过new关键字开辟内存空间后没有赋初值,会自动被赋成0.


13.下面哪个语句正确地声明一个整型的二维数组( CD ) 

A. int a[][] = new int[][];

B. int b[10][10] = new int[][];

C. int c[][] = new int[10][10];

D. int []d[] = new int[10][10];

这三中声明方式都是正确的:

int d[][] = new int[10][10];

int []d[] = new int[10][10];

int [][]d = new int[10][10];


14.以下代码输出是( D ) 

class Demo {

public static void main(String[] args) {

int i = 0;

int sum = 0;

while (i <= 10) {//10以内

i++;

if (i % 2 != 0)//偶数

continue;

sum += i;//求和

}

System.out.println(sum);

}

}

A. 55

B. 45

C. 35

D. 30

此题主要是读懂题目的目的。计算10以内的偶数的和。


15. 和下面代码能完成相同的选项是( B ) 

class Demo {

public static void main(String[] args) {

int i = 1;

int sum = 0;

while (i <= 100) {//100以内

if (i % 2 == 0) {//偶数

sum = sum + i;//求和

}

i++;

}

System.out.println(sum);

}

}

A. for (int x =1; x<=100;x++){ sum=sum+x;}//求1到100的和

B. for (int x =0; x<=100;x+=2){ sum=sum+x;}//求1到100之间偶数的和

C. for (int x =1; x<=100;x+=2){ sum=sum+x;}//求1到100之间奇数的和

D.上述全对


16.下列有关类、对象和实例的叙述,正确的是哪一项?( D ) 

A.类就是对象,对象就是类,实例是对象的另一个名称,三者没有差别

B.对象是类的抽象,类是对象的具体化,实例是对象的另一个名称

C.类是对象的抽象,对象是类的具体化,实例是类的另一个名称

D.类是对象的抽象,对象是类的具体化,实例是对象的另一个名称//正确


17.下面关于java中包的说法正确的是(ACD ) 

A.java中可以使用import语句导入包

B.java中可以使用package语句导入包

C.位于同一个包中的类,不需要导包就可以直接访问

D.不同的包中可以出现类名相同的类

没什么可讲的吧这题


18.下列有关抽象类的叙述正确的是哪项? (C) 

A.抽象类中一定含有抽象方法//不一定,普通类也可以使用abstract变成抽象类

B.抽象类既能被实例化也能被继承//抽象类不能实例化,可以被继承

C.抽象类的声明必须包含abstract关键字//正确

D.抽象类中不能有构造方法//抽象类可以有构造方法,接口不能有构造方法


19. 下列有关接口的叙述错误的是哪项?( D ) 

A.接口中只能包含抽象方法和常量

B.一个类可以实现多个接口

C.类实现接口时必须实现其中的方法

D.接口不能被继承//接口能被继承,也能被实现


20.运行以下代码片段,输出结果是?( D ) 

class X {

Y b = new Y();

X() {

System.out.print("X");

}

}

class Y {

Y() {

System.out.print("Y");

}

}

public class Z extends X {

Y y = new Y();

Z() {

System.out.print("Z");

}

public static void main(String[] args) {

new Z();

}

}

A. Z

B. YZ

C. XYZ

D. YXYZ


main函数中,new Z(),访问类 Z,由于 Z 继承了 X,又转向去访问类X,类X里面又创建了类Y的对象,又转向了Y,所以第一步是打印Y ,再回到类X中构造函数,打印X,再返回到类Z中,由于类Z中也有类Y 的对象,又要返回类Y调用一次类Y 的构造函数,打印Y,最后回到类Z中,打印Z。

21. 下列关于类的继承的描述,正确的有( BD )

A. 一个类可以同时继承多个父类//java不支持多继承

B. 一个类可以具有多个子类//一个类可以被多个类继承

C. 子类会自动拥有父类所有的方法//构造方法就不能被继承

D. 一个类继承另一个类需要使用extends关键字//必须的


22.下列选项中关于javathis关键字的说法错误的有( ABD ) 

A. this关键字是一个对象的引用//错误,应该是本类对象对自身的引用

B. this关键字可以用于引用当前类以外其他类型的对象//错误,应该是本类

C. this可用于构造函数中,调用类本身重载的构造函数,但是必须写在首行//正确

D. this可用于静态方法中//错误。静态方法与对象无关,this与对象有关


23.下列关于构造函数的说法正确的是( ABD )

A.方法名必须与类名相同

B.使用new关键字创建对象时,java虚拟机会自动调用构造函数

C.我们在定义一个类时,必须要声明至少一个构造函数 //当没有声明构造函数是,会有一个默认的无参构造函数

D.构造函数中不能使用return语句


24.编译并运行以下代码将发生什么?( D ) 

class MyClass {

int x;

MyClass(int i) {

x = i;

}

public static void main(String args[]) {

MyClass m1 = new MyClass(100);

MyClass m2 = new MyClass(100);

if (m1.equals(m2)) {

System.out.println("Both are equal");

} else {

System.out.println("Both are not equal");

}

}

}

A.代码编译时报出错误提示信息“equals()方法未定义

B.编译通过,抛出运行期异常.

C.输出Both are equal.

D.输出Both are not equal


本题考察了equals方法。MyClass类没有复写Object类中的equals方法,即此equals方法是比较两个对象的值是否相等。由于m1和m2是两个对象,对应的值则是他们的内存地址,所以equals方法返回false。


25.运行以下的main()方法,结果是?( AC ) 

1 public static void main(String[] args)

2 {

3 String myString;

4 int x = 100;

5

6 if (x < 100) myString = "x is less than 100";

7 if (x > 100) myString = "x is greater than 100";

8 System.out.println(myString.length());

9 }

A.编译时报出错误提示信息变量myString没有被初始化

B.编译通过

C.编译未能通过。但如果变量myString在第8行前的代码中被初始化,代码可以编译通过,运行时可以输出字符串myString的长度

D.以上都不对

局部变量没有被初始化,编译不能通过;初始化后能正常执行。


26.有如下代码,请问哪些是正确的?( ACD )

class ClassA{}

class ClassB extends ClassA{}

class ClassC extends ClassA{}

以及

ClassA p0 = new ClassA();

ClassB p1 = new ClassB();

ClassC p2 = new ClassC();

ClassA p3 = new ClassB();

ClassA p4 = new ClassC();

A.p0 = p1;//正确,类型自动向上提升

B.p1 = p2;//错误,类型转换异常

C.p1 = (ClassB)p3;//正确,类型强制向下转型

D.p2 = (ClassC)p4;//正确,类型强制向下转型


27.关于继承,以下说法正确的是: ( AD )

A.Java中只支持单继承,一个类只能继承一个类,但是可以有多个子类

B.一个类如果没有自己写无参构造方法,那么子类将无法继承//错误,如果自己没有写构造方法,会有默认的隐式的无参构造方法

C.子类可以当父类用,父类不可以当子类用//父类强转之后也可当之类使用

D.子类重写父类方法时访问权限不能更低


28.编译并运行以下代码的输出结果是?( A )

String s1 = new String("amit");

System.out.println(s1.replace('m','r'));//输出arit

System.out.println(s1);//输出amit

String s3 = "arit";//s3和s4都指向字符串常量池里面的同一个"arit"

String s4 = "arit";

String s2 = s1.replace('m','r');//s2指向堆内存中的"arit"

System.out.println(s2 == s3);//输出false

System.out.println(s3 == s4);//输出true

A. arit

amit

false

true

B. arit

arit

false

true

C. amit

amit

false

true

D. arit

amit

true

true


29.下列哪些代码可以顺利通过编译和运行? ( ABD )

A.Integer i = new Integer('A');//可以

B.Integer i = new Integer("7");//可以

C.Character c = new Character("A");//编译不通过,没有这个类型的构造器

D.Boolean b = new Boolean(null);//可以

E.Integer i = new Integer("0x10");//编译能通过,运行时报java.lang.NumberFormatException异常


30.Java中,如果要在字符串类型对象s="java"中,得到字符'v'出现的位置,可使用下面的那个方法?( C )

A. s.matches('v');// 告知此字符串是否匹配给定的正则表达式。

B. s.charAt('v');//返回指定索引处的char 值。

C. s.indexOf('v');// 返回指定字符在此字符串中第一次出现处的索引。

D. s.substring('v');// 返回一个新的字符串,它是此字符串的一个子字符串。


31.下列关于ArrayListVectorLinkedList集合的说法正确是有( ACD )

A. ArrayList集合底层是数组实现,该集合线程不安全

B. Vector集合元素的存放是无序的

C. LinkedList集合底层是链表结构,适合做元素的增删操作

D.这三个集合都是List接口的实现类

ArrayList、Vector、LinkedList三个集合都是List接口的实现类,都是可变长度的集合,元素有序。其中ArrayList和Vector底层数据结构为数组,适合做查询查找;LinkedList底层数据结构为双向链表,适合做元素的增删。ArrayList线程不安全,Vector线程安全。


32.下面程序的输出结果是什么( D )

Set set= new HashSet();

set.add("aaa");

set.add("bbb");

set.add("aaa");

System.out.println(set.size());

A.编译不通过

B.运行时出错

C.输出3

D.输出2

Set集合时无序不重复的集合。


33.下列哪些方法是ArrayListLinkedList集合中都定义的( ACD )

A. add(Object o)

B. removeFirst()

C. remove(Object o)

D. add(int index,Object o)

此题可以自己查JDK API。LinkedList可以利用removeFirst、removeLast等方法实现队列、栈等数据结构。


34.下列哪些集合属于Collection体系的子类( BD )

A. TreeMap

B. ArrayList

C. Hashtable

D. HashSet

Collection下面有List 和Set,List主要又包括ArrayList、LinkedList、Vector等;Set主要包括HashSet、TreeSet等;Hashtable和Map是一个体系。Hashtable的父类是Dictionary,更老;TreeMap的父类是Map。


35.下面有关Java异常处理的说法错误的是( A ) 

A.一个try块只能有一条catch语句//可以有多条Catch语句

B.一个try块中可以不使用catch语句

C. catch块不能单独使用,必须始终与try块在一起

D. finally块不能单独使用,必须始终与try块在一起


36.下列关键字能和try语句一起使用的是( CD )

A. final

B. finalize

C. finally

D. catch

final,关键字,被修饰成员变量不可变;finalize,垃圾收集器执行时会调用被回收对象的finalize方法;finally,异常处理部分必须被执行的部分;catch,异常处理时必须和try一起使用。


37.下面程序的运行结果是( D )

FileOutputStream fos = new FileOutputStream(“c:\\demo.txt”);

fos.write(“abc”);

fos.close();

A.C盘创建文件demo.txt,但文件是空的

B.C盘创建文件demo.txt,并写入数据abc

C.C盘已有的文件demo.txt中追加写入abc

D.编译失败

编译失败。FileOutputStream为字节输出流,它的write方法不能直接传入字符串,应该利用getBytes()方法把字符串转换成字节数组。


38.下列关于Java中文件输入输出的说法正确的是( AC )

A.Java中,文件的输入输出功能是通过流来实现的

B.如果要把数据写入到一个文件中,需要创建一个输入流对象  //输出流对象

C.字符流在某些方面比如汉字的处理,比字节流更方便

D.可以通过Reader r = new Reader("c:\\pet.txt")创建一个输入流对象//FileReader r =new FileReader("c:\\pet.txt");


39.请看如下代码:

BufferedReader br = new BufferedReader(new FileReader("c:\\a.txt"));

BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\b.txt"));

String line = null;

while ((line = br.readLine()) != null) {//读取a.txt文件的内容

bw.write(line);//将读取到的内容写入到b.txt

bw.newLine();

bw.flush();

}

bw.close();

br.close();

它表达的意思是?( A )

A.c盘目录下的a.txt文件内容复制到d盘目录下的b.txt

B.d盘目录下的b.txt文件内容复制到c盘目录下的a.txt

C.读取c盘目录下a.txt文件,输出在控制台

D.把控制台的内容写入到d盘目录下的b.txt文件中


40.关于泛型的说法正确的是( ABC )

A.泛型是JDK1.5出现的新特性

B.泛型是一种安全机制

C.使用泛型避免了强制类型转换

D.使用泛型必须进行强制类型转换

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。引入泛型的好处是安全简单。在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。


41.关于方法的递归算法,说法正确的是( AB ) 

A.递归就是方法自己调用自己

B.递归的次数不能过大,否则会导致栈内存溢出

C.使用递归算法,方法必须有返回值

D.构造方法不可以使用递归算法

递归,就是在运行的过程中调用自己。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。递归次数过多容易造成栈溢出。


42.下列哪个关键字可以用于实现同步?( C )

A. native//本地方法

B. static//静态

C. synchronized//同步

D. abstract//抽象


43.下列哪些方法可以让线程中断? ( AD ) 

A. sleep

B. start

C. notify

D. wait

sleep为Thread类的静态方法,它的作用是使当前的线程出入睡眠状态,交出CPU的执行权,不释放同步锁。当睡眠时间完成,又重新获取CPU的执行权。wait为Object类的方法,对象调用此方法会导致本线程放弃对象锁,进入等待此对象的等待锁池,只有针对此对象发出notify方法后本线程才能进入对象锁池准备获取对象锁进入运行状态。


44.启动线程调用哪个方法? ( B )

A. run()

B. start()

C. play()

D. go()

直接调用run()方法不能开启线程,仅仅是主线程调用了run()方法,还是单线程。


45.awt 中,下列哪个组件可以实现带标题的窗口( C )

A. Menu

B. Button

C. Frame

D. TextField


46.编写Button组件的事件处理类时,需要实现哪个接口? ( B )

A. ItemListener

B. ActionListener

C. ButtonListener

D. WindowListener


47.下面哪项不是TCP的特点? ( BD)

A.面向连接

B.数据不可靠

C.传输速度慢

D.对数据大小无限制

TCP是面向连接的可靠传输,由于需要校验数据,速度要比UDP慢,数据传输有MTU(最大传输单位)


48. TCP协议的服务器的Socket对象是下面哪一个类? ( C ) 

A. Socket

B.InputStream

C.ServerSocket

D.OutputStream


49.正则表达式中可以表示所有的单词字符信息的是下面哪个规则:( C )

A. \W

B. \w

C. [a-zA-Z]

D.[a-zA-Z_0-9]


50. 获取Class类型的对象的三种方式是( ABD )

A. Object类的getClass()

B. class静态属性

C.自己创建Class对象

D. Class类的forName()静态方法





你可能感兴趣的:(新手学习java)