day33周一总结_chap-javase阶段测试_1.加载类概念不清2.线程理解不到位[选择题]

一.【单选题】

1. 下列说法正确的是 _____。

A. Java程序经编译后­­­会产生machine code

B. Java程序经编译后会产生byte code

C. Java程序经编译后会产生DLL

D. 以上都不正确

答案【B】

解答:字节码文件

 

2.下列代码中,哪句代码会报错()

  1. byte b = 127;
  2. byte b = 10;  b += 1; 
  3. byte b = 11;  b = b + 1; 
  4. 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】

不理解,需要理解记忆,网络编程,肯定是网络层,网络接口层是否有,网际层肯定就等同于网络层

上一篇:day33.JavaScript基础


下一篇:牛客 C++刷题day33