CoreJava——阶段测试题(一)

-_-果然还是非常的懒,快有半个月没有写东西了,其实很大一部分原因是感觉东西记在本子上比较踏实而且翻看比较方便。经过一个多月的学习CoreJava课程已经基本结束了,今天做了阶段测试题,分享和一些比较经典的测试题,大家也能测试一下自己的学习程度~~~

一、选择题
1.编译和运行下面代码时显示的结果是()。

public class ThisConstructorCall { 
        public ThisConstructorCall(String s){ 
            System.out.println("s = " + s); 
        } 
        public ThisConstructorCall(int i){ 
            this("i = " + i); 
        } 
        public static void main(String args[]){ 
            new ThisConstructorCall("String call"); 
            new ThisConstructorCall(47); 
        } 
    } 
A、s = String call 
   i = 47 
B、String call 
   s = i 
C、String call 
   s = i = 47  
D、s = String call 
   s = i = 47
答案:D
解析:
main函数里面只有两行代码
1.new ThisConstructorCall("String call"); 
创建ThisConstructorCall类的对象,根据所传参数为String,调用对应的构造器 public ThisConstructorCall(String s)并将参数打印。

输出:s = String call 

2.new ThisConstructorCall(47)
创建ThisConstructorCall类的对象,根据所传参数为int,调用对应的构造器 public ThisConstructorCall(int i)
其中构造器内容为: this("i = " + i); 
意为调用本类中参数为String的构造器,此时this中内容为"i = 47"将这个字符串再传入参数为String的构造器中并打印。

输出:s = i = 47

所以选择D
p.s. String + 任意类型都会转为String类型

2.编译和运行下面代码后显示的结果是()。

public class Inc{ 
        public static void main(String args[]){ 
            Inc inc = new Inc(); 
            int i =0; 
            inc.fermin(i); 
            i = i++; 
            System.out.println(i); 
        } 
        void fermin(int i){ 
            i++; 
        } 
    } 
A、编译报错误
B、2 
C、1 
D、0     
答案:D
解析:
好奇呀,这道题做错了,其实到现在也不是很明白
说下老师的讲解过程。
这道题有两个坑
1.调用inc.fermin(i)时,因为i为基本数据类型所以不会造成i的值的改  变,此时i仍然为0
2.i = i++; 先取i的值并赋值给i,此时i仍然为0并没有++,所以输出i的值为0

3.下列有关子类继承父类构造函数的描述正确的是()。
A、创建子类的对象时,先调用子类自己的构造函数,然后调用父类的构造函数
B、子类无条件地调用父类不含参数的构造函数
C、子类必须通过super关键字调用父类的构造函数
D、子类无法继承父类的构造函数

答案:BD
这个是概念型的题目,这个题有点争议老师们讨论后我再回来改~~
    A、创建子类的对象时,先调父类构造函数,再调用自己的构造函数
    C、suer关键字可以省略

4.Character流与Byte流的区别是()
A、每次读入的字节数不同
B、前者带有缓冲,后者没有
C、前者是块读写,后者是字节读写
D、二者没有区别,可以互换使用

答案:A
解析:就是字符流和字节流的区别

5.编译和运行下面代码时显示的结果是()。

public class MyClass{ 
        static int i; 
        public static void main(String argv[]){ 
            System.out.println(i); 
        } 
    } 
A、Error Variable i may not have been initialized 
B、null 
C、1
D、0 
答案:D
解析:声明了static int i;,所以i为类的静态属性(成员变量)。int型的静态属性默认值为0

p.s.成员变量的默认值 

byte0     short0     int0     long0L    
float0.0f     double:0.0d
char:'\u0000'
boolean:false
所有引用类型(String等):null

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

String str1 = "hello";
    String str2 =  new String("hello");
    System.err.println(str1 == str2);
A、0
B、null
C、false
D、true
答案:C
解析:
1.操作符"=="在比较引用类型的值的时候比较的是引用地址的值
2.str1和str2相当于两个不同的String的对象,在内存(堆)中的存放地址是不同的

7.下列说法正确的有()
A、class中的constructor不可省略
B、constructor必须与class同名,但方法不能与class同名
C、constructor在一个对象被new时执行
D、一个class只能定义一个constructor

答案:C
解析:又是一道概念题
A、class中的constructor可以省略,没有写任何构造器时JVM会提供默 认无参构造器,但是如果你写了带参的构造器JVM就不会再提供无参的构造器了
B、方法也可以与类名相同
Dconstructor可以被重载当然能定义多个

8.下面程序输出的结果为:()

    String[] a = new String[10];
    for(int i=0;i<8;i++){
        System.out.println(a[i]);
    }
输出的结果是:
A、8个null
B、10个0
C、7个null
D、8个0
答案:A
解析:a为String数组,不赋初值时每个元素默认为mull

9.以下代码运行的结果为:()

    public static void main(String args[]) {
        Thread t = new Thread() {
            public void run() {
                pong();
            }
        };
        t.run();
        System.out.print("ping");
    }
    static void pong() {
        System.out.print("pong");
    }
