2018-9月Java试题整理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Adonis044/article/details/82379501

9-4

1.关于容器下面说法正确的是

  • 列表(List)和集合(Set)存放的元素都是可重复的
  • 列表(List)和集合(Set)存放的元素都是不可重复的
  • 映射(Map)< key,value>中key是可以重复的
  • 映射(Map)< key,value>中value是可以重复的

解析:
列表(List)的元素是有序,可重复的
集合(Set)的元素是无序,不可重复的


2.Java语言与其它语言相比,独有的特点是

  • 面向对象
  • 多线程
  • 平台无关
  • 网络编程

3.有这样一段程序

public class Test{
    public static void main(String [] args){
        List list=new ArrayList();
        list.add("a");
        list.add("b");
        list.add("a");
        Set set=new HashSet();
        set.add("a");
        set.add("b");
        set.add("a");
        System.out.println(list.size()+","+set.size());
    }
}

运行主要的程序会打印出的是什么?

  • 2,2
  • 2,3
  • 3,2
  • 3,3

解析:
List和Set的区别,set中不能放重复的元素
Set中重复的定义,未定义自己的equals方法的话,调用默认的,也就是直接==
首先会调用Object的hashCode方法判断hashCode是否已经存在,如不存在则直接插入元素
如果已经存在则调用Object对象的equals方法判断是否返回true,如果为true则说明元素已经存在,如为false则插入元素。


4.列表(List)和集合(Set)下面说法正确的是

  • Set中至多只能有一个空元素
  • List中至多只能有一个空元素
  • List和Set都可以包含重复元素的有序集合
  • List和Set都是有序集合

解析:
Set不能有重复的元素,且是无序的,要有空值也只能有一个,因为他不允许重复。
List可以有重复元素,且是有序的,要有空值也可以有多个,因为他可以重复
Java的有序无序:指的是你按照顺序存进去数据,然后再按照顺序取出来,两者是一样的。比如List(0)我放的是“a”,那么我list.get(0)取出来也是“a”。并不代表我存了打乱顺序存1到10十个数,它会自己给按照升序或者降序给你排好序。


5.Java字符类型采用的是Unicode编码方案,每个Unicode码占用()个比特位

  • 6
  • 16
  • 32
  • 64

解析:
在Java中一个Unicode占2个字节(byte)
一个字节等于8比特位(bit)
所以每个Unicode码占用16个比特位


6.以下哪项陈述是正确

  • 垃圾回收线程的优先级很高,以保证不再 使用的内存将被及时回收
  • 垃圾收集允许程序开发者明确指定释放 哪一个对象
  • 垃圾回收机制保证了JAVA程序不会出现 内存溢出
  • 进入”Dead”状态的线程将被垃圾回收器回收
  • 以上都不对

解析:
A:垃圾回收在JVM中优先级相当相当低
B:垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制
C:垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出
D:进入DEAD的线程,它还可以恢复,GC不会回收


7.下列有关Java异常处理的叙述正确的是

  • finally是为确保一段代码不管是否捕获异常都会被执行的一段代码
  • throws是用来声明一个成员方法可能抛出的各种非运行异常情况
  • final用于可以声明属性和方法,分别表示属性的不可变及方法的不可继承
  • throw是用来明确地抛出一个异常情况

解析:
final用于可以声明属性和方法,分别表示属性的不可变及方法的不可覆盖。不是方法的不可继承!!!


9-5

1.下列关于继承的描述正确的是

  • 在Java中允许定义一个子类的引用,指向父类的对象
  • 在Java中一个子类可以继承多个抽象类,在extends关键字后依次列出
  • 在Java中继承是通过extends关键字来描述的,而且只允许继承自一个直接父类
  • 在Java中抽象类之间不允许出现继承关系,所有的抽象类都相互独立

解析:
A:父类的引用直接指向子类的对象,即向上转型;当子类的引用直接指向父类的对象时,则需要强制转换。


2.以下程序的运行结果是

public class Increment
{
    public static void main(String args[])
    {
        int a;
        a = 6;
        System.out.print(a);
        System.out.print(a++);
        System.out.print(a);
    }
}
  • 666
  • 667

3.在使用super和this关键字时,以下描述正确的是

  • 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行否则编译不通过
  • super()和this()不一定要放在构造方法内第一行
  • this()和super()可以同时出现在一个构造函数中
  • this()和super()可以在static环境中使用,包括static方法和static语句块

解析:
static方法或语句块没有实例时可以使用,而此时不需要构造实例,所以不能用this()和super()


4.JDK1.7中,以下说法正确的是()

  • Java中所有的非抽象方法都必须在类内定义
  • Java中主方法可以不在类内定义,其他方法都必须定义在类内
  • Java中主方法必须定义在类内,其他方法可以不必定义在类内
  • Java中所有方法都不必在类内定义

