javaSE练习题

不羁的心 提交于 2019-12-06 13:03:11

1.在JAVA中,下列哪些说法是正确的( AC )
A.java源文件的扩展名为.java
B.写好的java源程序可以直接运行 //不编译就想运行???
C.编写的源程序必须先编译后才能运行
D.程序员可以读懂扩展名为.class的文件 //字节码文件,不可能读懂的

2.下列标识符哪个是合法的( BD )
A.class
B.美元符号abc
C.1234
D._name
变量名首字母是英文字母、$或下划线开头,可以由字母、数字或美元符号组成。

3.下面哪些赋值语句是正确的?(ABD)
A. long test = 12;
B. float f = -41.2f;
C. int other = (int) true;//布尔型不能强转成整型
D. double d = 12345678;
E. byte b = 128; //byte范围为:-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;//错,小数点默认类型为double类型,转换成float类型需要进行强转

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先加后用。

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.运行时错误

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.输出11次100
B.输出10次100,然后抛出运行期异常
C.编译错误,因为变量i不能在main()方法中被声明2次
D.编译错误,因为变量j不能在main()方法中被声明2次
E.以上都不对

  1. 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

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){…}
重载就记住一句:方法名相同,参数序列不同,跟返回值无关

11.在java中,关于数组描述正确的是( BD )
A.数组中的索引下标从1开始//从0开始
B.存储在数组当中的数据都属于同一数据类型//正确
C.通过数组名.length()能获得数组的长度//错误,length是获取数组的长度
D.数组的最大索引下标是数组的长度减1//正确

12.下面程序的输出结果是什么(D )
int[] arr = new int[10];
System.out.println(arr[0]);
A.编译不通过
B.运行时出错
C.输出null
D.输出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];

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以内的偶数的和。

  1. 和下面代码能完成相同的选项是( 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.抽象类中不能有构造方法//抽象类可以有构造方法,接口不能有构造方法

  1. 下列有关接口的叙述错误的是哪项?( 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.下列选项中关于java中this关键字的说法错误的有( BD )
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 areequal”);
} else {
System.out.println(“Both are notequal”);
}
}
}
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 isless than 100”;
7 if (x > 100) myString = “x isgreater 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’));
System.out.println(s1);
String s3 = “arit”;
String s4 = “arit”;
String s2 = s1.replace(‘m’,’r’);
System.out.println(s2 == s3);
System.out.println(s3 == s4);
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 = newCharacter(“A”);
D.Boolean b = new Boolean(null);

30.在Java中,如果要在字符串类型对象s=”java”中,得到字符’v’出现的位置,可使用下面的那个方法?( C )
A. s.matches(‘v’);
B. s.charAt(‘v’);
C. s.indexOf(‘v’);
D. s.substring(‘v’);

31.下列关于ArrayList、Vector和LinkedList集合的说法正确是有( ACD )
A. ArrayList集合底层是数组实现,该集合线程不安全
B. Vector集合元素的存放是无序的
C. LinkedList集合底层是链表结构,适合做元素的增删操作
D.这三个集合都是List接口的实现类

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

33.下列哪些方法是ArrayList和LinkedList集合中都定义的( ACD )
A. add(Object o)
B. removeFirst()
C. remove(Object o)
D. add(int index,Object o)

34.下列哪些集合属于Collection体系的子类( BD )
A. TreeMap
B. ArrayList
C. Hashtable
D. HashSet

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 = newFileOutputStream(“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 = newReader(“c:\pet.txt”)创建一个输入流对象//FileReader r =newFileReader(“c:\pet.txt”);

39.请看如下代码:
BufferedReader br = new BufferedReader(newFileReader(“c:\a.txt”));
BufferedWriter bw = new BufferedWriter(newFileWriter(“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.使用泛型必须进行强制类型转换

41.关于方法的递归算法,说法正确的是( AB )
A.递归就是方法自己调用自己
B.递归的次数不能过大,否则会导致栈内存溢出
C.使用递归算法,方法必须有返回值
D.构造方法不可以使用递归算法

42、. 在当前的java 实现中,每个文件编译之后就是一个以(B)为后缀的文件
A.java
B.class
C. doc
D. exe
43.下列属于三目( B) 运算符的是:
A. +
B. ?:
C.&&
D. |
44.在 java 语句中,运算符&&实现(B)
A. 逻辑或
B. 逻辑与
C. 逻辑非
D. 逻辑相等
45.byte变量的取值范围是 (B)
A. 0 - 65535
B. -128 – 127
C. -256 – 255
D. 0 - 32767
二、简答题
1.抽象类和接口的区别?
(1)抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
(2)抽象类要被子类继承,接口要被类实现。
(3)接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现
(4)接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
(5)抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
(6)抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果
(7)抽象类里可以没有抽象方法
(8)如果一个类里有抽象方法,那么这个类只能是抽象类
(9)抽象方法要被实现,所以不能是静态的,也不能是私有的。
(10)接口可继承接口,并可多继承接口,但类只能单根继承。
2.ArrayList 、Vector 、LinkedList 的区别,HashMap 和 Hashtable 的区别?
LinkList即存储在这两个集合中的元素的位置是不连续的,底层数据结构是列表结构
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,查询速度快,
但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢
LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入,修改,删除 速度较快.
Vector是同步处理,性能较低;ArrayList是使用异步处理,性能高。
Vector是线程安全的,ArrayList是非线程安全。LinkedList是非线程安全
一般情况都用ArrayList,ArrayList占据内存小.
HashMap 和 Hashtable 的区别:
两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全;HashMap可以使用null作为key,而Hashtable则不允许null作为key;HashMap是对Map接口的实现,HashTable实现了Map接口和Dictionary抽象类;

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!