A、pingpong        
B、pongping       
C、pingpong和pongping都有可能      
D、都不输出
答案:B
解析:千万不要被欺骗,擦亮眼睛这里并没有用到多线程,因为我们调用的使t.run()切记切记要启动多线程唯一的方法只有start(),这道题只是简单的方法调用先调用了静态方法pong()输出pong,然后输出ping

10.问在虚线处,如下哪些代码可以创建并启动线程?()

public class MyRunnable implements Runnable 
{ 
    public void run(){ 
    -------------------------------- 
    } 
} 

A、new Runnable(MyRunnable).start();
B、new Thread(MyRunnable).run();
C、new Thread(new MyRunnable()).start();
D、new MyRunnable().start();

答案:C
解析:和上题类似,你别看他花里胡哨写了一大堆,只要知道启动线程只能使用Thread类的start()方法就可以了

11.下面哪个流类属于面向字符的输入流()
A、BufferedWriter
B、FileInputStream
C、ObjectInputStream
D、InputStreamReader

答案:D
解析:
    A、包装字符输出流           
    B、基本文件字节输出流          
    C、对象输出流(序列化对象时使用)         
    D、字符输入流

12.ArrayList list = new ArrayList(20);中的list扩充几次()
A、0
B、1
C、2
D、3

答案:A
解析:这也是一道有坑的题,如果你了解的比较多大概会知道ArrayList默认的容量为10(不是size()),并且每次扩容原来的1.5倍。但是!!!题目中已经指定了容量为20那么就会直接分配20不需要扩容

13.新建一个流对象,下面哪个选项的代码是错误的?()
A、new BufferedWriter(new FileWriter(“a.txt”));
B、new BufferedReader(new FileReader(“a.dat”));
C、new GZIPOutputStream(new FileReader(“a.zip”));
D、new ObjectInputStream(new FileInputStream(“a.dat”));

答案:C
解析:虽然我不知道C是个什么流也从没见过,但是C错的很明显外面是OutputStram,却new 了一个Reader。

14.编译和运行下面代码时显示的结果是()

    public class NULL {
        public static void haha(){
        System.out.println("haha");
        }
        public static void main(String[] args) {
        ((NULL)null).haha();
        }
    }
A、haha 
B、编译出错
C、运行出错
D、"haha"
答案:A
解析:这个属于一个知识点吧
null的对象在内存中只是一个引用而已,加了强类型转换可以转换为任何类型,这里转换成了NULL类型,并调用了静态方法。
关于null这个东西我问了度娘一下值得研究的地方还是挺多的,大家感兴趣可以自己去看一下 

15.System.out.println(“5” + 2);的输出结果应该是()。A
A、52
B、7
C、2
D、5

答案:A
解析:还是那个考点,"5"是一个String类型的值 "5"+2 --->"52"

16.在Java中,String s=new String(“xyz”); 创建了几个对象()。
A、1个
B、1个或2个
C、2个
D、以上都不对

答案:C
解析:创建了两个对象
1.String类对象s
2.String类对象"xyz"

17.下面代码的运行结果为:()

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异常

答案:D
解析:s写在了main方法中,并不是成员变量,没有默认值需要初始化

18.关于sleep()和wait(),以下描述错误的一项是()
A、sleep是线程类(Thread)的方法,wait是Object类的方法;
B、sleep不释放对象锁,wait放弃对象锁;
C、sleep暂停线程、但监控状态仍然保持,结束后会自动恢复;
D、wait后进入等待锁定池,只有针对此对象发出notify方法后获得对象锁进入运行状态。

答案:D
解析:这也是概念方面的问题,主要是线程的各个状态的转换
wait()后进入等待锁定池,只有针对此对象发出notify()方法后获得对象锁进入就绪状态,只有就绪状态能进入运行状态。

19.创建一个tcp客户程序的顺序是()。
A、获得I/O流
B、关闭I/O流
C、对I/O流进行读写操作
D、建立socket
E、关闭socket

答案:DACBE
解析:额..就是这么个顺序-_-

20.方法重载(overloading)必须满足()。
A、在不同class中定义的方法 B、在同一类中定义的方法
C、方法名必须相同 D、返回类型必须相同
E、参数一定不同 F、参数可以相同

答案:BCE
解析:概念题,重载的条件
1.在同一个类中
2.方法名必须相同
3.参数一定不同(参数个数、类型、顺序)
4.其他的不关心(如返回值类型,异常抛出类型等)

21.下面的方法,当输入为2的时候返回值是多少?()

public int getValue(int i) { 
        int result = 0; 
        switch (i) { 
            case 1: result = result + i; 
            case 2: result = result + i * 2; 
            case 3: result = result + i * 3; 
        } 
        return result; 
    }
A、0
B、2 
C、4 
D、10
答案:10
解析:在switch条件分支中,如果case后面没有加break就会从匹配的case一直向下执行