5.对于abstract声明的类,下面说法正确的是

  • 可以实例化
  • 不可以被继承
  • 子类为abstract
  • 只能被继承
  • 可以被抽象类继承

解析:
A:抽象类不能实例化,因为有抽象方法没有实现
B:可以被继承。派生类可以实现抽象方法
C:子类可以是抽象的,也可以非抽象
D:太肯定
E:可以被抽象类继承,也可以被非抽象类继承


6.非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致

  • 正确
  • 错误

解析:
实际考察的是两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型
子类抛出异常小于等于父类方法抛出异常
子类访问权限大于等于父类方法访问权限


7.下面哪个行为被打断不会导致InterruptedException?

  • Thread.join
  • Thread.sleep
  • Object.wait
  • CyclicBarrier.await
  • Thread.suspend

解析:
抛InterruptedException的代表方法有:

  1. java.lang.Object 类的 wait 方法
  2. java.lang.Thread 类的 sleep 方法
  3. java.lang.Thread 类的 join 方法

8.

父类没有无参的构造函数,所以子类需要在自己的构造函数中显式调用父类的构造函数


9.对于线程局部存储TLS(thread local storage),以下表述正确的是

  • 解决多线程中的对同一变量的访问冲突的一种技术
  • TLS会为每一个线程维护一个和该线程绑定的变量的副本
  • 每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了
  • Java平台的java.lang.ThreadLocal是TLS技术的一种实现

9-6

1.如下语句通过算术运算和逻辑运算之后i和 j的结果是( )

int i=0;
int j=0;
if((++i>0)||(++j>0))
{
//打印出i和j的值。
}
  • i=1;j=1
  • i=1;j=0

解析:
&&和||为短路与,短路或
&&若前面的表达式为false,整个表达式为false,所以后面的表达式无论true和false都无法影响整个表达式的逻辑,所以为了提高效率后面的表达式就不会执行
&和|为不短路与,不短路或
无论什么情况,前面的和后面的都要执行


2.正确的是

public class Test
{
    public int x;
    public static void main(String []args)
    {
        System. out. println("Value is" + x);
    }
}
  • 程序会打出 “Value is 0”
  • 程序会抛出 NullPointerException
  • 非静态变量不能够被静态方法引用
  • 编译器会抛出 “possible reference before assignment”的错误

解析:
非静态成员只能被类的实例化对象引用,因此这里在静态方法中访问x会造成编译错误
当类加载时,static静态方法随着类加载而初始化,此时实例对象还没被创建,但是非静态成员变量需要等到实例对象创建才会被初始化,故无法被引用。


3.下列说法错误的是

  • Java面向对象语言容许单独的过程与函数存在
  • Java面向对象语言容许单独的方法存在
  • Java语言中的非静态方法属于类中的成员(member)
  • Java语言中的方法必定隶属于某一类(对象),调用方法与C语言的过程或C++语言的函数相同

解析:
Java不允许单独的方法,过程或函数存在,需要隶属于某一类中——AB错
Java语言中的方法属于对象的成员而不是类的成员,不过,其中静态方法属于类成员——C错


4.下列有关Java异常处理的叙述中正确的是

  • finally是为了确保一段代码不管是否捕获异常都会被执行的一段代码
  • throws是用来声明一个成员方法可能抛出的各种非运行异常情况
  • final用于可以声明属性和方法,分别表示属性的不可变及方法的不可继承
  • throw是用来明确地抛出一个异常情况

解析:
throws用来在方法上声明该方法不需要处理的异常类型,用在方法上后面跟异常类名,可以是多个异常类
throw用于抛出具体异常类的对象,用在方法内,后面跟异常对象只能是一个异常类型实体
try块必须和catch和finally同时存在,不能单独存在,二者必须出现一个
finally块总会执行,不论是否有错误


5.下列说法正确的有:

  • 环境变量可在编译source code时指定
  • 在编译程序时,所能指定的环境变量不包括class path
  • Javac依次可同时编译数个Java源文件
  • javac.exe能指定编译结果要置于那个目录(directory)

9–7

1.执行下列代码后,哪些结论是正确的?

  • s[0]为未定义
  • s[9]为Null
  • s.length为0
  • s[10]为“ ”

解析:
默认初始化,基本类型是0,布尔类型是false,引用类型为null

2.在main()方法中给出的字节数组,如果将其显示到控制台,需要

  • 标准输出流,System.out.println()
  • 建立字节输出流
  • 建立字节输入流
  • 标准输入流System.in.read()

解析:
输出到控制台,直接System.out.println

3.This调用语句必须是构造函数中的第一个可执行语句

  • 正确
  • 错误

解析:
this()才必须是构造函数中的第一个可执行语句,用this调用语句并不需要

