Java基础笔试练习(二)

JDK8以后,HashMap的数据结构是数组+链表+红黑树

2. 在 JAVA 编程中,Java 编译器会将 Java 程序转换为( )?


A.字节码

B.可执行代码

C.机器代码

D.以上都不对

答案:

A

解析:

  • 编译器将Java源代码编译成字节码class文件

  • 类加载到JVM里面后,执行引擎把字节码转为可执行代码

  • 执行的过程,再把可执行代码转为机器码,由底层的操作系统完成执行。

3.下面有关JVM内存,说法错误的是?


A.程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的

B.Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的

C.方法区用于存储JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,是线程隔离的

D.原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的

答案:

C

解析:

运行时数据区包括:虚拟机栈区,堆区,方法区,本地方法栈,程序计数器

  • 虚拟机栈区:也就是我们常说的栈区,线程私有,存放基本类型,对象的引用和 returnAddress ,在编译期间完成分配。

  • 堆区:JAVA 堆,也称 GC 堆,所有线程共享,存放对象的实例和数组, JAVA 堆是垃圾收集器管理的主要区域。

-方法区:所有线程共享,存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的对象的回收和对类型的卸载。

  • 程序计数器:线程私有,每个线程都有自己独立的程序计数器,用来指示下一条指令的地址。
  1. JAVA中,下列语句哪一个正确()

A.class中的constructor不可省略

B.constructor必须与class同名,但方法不能与class同名

C.constructor在一个对象被new时执行

D.一个class只能定义一个constructor

答案:

C

解析:

A 省略构造函数,编译器会自动生成。

D 构造函数可以重载

B 方法是可以和类名同名的,和构造方法唯一的区别就是,构造方法没有返回值。

5.在JAVA中,假设A有构造方法A(int a),则在类A的其他构造方法中调用该构造方法和语句格式应该为()


A.this.A(x)

B.this(x)

C.super(x)

D.A(x)

答案:

B

解析:

this的作用其中一个就是在一个构造方法中调用另一个构造方法,格式为this(参数);

super是调用父类的方法;

A(a)这种形式是在new一个类时使用。

6.下列选项中属于面向对象程序设计语言特征的是()


A.继承性

B.多态性

C.相似性

D.封装性

答案:

A B D

解析:

面对对象三大特征:封装,继承,多态

7.以下哪个正确?


A.abstract类只能用来派生子类,不能用来创建abstract类的对象。

B.final类不但可以用来派生子类,也可以用来创建final类的对象。

C.abstract不能与final同时修饰一个类。

D.abstract类定义中可以没有abstract方法。

答案:

A C D

解析:

1、abstract类不能用来创建abstract类的对象;

2、final类不能用来派生子类,因为用final修饰的类不能被继承;

3、如2所述,final不能与abstract同时修饰一个类,abstract类就是被用来继承的;

4、类中有abstract方法必须用abstract修饰,但abstract类中可以没有抽象方法,接口中也可以有abstract方法。

8. JAVA反射机制主要提供了以下哪些功能?


A.在运行时判断一个对象所属的类

B.在运行时构造一个类的对象

C.在运行时判断一个类所具有的成员变量和方法

D.在运行时调用一个对象的方法

答案:

A B C D

解析:

Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

因此,答案为:ABCD

9.以下关于Histroy对象的属性或方法描述正确的是()


A.bcak回到浏览器载入历史URL地址列表的当前URL的前一个URL

B.go表示刷新当前页面

C.length保存历史URL地址列表的长度信息

D.forward转到浏览器载入历史URL地址列表的当前URL的下一个URL。

答案:

A D

解析:

选A、D。考察的是浏览器的内置对象管理模型,简称BOM(Browser Object Model)中的Histroy属性和方法。

  • length 返回浏览器历史列表中的URL数量。所以C中表述的长度信息是错误的。

  • back() 加载 history列表中的前一个URL。

  • forward() 加载 history 列表中的下一个URL。

  • go() 加载history列表中的某个具体页面。所以B的表述刷新当前页面是错误的。

10.


public class NameList