22.Java的集合框架中重要的接口java.util.Collection定义了许多方法。选项中哪个方法不是Collection接口所定义的?()
A、int size()
B、boolean containsAll(Collection c)
C、compareTo(Object obj)
D、boolean remove(Object obj)

答案:C
解析:compareTo是接口 Comparable的方法
摘自API:

接口 Comparable<T>
类型参数:
T - 可以与此对象进行比较的那些对象的类型
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。

23.一个线程在任何时刻都处于某种线程状态(thread state),例如运行状态、阻塞状态、就绪状态等一个线程可以
由选项中的哪种线程状态直接到达运行状态?()
A、死亡状态
B、阻塞状态(对象lock池内)
C、阻塞状态(对象wait池内)
D、就绪状态

答案:D
解析:只有就绪态可以直接转换为运行状态

24.下列语句哪一个正确()
A、Java程序经编译后会产生machine code
B、Java程序经编译后会产生byte code
C、Java程序经编译后会产生DLL
D、以上都不正确

答案:B
解析:java程序编译后会生成字节码文件,就是.class文件

25.在Java中,给定某程序的main方法,如下,运行结果为()。

public static void main(String [ ]args) {
    int i = 0; 
    System.out.print(i++) ;
    System.out.print(++i) ;
}

A、01 B、10 C、02 D、编译错误

答案:C
解析:
System.out.print(i++)-----> i++先取值0,再自加为1
System.out.print(++i)-----> ++i先由1自加为2,再取值2

26.在Java中下面代码执行完之后i和j的值分别是多少()。

public class ExaminationDemo{
    public static void main(String[] args){
        int i=1;
        int j=10;
        do{
            if(i++>--j) continue;
        }while(i<5);
    }
}

A、i=6,j=4 B、i=5,j=6 C、编译错误 D、以上都不对

答案:B
解析:
i++     --j         i       j
 1       9          2       9
 2       8          3       8
 3       7          4       7
 4       6          5       6
 此时i=5,已将不满足循环条件i = 5j = 6.

27.在Java中,下列关于线程的说法正确的是()。
A、创建线程对象,调用start()方法来执行该线程。
B、在自定义线程类时,不用重写run方法就可以运行线程。
C、在创建线程对象时,不能自定义线程名。
D、有t1,t2,t3三个线程,在运行线程的时候是按顺序运行的。

答案:A
解析:
C、在创建线程对象时,可以自定义线程名。
D、t1,t2,t3三个线程并发执行先后顺序随机

28.在Java中,下面关于构造函数的描述正确的是()。
A、类必须有显式构造函数
B、它的返回类型是void
C、它和类有相同的名称,但它不能带有任何参数
D、以上都不对

答案:D
解析:概念题
A、没有显示构造函数时JVM会提供默认构造函数
B、构造函数没有返回值和返回类型
C、可以带各种参数

29.Java程序中程序运行入口方法main的签名正确的有()。

A、public static void main(String args)
B、static public void main(String[] args)
C、public void static main(String[] args)
D、public void main(String args[])
答案:B
解析:概念题中的概念题JAVA规定的

30.对于构造方法(constructor)描述正确的有()。
A、构造方法没有返回类型
B、构造方法一定是public的方法
C、果我们没有显示定义构造方法,系统不会提供一个缺省的
D、构造方法不能重载

答案:A
解析:
B、枚举类型的构造方法就是private修饰的
C、系统会提供一个缺省的
D、构造方法可以重载

二、填空题(0.5分/空,共10分)
1.假设x=13,y=4,则表达式x%y != 0的值是【 true 】 ,其数据类型是 【 boolean 】。
2.在Java中,面向对象编程的三大特性:【 继承 、 封装 、 多态】
3.在Java中,使用关键字【 synchronized】 给对象加互斥锁。
4.在Java中,创建多线程的途径有两种:【创建Thread类的子类和实现Runnable接口。】
5.当声明一个数组int arr[] = new int[5]; 时,这代表这个数组所保存的变量类型是【 int 】,数组名是 【 arr 】,数组的大小为【 5 】 ,数组元素下标的使用范围是 【 0-4 】 。
6.子类对父类继承来的方法重新定义称为 【 重写 】 。子类对自身拥有的同名方法的重新定义称 【 重载 】 。
7.并发控制是多线程编程的难点。一个线程要等待某个条件的满足调用方法 【 wait()】 ;通知某一个处于等待状态线程的方法是 【notify() 】,通知多个的是 【 notifyAll() 】 ;处于等待状态的线程当前调用的方法或程序块用关键字 【synchronized 】 来限制。
8.对于int型变量,内存分配 【 4 】 个字节,对于char型变量,内存分配 【 2 】 个字节,对于float型变量,内存分配 【 4 】 个字节,对于【double】型变量,内存分配 【 8 】 个字节。

三、简答题(4分/题,共20分)

1.简述八大数据类型以及四个引用数据类型。
byte short int long float double char boolean
接口类型 类类型 String类型 Array类型

  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值