JAVAW每期30道选择题

这是一篇关于Java编程的博客,详细解答了30道选择题,涵盖了关键字使用、抽象类、构造方法、数据类型、内存管理、对象序列化、Applet、流的区别、类的关系、内存区域等多个方面,旨在帮助读者深入理解Java核心技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java30道选择题答案及解析

1、关键字(B)表明一个对象或变量的引用在初始化后不能被修改。

A.private
B.final
C.static
D.没有这种关键字

解析:

final修饰的变量内容是不能修改的,如果final修饰一个对象的引用,那么指的是这个对象的地址值是无法改变的,对象的内容还是可以修改的。如果final修饰一个普通变量的话,就是变量的值无法修改。综上,final修饰变量的本质就是:修饰的变量值(地址或内容)无法改变。

2、一个抽象类并不需要其中所有的方法都是抽象的。( A )

A.正确
B.错误

解析:

1)抽象类可以包括抽象方法和非抽象方法
2)如果类里面有抽象方法的话,那么类一定要声明为抽象的!

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

A.构造方法的返回类型为void
B.可以定义一个类而在代码中不写构造方法。
C.在同一个类中定义的重载构造方法不可以相互调用。
D.子类不允许调用父类的构造方法。

解析:

A、构造器没有返回值,这个没有返回值和返回值为void可部一样。
B、每个类在没有自己显式声明构造器的时候,都会有一个默认的无参构造。
C、构造器可以重载,而且可以使用super()、this()相互调用
D、每个构造器的默认第一行都是super(),但是一旦父类中没有无参构造,必须在子类的第一行显式的声明调用哪一个构造。

4、变量a是一个64位有符号的整数,初始值用16进制表示为:0x7FFFFFFFFFFFFFFF;变量b是一个64位有符号的整数,初始值用16进制表示为:0x8000000000000000。则a+b的结果用10进制表示为多少?(B)

A. 1
B. -1
C. 0
D.263+262+…+22+21+2^

解析:

计算机变量以补码形式存放,于是a+b为补码相加:
0x7FFFFFFFFFFFFFFF
+0x8000000000000000
=0xFFFFFFFFFFFFFFFF
而(0xFFFFFFFFFFFFFFFF)补化为原码,即第一位符号位不变,其他位取反后末位加1,得原码为0x8000000000000001,最后转换为10进制即为-1

5、抽象类方法的访问权限默认都是public( B )

A.正确
B.错误

解析:

关于抽象类
JDK 1.8以前,抽象类的方法默认访问权限为protected
JDK 1.8时,抽象类的方法默认访问权限变为default

6、DK中提供的java、javac、jar等开发工具也是用Java编写的。(A)

A.对
B.错

7、以下哪些内存区域属于JVM规范?(ADE)

A.方法区
B.实例变量
C.静态变量
D.程序计数器
E.虚拟机栈

解析:

JVM内存区:程序计数器、虚拟机栈、本地方法栈、堆、方法区(包括常量池)。
不属于JVM内存区:直接内存(Direct Memory),用户I/O操作

8、以下关于对象序列化描述正确的是(CD)

A.使用FileOutputStream可以将对象进行传输
B.使用PrintWriter可以将对象进行传输
C.使用transient修饰的变量不会被序列化
D.对象序列化的所属类需要实现Serializable接口

解析:

在Java中,对象的序列化可以通过实现两种接口来实现,若实现的是Serializable接口,则所有的序列化将会自动进行,若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。

9、下面关于Applet的说法是正确的是(ABCD)

A.Applet可以在带有Java解释器的浏览器中运行
B.Applet类必须继承java.applet.Applet
C.Applet可以访问本地文件
D.Applet是Object类的子类

10、character流和byte流的区别不包括(ABD)

A.每次读入的字节数不同
B.前者带有缓冲,后者没有。
C.前者是字符读入,后者是字节读入。
D.二者没有区别,可以互换。

解析:

A:字符流每次可以读取1K,例如char[] a = new char[512];,字节流每次也可以读取1K,例如byte[] a = new byte[1024];
B:自带缓冲的流:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter,可以看出不仅有字符流,也有字节流,但是不是所有的字符流和字节流都自带缓冲,具体什么是缓冲呢,就对BufferedInputStream做一下解释吧,解释如下:BufferedInputStream继承于FilterInputStream,提供缓冲输入流功能。缓冲输入流相对于普通输入流的优势是,它提供了一个缓冲数组,每次调用read方法的时候,它首先尝试从缓冲区里读取数据,若读取失败(缓冲区无可读数据),则选择从物理数据源(譬如文件)读取新数据(这里会尝试尽可能读取多的字节)放入到缓冲区中,最后再将缓冲区中的内容部分或全部返回给用户.由于从缓冲区里读取数据远比直接从物理数据源(譬如文件)读取速度快
C:字符流是按照字符读写,字节流是按照字节读写
D:两者有区别,例如字节流是万能流,什么都能读,字符流只能读普通的文本

11、 设有下面一段代码:

class Student extends Person {
long id; // 身份证号
int score; // 入学总分
String name; // 姓名
int getScore(){
return score;
}

}
问:类 Person 和类 Student 的关系是( B)。
A.包含关系
B继承关系
C关联关系
D无关系,上述类定义有语法错误

解析:

extends 为继承, Student 继承 Person。

12、欲定义类字段或类方法(静态方法),应该使用下列哪一个修饰符修饰(B)

A.public
B.static
C.protected
D.synchronized

解析:

A、 public可以修饰类,数据成员,构造方法,方法成员。被public修饰的成员 ,可以在任何一个类中被调用,不管同包或不同包,是权限最大的一个修饰符。
B、 static用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。
C、 private可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部 类,不考虑内部类)。被private修饰的成员,只能在定义它们的类中使用,在 其他类中不能调用。
D、 synchronized可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。

13、设有下面两个类的定义:

class Person {}
class Student extends Person {
public int id; //学号
public int score; //总分
public String name; // 姓名
public int getScore(){return score;}
}
类Person和类Student的关系是(B)。
A包含关系
B继承关系
C关联关系
D无关系,上述类定义有语法错误

解析:

ava中类之间的六种关系:
第一种:继承关系,例如:子类继承父类,子接口继承父接口。
第二种:实现关系,例如:类实现接口。
第三种:依赖关系,例如:一个类作为另一个类中方法的参数存在,这种关系具有偶然性和临时性。
第四种:关联关系,例如:一个类作为另一个类中的成员变量存在,它是一种强依赖关系。
第五种:聚合关系,例如:整体和部分之间,他们是可以分离的拥有各自的生命周期,并且部分是相同的。像鸟群和鸟。
第六种:组合关系,它是一种强聚合,并且整体和部分之间不可分离,具有相同的生命周期,整体包含该部分,也包含其他部分,其他部分和该部分是不相同的,像cpu和计算机,计算机除了包括cpu还有键盘和显示器等。

14、 有以下代码片段:

String str1=“hello”;
String str2=“he”+ new String(“llo”);
System.out.println(str1==str2);
请问输出的结果是:D
A.true
B.都不对
C.null
D.false

解析:

tring str1=“hello”; 这样创建字符串是存在于常量池中
String str2=new String(“hello”); str2存在于堆中,
==是验证两个对象是否是一个(内存地址是否相同)
用+拼接字符串时会创建一个新对象再返回。

15、 在 applet 的方法中 , 可关闭小应用程序并释放其占用资源的是( D)

A.stop()
B.paint()
C.init()
D.destroy()

解析:

Applet的生命周期涉及init()、start()、stop()和destroy()四种方法,这4种方法都是Applet类的成员。
1、public void init()
init()方法是 Applet 运行的起点。当启动 Applet 程序时,系统首先调用此方法,以执行初始化任务。
2、public void start()
start()方法是表明 Applet 程序开始执行的方法。当含有此 Applet 程序的 Web 页被再次访问时调用此方法。因此,如果每次访问 Web 页都需要执行一些操作的话,就需要在 Applet 程序中重载该方法。在 Applet 程序中,系统总是先调用 init() 方法,后调用 start() 方法
3、public void stop()
stop()方法使 Applet 停止执行,当含有该 Applet 的 Web 页被其他页代替时也要调用该方法。
4、public void destroy()
destroy()方法收回 Applet 程序的所有资源,即释放已分配给它的所有资源。在 Applet 程序中,系统总是先调用 stop() 方法,后调用destroy() 方法。