4.根据以下代码,下列说法中正确的是

public class Parent {
    private void m1(){}
    void m2(){}
    protected void m3(){}

    public static void m4(){}

}
  • 子类中一定能够继承和覆盖Parent类的m1方法
  • 子类中一定能够继承和覆盖Parent类的m2方法
  • 子类中一定能够继承和覆盖Parent类的m3方法
  • 子类中一定能够继承和覆盖Parent类的m4方法

解析:
通过继承,子类可以拥有所有父类对其可见的方法和域
A:私有方法只能在本类中可见,故不能继承
B缺省访问修饰符只在本包中可见,在外包中不可见
C:保护修饰符凡是继承自该类的子类都能访问,当然可以被继承覆盖
D:static修饰的成员属于类成员,父类字段或方法只能被子类同名字段或方法遮蔽,不能被继承覆盖。


5.下面有关Java hashmap的说法错误的是

  • HashMap的实例有两个参数影响其性能:“初始容量”和“加载因子”
  • HashMap的实现不是同步的,因为着他不是线程安全的
  • HashMap通过开放地址法解决哈希冲突
  • HashMap中的key-value都是存储在Entry数组中

解析:
C:拉链法解决哈希冲突


6.哪个类可用于处理Unicode?

  • InputStreamReader
  • BufferedRerader
  • Write
  • PipedInputStream

7.叙述正确的是

byte b1=1,b2=2,b3,b6; 
final byte b4=4,b5=6; 
b6=b4+b5; 
b3=(b1+b2); 
System.out.println(b3+b6);
  • 输出结果:13
  • 语句:b6=b4+b5编译出错
  • 语句:b3=b1+b2编译出错
  • 运行期抛出异常

解析:
没有final修饰的变量相加后会被自动提升为int型,与目标类型byte不相容,需要强制转换(向下转型)
被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了。而b1和b2是byte类型,Java中计算会将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要强制类型转换

  1. 所有的byte,short,char型的值将被提升为int型;
  2. 如果有一个操作数是long型,计算结果是long型;
  3. 如果有一个操作数是float型,计算结果是float型;
  4. 如果有一个操作数是double型,计算结果是double型;

9-8

1.如下Java程序

public class Test { 
     public static void main(String[] args) { 
     System.out.println(args[0]); 
     } 
} 

若采用命令行java Test one two three 调用,则程序输出的结果为:

  • Test
  • one
  • two
  • java

解析:
Test是类名,one two three才是main方法的参数


2.It is an important feature of the Java language that it always provides a default constructor to a class.

  • FALSE
  • TRUE

解析:
只有在不显示声明构造方法时,系统才提供默认无参构造方法


3.Java用()机制实现了进程之间的同步执行

  • 监视器
  • 虚拟机
  • 多个CPU
  • 异步调用

解析:
JVM中没有进程的概念,但是JVM中的线程映射为操作系统中的进程,对应关系为1:1.那这道题的问题就是JVM中线程如何异步执行,在JVM中是使用监视器锁来实现不同线程的异步执行,在语法的表现就是synchronized。


4.What is the result of compiling and executing the following fragment of code:

Boolean flag = false;
if (flag = true)
{
    System.out.println(“true”);
}
else
{
    System.out.println(“false”);
}
  • The code fails to compile at the “if” statement.
  • An exception is thrown at run-time at the “if” statement.
  • The text“true” is displayed.
  • The text“false”is displayed.
  • Nothing is displayed.

解析:
if(flag=true){} 中,只是一个赋值语句,隐含条件为
if((flag=true)==true){}


5.下面属于Java引用类型的有:

  • String
  • byte
  • char
  • Array

解析:
Java中除了基本数据类型都是引用数据类型Java中的基本数据类型如下:

  1. byte
  2. shot
  3. int
  4. long
  5. float
  6. double
  7. char
  8. boolean

除此之外都是引用类型


6.下列那个选项是合法的标识符?

  • 123
  • _name
  • class
  • first

解析:
Java标识符由数字字母下划线美元符号组成,首位不能是数字。并且Java关键字不能作为标识符。


7.下面哪些接口直接继承自Collection接口

  • List
  • Map
  • Set
  • Iterator

解析:
这里写图片描述


8.String str = new String(“abc”),”abc”在内存中是怎样分配的?

  • 字符串常量区
  • 寄存器

解析:
“abc”保存在常量池,str引用的对象保存在堆里,而Java7中又把常量池移到了堆中,所以这题不严谨。
str引用的对象,也就是生成的String对象而非str引用变量


9.

  1. 静态内部类才可以声明静态方法
  2. 静态方法不可以使用非静态变量
  3. 抽象方法不可以有函数体

9-9

猜你喜欢

转载自blog.csdn.net/Adonis044/article/details/82379501
今日推荐