{

private List names = new ArrayList();

public synchronized void add(String name)

{

names.add(name);

}

public synchronized void printAll() {

for (int i = 0; i < names.size(); i++)

{

System.out.print(names.get(i) + ””);

}

}

public static void main(String[]args)

{

final NameList sl = new NameList();

for (int i = 0; i < 2; i++)

{

new Thread()

{

public void run()

{

sl.add(“A”);

sl.add(“B”);

sl.add(“C”);

sl.printAll();

}

} .start();

}

}

}

Which two statements are true if this class is compiled and run?

A.An exception may be thrown at runtime.

B.The code may run with no output, without exiting.

C.The code may run with no output, exiting normally(正常地).

D.The code may rum with output “A B A B C C “, then exit.

E.The code may rum with output “A B C A B C A B C “, then exit.

F.The code may ruin with output “A A A B C A B C C “, then exit.

G.The code may ruin with output “A B C A A B C A B C “, then exit.

答案:

E G

解析:

在每个线程中都是顺序执行的,所以sl.printAll();必须在前三句执行之后执行,也就是输出的内容必有(连续或非连续的)ABC。而线程之间是穿插执行的,所以一个线程执行 sl.printAll();之前可能有另一个线程执行了前三句的前几句。

E答案相当于线程1顺序执行完然后线程2顺序执行完。

G答案则是线程1执行完前三句add之后线程2插一脚执行了一句add然后线程1再执行 sl.printAll();输出ABCA。接着线程2顺序执行完输出ABCABC

输出加起来即为ABCAABCABC。

11. 关于容器下面说法正确的是? ( )


A.列表(List)和集合(Set)存放的元素都是可重复的。

B.列表(List)和集合(Set)存放的元素都是不可重复的。

C.映射(Map)<key,value>中key是可以重复的。

D.映射(Map)<key,value>中value是可以重复的。

答案:

D

解析:

列表(List)的元素是有序、可重复的;

集合(Set)的元素是无序、不可重复的。

12.以下说法错误的是?()


A.数组是一个对象

B.数组不是一种原生类

C.数组的大小可以任意改变

D.在Java中,数组存储在堆中连续内存空间里

答案:

C

解析:

在java中,数组是一个对象,不是一种原生类,对象所以存放在堆中,又因为数组特性,是连续的,只有C不对

13.下列哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?


A.private

B.无修饰符

C.public

D.protected

答案:

B

解析:

解析

14.关于以下程序代码的说明正确的是?


public class HasStatic {

private static int x = 100;

public static void main(String args[]) {

HasStatic hs1 = new HasStatic();

hs1.x++;

HasStatic hs2 = new HasStatic();

hs2.x++;

hs1 = new HasStatic();

;

hs1.x++;

HasStatic.x–;

System.out.println(“x=” + x);

}

}

A.程序通过编译,输出结果为:x=103

B.10行不能通过编译,因为x是私有静态变量

C.5行不能通过编译,因为引用了私有静态变量

D.程序通过编译,输出结果为:x=102

答案:

D

解析:

此题选择D。

首先要了解static的意思。

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。

static变量在第一次使用的时候初始化,但只会有一份成员对象。

所以这里不仅可以调用,而且每一次调用都确实修改了x的值,也就是变化情况是这样的:

x=101

x=102

x=103

x=102

15.如何放掉一个指定占据的内存空间?()


A.调用free()方法

B.代用system.gc()方法

C.赋值给该项对象的引用为null

D.程序员无法明确强制垃圾回收器运行

答案:

D

解析:

在《java虚拟机》一书中明确讲了,释放掉占据的内存空间是由gc完成,但是程序员无法明确强制其运行,该空间在不被引用的时候不一定会立即被释放,这取决于GC本身,无法由程序员通过代码控制。

16.一般情况下,以下哪个选项不是关系数据模型与对象模型之间匹配关系?


A.表对应类

B.记录对应对象

C.表的字段对应类的属性

D.表之间的参考关系对应类之间的依赖关系

答案:

D

解析:

一般关系数据模型和对象数据模型之间有以下对应关系:表对应类,记录对应对象,表的字段对应类的属性

17.下列关于Java并发的说法中正确的是()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值