Java基础测试题+答案

Java基础测试题(总分100分,时间60分钟)

选择题(10 x 2分)

1. 下列不可作为java语言修饰符的是:

A) a1                   
B) $1                    
C) _1                   
D) 11

2. 整型数据类型中,需要内存空间最少的是:

A) short                
B) long                 
C) int                  
D) byte

3. double数据类型的默认值是多少?

A) 0                    
B) 0.0
C) null                  
D) 0.0d

4. 对于变量int val = 0b11010,System.out.println("" + val)输出是多少?(注:在Java7之后,可以用0b开头标识二进制数)

A) 26                  
B) 64
C) 28                   
D) 32

5. String is an ___ .

A) Class                 
B) Variable
C) Array                 
D) Data type

6. Which of these method of String class can be used to test to strings for equality?

A) isequal()              
B) isequals()
C) equal()                
D) equals()

7. 指出正确的表达式。

A) byte=128;               
B) Boolean=null;
C) long l=0xfffL;             
D) double=0.9239d;

8. System类在哪个包中?

A) java.util                 
B) java.lang
C) java.awt                 
D) java.io

9. 下面哪种注释方法能够支持javadoc命令:

A) /**...**/                   
B) /*...*/
C) //                       
D) /**...*/

10. 若a = 8,则表达式 a >>> 2 的值是多少?

A)1                       
B)4
C)3                       
D)2

填空题(15 x 2分)

1. Java程序的入口是main方法,它的参数是 ____。

2. 变量的3要素是变量名, ____和变量值。

3. JVM具体是指 ____。

4. Java中的基本数据类型有 ____种。

5. 两个方法有相同的名称和参数,但返回值不同,是否是重载? ____

6. 实现接口的 ____ 不必实现接口中定义的全部方法。

7. 包装类Integer和String类的相同点是,它们都是 ____。

8. Java中有一个处理日期的类Date,但此类已不推荐再使用,替代它的是 ____。

9. final关键字修饰类表示类 ____。

10. 将字节流转换为字符流的两个类是 _____。

11. FileInputStream使用____读取文件,不能直接处理Unicode字符。

12. Java中线程实现了 ____ 接口。

13. 线程可以主动调用sleep()方法或者____方法主动放弃CPU。

14. 自定义的类Utils中,一个静态方法用关键字synchronized修饰,该同步锁对应的对象是 ____。

15. 在Java网络编程中,TCP和UDP都基于 ____。

代码阅读题(5 x 3分)

1. 下面代码的作用是交换数组的第一个元素和最后一个元素,改正其中的错误。

public class Test{
  public static void main(String[] args){
    int[] list = new int[]{4, 4, 5, 2, 7, 1};
    int temp; // 临时变量
			
    // 交换数组的第一个元素和最后一个元素
    list[0] = temp;
    temp = list[5];
    list[5] = list[0];
  }
}

2. 分析以下代码,写出运行结果。

int num = 90;
System.out.print(num ++);
double a = 89.5;
int b = (int)a + 10;
System.out.println(" "+b);

3. 阅读以下代码:

class test  {
  public static void main (String[] args){
    Animal animal = new Cat();
    animal.running();
  }
}
	
class Animal{
  public void running(){
    System.out.println("Animal is running!");
  }
}
	
class Cat extends Animal{
  public void running(String target){
    System.out.println("Cat is running to "+target);
  }
	    
  public void running(){
    System.out.println("Cat is running.");
  }
}

它的运行结果是什么?

4. 以下代码的运行结果是什么:

class HelloA {
	
  public HelloA() {
    System.out.println("HelloA");
  }
	    
  { System.out.println("I'm A class"); }
	    
  static { System.out.println("static A"); }
	
}
	
public class HelloB extends HelloA {
  public HelloB() {
  System.out.println("HelloB");
  }
	    
  { System.out.println("I'm B class"); }
	    
  static { System.out.println("static B"); }
	    
  public static void main(String[] args) { 
    new HelloB(); 
  }
	
}

5. 修改以下代码中的错误,改正后输出是多少?

interface Rideable {
  String getGait();
}
	
public class Gamel implements Rideable {
  int weight = 2;
	
  public static void main(String[] args) {
    new Gamel().go(8);
  }
	
  void go(int speed) {
    ++speed;
    weight++;
    int walkrate = speed * weight;
    System.out.print(walkrate + getGait());
  }
	
  String getGait() {
    return " mph, lope";
  }
}

简答题(5 x 5分)

1. &和&&的区别。

2. 简述接口和抽象类的区别。

3. 简述TCP和UDP的区别。

4. 什么是死锁(deadlock)?

5. Java中处理正则表达式的主要的类是Pattern和Matcher,简述这两个类的功能。

综合题(10分)

