工程师笔试题2(答案解析)

一、单项选择题

1.二进制数 11101 转化为十进制数是( )。

A.23 B.17 C.26 D.29

2.以下可以对对象加互斥锁的关键字是( )。

A.synchronized B.serialize C.volatile D.static

二、不定项选择题

3.下列关于类的构造方法的描述中,正确的是( )。

A.类中的构造方法不可省略

B.构造方法必须与类同名,但方法不能与class 同名

C.构造方法在一个对象被 new 时执行

D.一个类只能定义一个构造方法

4.下列关于 Java 语言中 main 方法的描述中,正确的是( )。

A.Java 程序的 main 方法必须写在类里面

B.Java 程序中可以有多个 main方法

C.Java 程序的 main 方法中,如果只有一条语句,可以不用大括号{}括起来

D.Java 程序中类名必须与文件名一样

5.在类声明中,声明一个类不能再被继承的关键字是( )。

A.private B.abstract C.final D.static


答案解析


一、单项选择题

1.二进制数 11101 转化为十进制数是( )。

A.23 B.17 C.26 D.29

答案:D。

分析:本题考察的是进制转换的知识。本题中,二进制数 11101 对应的十进制数表示为 1*2^0 + 0*2^1 + 1*2^2 +1*2^3 + 1*2^4= 29,所以,选项 D 正确。除了人工转换外,在 Java 语言中,也可以用如下方法将一个二进制数转换为十进制数:Integer.valueOf("11101",2) 。所以,本题的答案为 D。


2.以下可以对对象加互斥锁的关键字是( )。

A.synchronized B.serialize C.volatile D.static

答案:A。

分析:本题考察的是 Java 关键字的知识。对于选项 A,synchronized(同步的)是 Java 语言的关键字,主要用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块时,同一时刻最多只有一个线程执行这段代码。当两个并发线程访问同一个对象中的这个加锁同步代码块时,同一时间只能有一个线程执行。所以,选项 A 正确。

对于选项 B,serialize 是序列化的意思,所谓对象的序列化指的是把对象转换为字节序列的过程,所谓对象的反序列化指的是把字节序列恢复为对象的过程。通常,对象的序列化主要有以下两种用途:

①将对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

②在网络上传送对象的字节序列。在 Java 语言中,序列化通过 Serializable 接口来实现。所以,选项 B 不正确。

对于选项 C,在由 Java 语言编写的程序中,有时候为了提高程序的运行效率,编译器会做一些优化操作,把经常被访问的变量缓存起来,程序在读取这个变量的时候有可能会直接从寄存器中读取这个值,而不会去内存中读取。这样做的一个好处是提高了程序的运行效率,但当遇到多线程编程时,变量的值可能被其他线程改变了,而该缓存的值不会做相应的改变,从而造成应用程序读取的值和实际的变量值不一致。关键字 volatile 正好能够解决这一问题,被关键字 volatile 修饰的变量编译器不会做优化,每次都会从内存中读取。所以,选项 C 不 正确。

对于选项 D,关键字 static 主要有以下两种作用:第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。第二,希望某个方法或属性与类而不是对象关联在一起,也就是说,在不创建对象的情况下就可以通过类来直接调用方法或使用类的属性。总之,被 static 修饰的属性(方法)是类的属性(方法),不属于任何对象。所以,选项 D 不正确。

所以,本题的答案为 A。

二、不定项选择题

3.下列关于类的构造方法的描述中,正确的是( )。

A.类中的构造方法不可省略

B.构造方法必须与类同名,但方法不能与class 同名

C.构造方法在一个对象被 new 时执行

D.一个类只能定义一个构造方法

答案:C。

分析:本题考察的是 Java 语言构造方法的知识。对于选项 A,类中的构造方法是可以省略的,当省略的时候,编译器会提供一个默认的构造方法以供使用。因此,选项 A 错误。对于选项 B,构造方法必须与类名相同,但是方法名也可以与类名相同。如下例所示:

public class Test{

public Test(){

System.out.println("construct");

}

public void Test(){

System.out.println("call Test");

}

public static void main(String[] args) {

Test a = new Test(); //调用构造方法

a.Test(); //调用 Test 方法

}

}

程序的运行结果为

construct

call Test

因此,选项 B 错误。对于选项 C,当一个对象被 new 的时候必定会调用构造方法。因此,选项 C 正确。对于选项 D,由于构造方法也可以重载,所以,一个类可以定义多个构造方法。因此,选项 D 错误。所以,本题的答案为 C。

4.下列关于 Java 语言中 main 方法的描述中,正确的是( )。

A.Java 程序的 main 方法必须写在类里面

B.Java 程序中可以有多个 main方法

C.Java 程序的 main 方法中,如果只有一条语句,可以不用大括号{}括起来