16、 下面的代码运行的结果是: B

在这里插入图片描述
A.Load B ->Create B->Load A -> Create A
B.Load B -> Load A ->Create B ->Create A
C.Load B -> Create B-> Create A -> Load A
D.Create B ->Create A ->Load B ->Load A

解析:

初始化块在构造器执行之前执行,类初始化阶段先执行最顶层父类的静态初始化块,依次向下执行,最后执行当前类的静态初始化块;创建对象时,先调用顶层父类的构造方法,依次向下执行,最后调用本类的构造方法。

17、在java中,无论在何处调用,使用静态属性必须以类名做前缀。(B)

A正确
B错误

解析:

1如果是本类使用,可以直接就用静态变量名。2如果是其他类使用,可以使用类名来调用,也可以创建一个实例对象来调用。3如果静态变量所在的类是静态类,那么不管在本类里或者在其他外部类,都可以直接使用静态变量名。

18、关于protected 修饰的成员变量,以下说法正确的是(A )

A可以被该类自身、与它在同一个包中的其它类、在其它包中的该类的子类所访问
B只能被该类本身和该类的所有的子类访问
C只能被该类自身所访问
D只能被同一个包中的类访问

解析:

1、protected访问控制符能被用于方法和成员变量。
2、声明为protected的方法和成员变量能被同一个包里的所有类所访问,就像默认修饰符package一样。
3、能被该类的子类所访问,子类可以和父类不在一个包中。

19、根据以下代码段,执行new Child(“John”, 10); 要使数据域data得到10,则子类空白处应该填写( )。在这里插入图片描述

A.data = d;
B.super.data = d;
C.Parent(d);
D.super(d);

解析:

1.super可以访问父类中public、default、protected修饰的成员变量,不能访问private修饰的成员变量。格式为super.成员名称。
2.super可以访问父类中public、default、protected修饰的实例方法,不能访问private修饰的实例方法。格式为super.实例方法。
3.super可以访问父类中public、default、protected修饰的构造方法,不能访问private修饰的构造方法,格式为super(参数).

20、以下哪个区域不属于新生代?©

A.eden区
B.from区
C.元数据区
D.to区

解析:

Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。
在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。
这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。

21、 创建一个标识有“关闭”标签的语句是 ( B ) 。

A.TextField b = new TextField(“关闭”);
B.Label b = new Label(“关闭”);
C.Checkbox b = new Checkbox(“关闭”);
D.Button b = new Button(“关闭”);

解析:

考查对AWT基本组件的了解。
选项A错误,创建的是一个初始显示为“关闭”的文本框:
选项B正确,创建的是一个标识有“关闭”的标签;
选项C错误,Checkbox为复选框类,只能设定是否含标签;
选项D错误,创建的是一个标记为“关闭”的按钮。

22、下列程序执行后输出结果为( )

在这里插入图片描述A.static BaseClass
I’m BaseClass class
static Base
I’m Base class
B.I’m BaseClass class
I’m Base class
static BaseClass
static Base
C.I’m BaseClass class
static BaseClass
I’m Base class
static Base
D.static BaseClass
static Base
I’m BaseClass class
I’m Base class

解析:

结果为:
父类静态代码块
子类静态代码块
父类非静态代码块
父类构造函数
子类非静态代码块
子类构造函数

23、 下列叙述中,错误的是(B )

A.File类能够存储文件属性
B.File类能够读写文件
C.File类能够建立文件
D.File类能够获取文件目录信息

解析:

File类能操作文件本身,但不能对文件内容进行修改

24、list是一个ArrayList的对象,哪个选项的代码填到//todo delete处,可以在Iterator遍历的过程中正确并安全的删除一个list中保存的对象?(A) 在这里插入图片描述

A.it.remove()
B.list.remove(obj);
C.list.remove(index);
D.list.remove(obj,index);

解析:

如果在循环的过程中调用集合的remove()方法,就会导致循环出错,例如:
for(int i=0;i<list.size();i++){
list.remove(…);
}
循环过程中list.size()的大小变化了,就导致了错误。
所以,如果你想在循环语句中删除集合中的某个元素,就要用迭代器iterator的remove()方法,因为它的remove()方法不仅会删除元素,还会维护一个标志,用来记录目前是不是可删除状态,例如,你不能连续两次调用它的remove()方法,调用之前至少有一次next()方法的调用。

25、 下列不正确的 Java 语言标识符是( C)

A.Sky
B.$Computer
C.for
D.NULL

解析:

Java标识符命名规范是:
1)只能包含字母a-zA-Z,数字0-9,下划线_和美元符号$;
2)首字母不能为数字;
3)关键字和保留字不能作为标识符。
null是关键字,NULL不是关键字,java区分大小写。这题答案D是对的,但C是错的,for是关键字。

26、 对于JVM内存配置参数:

-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3

其最小内存值和Survivor区总大小分别是(D)
A.5120m,1024m
B.5120m,2048m
C.10240m,1024m
D.10240m,2048m

解析:

-Xmx10240m:代表最大堆
-Xms10240m:代表最小堆
-Xmn5120m:代表新生代
-XXSurvivorRatio=3:代表Eden:Survivor = 3 根据Generation-Collection算法(目前大部分JVM采用的算法),一般根据对象的生存周期将堆内存分为若干不同的区域,一般情况将新生代分为Eden ,两块Survivor; 计算Survivor大小, Eden:Survivor = 3,总大小为5120,3x+x+x=5120 x=1024
新生代大部分要回收,采用Copying算法,快!
老年代 大部分不需要回收,采用Mark-Compact算法

27、 What is displayed when the following is executed;(A)

1.double d1=-0.5;
2.System.out.println(“Ceil d1=”+Math.ceil(d1));
3.System.out.println(“floor d1=”+Math.floor(d1));
A.Ceil d1=-0.0
floor d1=-1.0
B.Ceil d1=0.0
floor d1=-1.0
C.Ceil d1=-0.0
floor d1=-0.0
D.Ceil d1=0.0
floor d1=0.0
E.Ceil d1=0
floor d1=-1

解析:

这里主要是有一点:
Math.ceil(d1)
ceil 方法上有这么一段注释:If the argument value is less than zero but greater than -1.0, then the result is negative zero
如果参数小于0且大于-1.0,结果为 -0
Math.floor(d1)
ceil 和 floor 方法 上都有一句话:If the argument is NaN or an infinity or positive zero or negative zero, then the result is the same as the argument,意思为:如果参数是 NaN、无穷、正 0、负 0,那么结果与参数相同,
如果是 -0.0,那么其结果是 -0.0

28、以下哪几种是java的基本数据类型。(BC)

A.String
B.int
C.boolean
D.Double

解析:

基本数据类型:byte,short,int,long,double,float,boolean,char

29、在Java语言中,下列关于字符集编码(Character set encoding)和国际化(i18n)的问题,哪些是正确的?(CD)

A.每个中文字符占用2个字节,每个英文字符占用1个字节
B.假设数据库中的字符是以GBK编码的,那么显示数据库数据的网页也必须是GBK编码的。
C.Java的char类型,通常以UTF-16 Big Endian的方式保存一个字符。
D.实现国际化应用常用的手段是利用ResourceBundle类

解析:

java 采用双字节编码 用的是‘’utf-16be“ 中文占2字节,英文占2字节;
”utf-8“ 中文占3字节,英文占1字节;
”gbk“ 中文占2字节,英文占1字节;

30、 对 Map 的用法,正确的有:(CD)

A.new java.util.Map().put(“key” , “value”) ;
B.new java.util.SortedMap().put(“key” , “value”) ;
C.new java.util.HashMap().put( null , null ) ;
D.new java.util.TreeMap().put( 0 , null ) ;

解析:

Map和SortedMap是接口,不能直接new对象,A,B错误
HashMap 允许null-null键值对 C正确
TreeMap 允许value值为null,不允许key值为null,D是value为null,key不为null,正确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值