一.【单选题】
1. 下列说法正确的是 _____。
A. Java程序经编译后会产生machine code
B. Java程序经编译后会产生byte code
C. Java程序经编译后会产生DLL
答案【B】
解答:字节码文件
2.下列代码中,哪句代码会报错()
- byte b = 127;
- byte b = 10; b += 1;
- byte b = 11; b = b + 1;
- char c = 97;
答案【C】
解答: b是byte类型,但是后面跟int类型的1相加会得到int类型,但是int类型又赋值到byte类型的b所以存在类型不匹配的错误,编译报错
3. 设 int x = 1 , int y = 2 , int z = 3,则表达式 y+=z-- / ++x 的值是 _____。
A. 3
B. 3.5
C. 4
D. 5
答案【A】
解答:z是3除以x,x是2,得1.5,取整是1
Y是2,y加上1是 3
4. 0.6332的数据类型是 _____。
A. float
B. double
C. Float
D. Double
答案【B】
解答:双精度类型,数据类型都是小写开头的,是个单词,别再记混了
5. 下列说法正确的有 _____。
A. class中的constructor不可省略
B. constructor必须与class同名,但方法不能与class同名
C. constructor在一个对象被创建时执行
D. 一个class只能定义一个constructor
答案【C】
解答:ABD都不对,
A:构造方法可以省略,写了有参数构造方法,那么就不会自动提供空参构造方法,这一点要注意
B:构造方法可以跟类名重名,这个是自己知道就行,但是没有人这样用
D:一个类可以定义多个构造方法
6. 以下关于继承的叙述正确的是 _____。
A. 在Java中类只允许单一继承
B. 在Java中一个类只能实现一个接口
C. 在Java中一个类不能同时继承一个类和实现一个接口
D. 在Java中接口只允许单一继承
答案【A】
解答:
B:一个类可以实现多个抽象接口
C:当然可以继承和实现同时进行
D:接口可以多继承,类不能多继承
7. 构造方法名必须与_____相同,它没有返回值,用户不能直接调用它,可以通过new使用。
A. 类名
B. 对象名
C. 包名
D. 变量名
答案【A】
解答:构造方法必须跟类名相同,常识
8. 下列说法中,_____是正确的。
A. 子类拥有的成员数目大于父类拥有的成员数目
B. 父类代表的对象范围比子类广
C. 子类要调用父类的方法,必须使用super关键字
D. 一个Java类可以有多个父类
答案【B】
解答:
A:子类拥有的成员数目不一定多
C:子类调用父类方法不一定要super,同名方法可以直接调用
D:单继承,类是单继承,只能有一个父类
9. 下列哪种异常是检查型异常,需要在编写方法时声明 _____。
A. NullPointerException
B. ClassCastException
C. FileNotFoundException
D. IndexOutOfBoundsException
答案【C】
解答:
A:空指针异常,是运行是异常,程序运行以后才会遇到
B:类型不匹配异常,是运行时异常
D:数组下标越界异常,是运行时异常
不写的话编译器会报错,要在方法体中用try catch块抛出或者方法头throws抛出
10. 下面哪个流类属于面向字符的输入流 _____。
A. BufferedWriter
B. FileInputStream
C. ObjectInputStream
D. InputStreamReader
答案【D】
解答:面向字符,意味着Reader或者Writer,但是又得是输入,就是Reader
A:是输出流,自己一下没反应过来,选错了
B:是文件字节流,字节流
C:是对象字节输入流,是对象流,不是字符流
11. 阅读如下代码:
class Super{//line 1
public float getNum(){return 3.0f;}//line 2
}//line 3
//line 4
public class Sub extends Super{//line 5
//line 6
}//line 7
which method, placed at line 6, will cause a compiler error?
A. public float getNum(){return 4.0f;}
B. public void getNum(){}
C. public void getNum(double d){}
D. public double getNum(float d){return 4.0d;}
答案【B】
题目问的是哪一句放在指定行,会编译不通过,报错
怎么理解多态
【A】:方法的重写,方法的返回值类型没变,参数变了
【B】:重载,肯定方法名是跟一个方法相同,但是返回值类型和参数两个肯定不一样
【D】:重载,肯定方法名是跟一个方法相同,但是返回值类型和参数两个肯定不一样
解更进一步:整个代码是描述一个继承关系,一个父类,一个子类,继承关系中肯定有方法的重写,这个重写就是方法名、返回值、参数类型必须一样(数据兼容概念的出现)
12. 阅读代码
public class Equals{
public static void add3(Integer i){
int val = i.intValue();
val += 3;
i = new Integer(val);
}
public static void main(String args[]){
Integer i=new Integer(0);
add3(i);
System.out.println(i.intValue());
}
}
what is the result?
A. compile fail
B. print out "0"
C. print out "3"
D. compile succeded but exception at line 3
答案【B】
题目问的是结果是哪一个注意到,main方法中新建类int包装类对象i,add3方法传入i之后,没有返回值,所以add3的调用不能写在等号右边。这里main方法中add3调用没问题
问题是add3方法等于没有改变传入的参数,所以main方法最后输出的还是i的初值,0
13. 下列场景中,_____不会触发类加载过程。
A. 创建类的实例
B. Jvm加载子类
C. 访问类的静态成员
D. 访问对象的成员
答案【D】
【A】创建第一个实例第一步就是加载类,第二个实例就不会加载,所以触发是不确定的
【B】任何不在JVM中的类,先加载它的父类,全部嵌套父类按序加载,所以也不确定
【C】使用类名点方法,访问类的一个静态成员,分为首次访问和后续访问,不确定
【D】访问对象的成员,证明对象这个所属的类已经被加载了,对象创建了,访问成员是用对象名.成员名来访问,肯定是过了加载类的操作,肯定不会触发这个类再加载
14. 下面代码的运行结果为:()
import java.io.*;
import java.util.*;
public class foo{
public static void main (String[] args){
String s;
System.out.println("s=" + s);
}
}
A. 代码得到编译,并输出“s=”
B. 代码得到编译,并输出“s=null”
C. 由于String s没有初始化,代码不能编译通过
D. 代码得到编译,但捕获到 NullPointException异常
答案【C】
15. 以下对接口描述错误的有 _____。
A. 接口没有提供构造方法
B. 接口中的方法默认使用public、abstract修饰
C. 接口中的属性默认使用public、static、final修饰
D. 接口不允许多继承
答案【D】
【A】实现接口继承接口,重写父接口的抽象方法。
【B】接口中的方法默认使用public、abstract修饰,这个是常识
【C】常识,属性也得是公开访问、抽象、只能初始化一次值的
【D】接口允许多继承,多继承刚好解决了类无法多继承的问题
16. 关于守护线程的说法,正确的是 _____。
A. 所有非守护线程终止,即使存在守护线程,进程运行终止
B. 所有守护线程终止,即使存在非守护线程,进程运行终止
C. 只要有守护线程或者非守护进程其中之一存在,进程就不会终止
D. 只要所有的守护线程和非守护线程终止运行之后,进程才会终止
答案【A】
【A】非守护线程没了,那么守护它的线程也没必要继续运行了,也没了,刘关张兄弟
【B】守护线程没了,其他的线程可以继续
【C】必须是非守护的线程存在,不能只有守护线程
【D】不需要两个都没了,非守护线程全没了,进程就会终止
17. 下列方法被调用后,一定使调用线程改变当前状态的是_____。
A. notify()
B. run()
C. sleep()
D. isAlive()
答案【C】
【A】一定使得线程改变当前状态的是,notify是唤醒,不一定改变
【B】run方法应该改变不了,有可能还是在阻塞状态
【C】休眠方法会让线程休眠指定时间,如果设置是0,那就休眠0秒,肯定状态是切换了的
【D】isAlive是判断当前线程是否是在执行状态,返回的是布尔值
18. 有如下程序
1)public class X{
2) public Object m(){
3) Object o=new Float(3.14F);
4) Object[] oa=new Object[1];
5) oa[0]=o;
6) o=null;
7) oa[0]=null;
8) System.out.println(oa[0]);
9) }
10) }
对象o最早可以被垃圾回收器回收的位置是:
A. After line 4
B. After line 6
C. After line 7
D. After line 9(that is,as the method returns)
答案【C】
要被回收的条件是,结束使用,代码块结束,等等
在第5行o变量赋值给了oa[0] ,等于多了一个变量记录了地址,
在第6行o变量赋值null,目前还剩下一个记录了变量地址的变量,就是oa[0] 元素
在第7行这最后一个记录地址的变量也被赋值null,那么o对象的地址已经被任何变量记录,可以被回收,类似寻梦环游记里,世界上最后一个记得你的人死了,你才真正死去,文字记录不在考虑范围,不要太较真
19.下列说法正确的是()
A. 所有的Java应用程序运行在同一个JVM中
B. 任意类型的两个引用变量,都可以相互赋值(若编译器不允许,可以强制类型转化)
C. 只要类加载完毕,我们就可以调用类中定义的普通成员方法
D. 所有的缓冲流,都是包装流。
答案【D】
【A】同一个JVM中,不正确
【B】任意,相互赋值,可以强制转化,需要有父子类关系,而且是父类引用子类对象
【C】类加载,结束以后,需要创建对象
【D】缓冲流,都是包装流,需要确定哪些是缓冲流,然后看父类,父类肯定是有嵌套定义,有嵌套定义,最内层肯定是文件路径
20. 在TCP/IP中,解决计算机到计算机之间通信问题的层次是 _____。
A. 网络接口层
B. 网际层
C. 传输层
D. 应用层
答案【B】
不理解,需要理解记忆,网络编程,肯定是网络层,网络接口层是否有,网际层肯定就等同于网络层