D.Java 程序中类名必须与文件名一样

答案:A、B。

分析:本题考察的是 Java 基本语法的知识。

在 Java 语言中,main 方法是程序的入口方法,一个程序要想运行必须要有 main 方法,但是只有满足特定条件的 main 方法才能作为程序的入口方法。对于本题而言:对于选项 A,由于 Java 语言是纯面向对象语言,所以,所有的属性与方法都必须定义在类里面,而且,main 方法也不例外。因此,选项 A 正确。对于选项 B,Java 程序可以定义多个 main 方法,但是只有 public static void main(String[]args)方法才是 Java 程序的入口方法,其他 main 方法都不是,并且这个入口方法必须被定义在类名与文件名相同的被 public 修饰的类中,如下例所示(Test.java):

class T{

public static void main(String[] args) {

System.out.println("T main");

}

}

public class Test {

// 程序入口方法

public static void main(String[] args) {

System.out.println("Test main");

}

}

程序的运行结果为Test main从上例可以看出,这个程序中定义了多个 main 方法,但是只有满足特定条件的 main 方法才能作为程序的入口方法。因此,选项 B 正确。对于选项 C,在 Java 语言中,不管方法体里有几条语句,所有的方法体都必须用大括号{}括起来。因此,选项 C 错误。对于选项 D,在 Java 语言中,一个文件内部可以有多个类的存在,但只有被 public 修饰的类的名字与文件的名字相同,其他类的名字可以根据需求随意起名字。因此,选项 D 错

误。所以,本题的答案为 A、B。

5.在类声明中,声明一个类不能再被继承的关键字是( )。

A.private B.abstract C.final D.static

答案:C。

分析:本题考察的是 Java 关键字的知识。

对于选项 A,关键字 private 是一个作用域修饰符,被关键字 private 修饰过的变量或方法只有当前类或对象具有访问权限。所以,选项 A 不正确。对于选项 B,在 Java 语言中,可以通过把类或者类中的某些方法声明为 abstract 来表示一个类是抽象类。所以,选项 B 不正确。

对于选项 C,被 final 修饰的变量为常量,当一个方法被声明为 final 时,该方法不允许任何子类重写,当一个类被声明为 final 时,此类不能被继承,所有方法都不能被重写。所以,选项 C 正确。

对于选项 D,关键字 static 主要有两种作用:第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关;第二,希望某个方法或属性与类而不是对象关联在一起,也就是说,在不创建对象的情况下就可以通过类来直接调用方法或使用类的属性。即被 static 修饰的属性(方法)是类的属性(方法),不属于任何对象。所以,选项 D 不正确。

所以,本题的答案为 C。

原文发布于微信公众号 - java学习(javaxxf)

原文发表时间:2017-10-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python自动化测试

Python的元组学习(五)

本节来学习python的元组,在python语言中,元组的关键字是tuple同时元组是不可变的,列表与字典是可变的,元组的定义是一个(),下面通过代码...

11840
来自专栏深度学习之tensorflow实战篇

golang 格式“占位符”%d,%f,%s等应用类型

golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。 红色部分为常用占位符 ? ? ? ? ? ? ? 对于 ...

39270
来自专栏Java学习网

Java面试中最常见的10个问题,Java底层知识,花点时间学习一下

1.什么是 Java 虚拟机?为什么 Java 被称作是“平台无关的编程语言”? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。Java 源文...

28950
来自专栏漫漫深度学习路

python命名空间

python的命名空间 python使用命名空间记录变量。python中的命名空间就像是一个dict,key是变量的名字,value是变量的值。 python中...

22260
来自专栏日常分享

Spring 学习笔记(七)—— 切入点表达式

  语法结构:   execution(   方法修饰符  方法返回值  方法所属类 匹配方法名 (  方法中的形参表 )  方法申明抛出的异常  )

6010
来自专栏LhWorld哥陪你聊算法

Linux篇---Grep和正则匹配

\                  转义字符 .                      匹配任意单个字符 [1249a],[^12],[a-k]  字符序...

51530
来自专栏抠抠空间

集合 (set) 的增删改查及 copy()方法

简介: 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点: 1、...

314110
来自专栏小狼的世界

method_exists VS is_callable

今天看到一篇介绍,关于 method_exist 的,我觉得自己也有必要记录一下。

11620
来自专栏Golang语言社区

[基础篇]Go语言变量

变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。 Go 语言变量名由字母、数字、下划线组成,其中首个字母不能为数字。 声...

39170
来自专栏张首富-小白的成长历程

每日一题--统计字符串出现的次数

使用awk统计出来指定字符串中重复出现的字符并重复出现了几次,现在只考虑有数字和字母,先区分大小写 eg: aaabbc------> a 重复出现3次,b重复...

34440

扫码关注云+社区

领取腾讯云代金券