1. Singleton模式:

  • 什么是Singleton模式?举一个应用了单例模式的例子。
  • 写一个单例模式的类,有getInstance方法。
  • 请实现线程安全的单例模式。
  • 请用double checked locking实现线程安全的单例模式。
  • 如何防止通过反射实例化多个Singleton Class的对象?




Java基础测试题答案

选择题(10 x 2分)

  1. D
  2. D
  3. D
  4. A
  5. A
  6. D
  7. D
  8. B
  9. D
  10. B

填空题(15 x 2分)

  1. 字符串数组
  2. 变量类型
  3. Java虚拟机
  4. 8
  5. 不是
  6. 抽象类
  7. 不可变的
  8. Calendar
  9. 不可被继承
  10. InputStreamReader和OutputStreamWriter
  11. 字节
  12. Runnable
  13. yield()
  14. Utils.class
  15. Socket

代码阅读题(5 x 3分)

  1. temp没有赋初值

  2. 90 99

  3. Cat is running.

    • static A
    • static B
    • I'm A class
    • HelloA
    • I'm B class
    • HelloB
  4. interface Rideable {
    String getGait();
    }

    public class Gamel implements Rideable {
    int weight = 2;

     public static void main(String[] args) {
         new Gamel().go(8);
     }
    
     void go(int speed) {
         ++speed;
         weight++;
         int walkrate = speed * weight;
         System.out.print(walkrate + getGait());
     }
    
     String getGait() {
         return " mph, lope";
     }
    

    }

    • Gamel中getGait方法增加public访问修饰符。
    • 输出是: 27 mph, lope

简答题(5 x 5分)

1. &和&&的区别。

&和&&都可作为逻辑运算符“与”使用,但是&&是“短路与”,运算时先判断符号前面的表达式的值,如果能够确定整个表达式的值,则不进行符号后面的表达式的运算。
另外,&也可作为位运算符使用。

2. 简述接口和抽象类的区别。

  • 只有接口能继承接口。
  • 接口中的所有变量被自动设为final。
  • 接口的执行比抽象类要慢。
  • 接口中方法的作用域只能是public的,抽象类则无此限制。
  • 抽象类可以实现方法,但接口不行。接口只包含方法签名,不包含方法体。
  • 一个类可以实现多个接口,但只能继承一个抽象类。

3. 简述TCP和UDP的区别。

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到

4. 什么是死锁(deadlock)?

两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程都陷入了无限的等待中。

5. Java中处理正则表达式的主要的类是Pattern和Matcher,简述这两个类的功能。

pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个Pattern对象,你必须首先调用其公共静态编译方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数。

Matcher对象是对输入字符串进行解释和匹配操作的引擎。与Pattern类一样,Matcher也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象。

综合题(10分)

1. Singleton模式:

  • 什么是Singleton模式?举一个应用了单例模式的例子。
  • 写一个单例模式的类,有getInstance方法。
  • 请实现线程安全的单例模式。
  • 请用double checked locking实现线程安全的单例模式。
  • 如何防止通过反射实例化多个Singleton Class的对象?

Singleton模式:

  • 什么是Singleton模式?举一个应用了单例模式的例子。

单例模式是指,一个类在整个应用的运行周期中只存在唯一的实例,它会提供一个getInstance方法来访问此实例。例如java.lang.Runtime就是单例模式的应用,通过getRuntime()方法访问。

  • 写一个单例模式的类,有getInstance方法。

参考代码:

public class Singleton{
    private static Singleton _INSTANCE ;
    private Singleton(){};
    public static Singleton getInstance(){
        if (_INSTANCE  == null){
            sInstance = new Singleton();
        }
        return _INSTANCE ;
    }
}
  • 请实现线程安全的单例模式。

参考代码:

public class Singleton{
    private static Singleton _INSTANCE ;
    private Singleton(){};
    public synchronized static Singleton getInstance(){
        if (_INSTANCE  == null){
            sInstance = new Singleton();
        }
        return _INSTANCE ;
    }
}
  • 请用double checked locking实现线程安全的单例模式。

参考代码:

public class Singleton{
    private static Singleton _INSTANCE ;
    private Singleton(){};

      public static Singleton getInstance(){ 
          if(_INSTANCE == null){ 
              synchronized(Singleton.class){ 
                  if(_INSTANCE == null){ 
                      _INSTANCE = new Singleton(); 
                  } 
              } 
          } 
          return _INSTANCE; 
      }
}
  • 如何防止通过反射实例化多个Singleton Class的对象?

单例模式是通过构造器私有来防止外界实例化它的对象,但在Java中,有可能通过反射访问私有的字段和方法,一种避免的方式是在构造器中做检查并抛出异常。


你可能感兴趣的:(Java基础测试题+答案)