题目来自牛客网
1.在 JAVA 编程中, Java 编译器会将 Java 程序转换为( )
A.字节码
B.可执行代码
C.机器代码
D.以上都不对
选 A
Java编译器会将Java程序转换为字节码,这是一种中间代码,它可以在Java虚拟机(JVM)上运行。字节码不是直接针对任何特定的计算机硬件平台的机器代码,而是一种跨平台的、可移植的代码形式。Java虚拟机负责将字节码解释或编译成本地机器代码,然后在相应的操作系统上执行。因此,选项A是正确的。
2.下面关于垃圾收集的说法正确的是
A.一旦一个对象成为垃圾,就立刻被收集掉。
B.对象空间被收集掉之后,会执行该对象的finalize方法
C.finalize方法和C++的析构函数是完全一回事情
D.一个对象成为垃圾是因为不再有引用指着它,但是线程并非如此
在Java编程中,垃圾收集(Garbage Collection, GC)是自动管理内存的过程。当一个对象不再被任何引用指向时,它成为垃圾收集器的候选对象进行回收。然而,对象不会立即被回收,而是在垃圾收集器运行时才可能被清理。
选项A说"一旦一个对象成为垃圾,就立刻被收集掉"是错误的。对象在成为垃圾后,可能会在很长时间内都不被回收,这取决于垃圾收集器的工作时机和垃圾回收策略。
选项B说"对象空间被收集掉之后,会执行该对象的finalize方法"也是错误的。在Java中,当对象成为垃圾收集的候选对象时,并不一定会执行其
finalize
方法。finalize
方法是在垃圾收集过程中,在对象被回收之前可能被调用的方法,但它的调用是不确定的。选项C说"
finalize
方法和C++的析构函数是完全一回事情"是错误的。虽然finalize
方法和C++的析构函数在概念上有些相似,都是清理资源的机制,但它们在实现和行为上有所不同。finalize
方法是Java中的一种特殊方法,而C++的析构函数是C++语言的一部分。选项D说"一个对象成为垃圾是因为不再有引用指着它,但是线程并非如此"是正确的。当没有任何引用指向一个对象时,该对象就可能成为垃圾收集的目标。而线程的生命周期是由程序的控制流决定的,与垃圾收集机制无关。
因此,正确答案是D。
3.在java7中,下列不能做switch()的参数类型是?
A.int型
B.枚举类型
C.字符串
D.浮点型
在Java 7中,
switch
语句的参数类型被扩展了,除了支持基本数据类型如int
和char
,以及它们的包装类型之外,还支持String
类型和枚举类型。因此,在Java 7及以后的版本中,你可以使用String
类型和枚举类型作为switch
语句的参数。选项A(
int
型)和选项B(枚举类型)都是Java 7中支持的switch
语句参数类型。选项C(字符串)同样是Java 7中支持的类型。选项D(浮点型)是不能作为
switch
语句的参数类型的。在Java 7之前,switch
语句只能接受整型常量表达式作为参数,包括byte
、short
、char
和int
类型,以及它们的包装类型。从Java 7开始,虽然增加了对String
和枚举类型的支持,但仍然不支持浮点数类型(float
和double
)作为switch
语句的参数。因此,正确答案是D(浮点型)。
4.语句:char foo='中',是否正确?(假设源文件以GB2312编码存储,并且以javac -- encoding GB2312命令编译)
A.正确
B.错误
A.正确
在Java中,
char
类型是用来存储单个16位Unicode字符的数据类型。当源文件以GB2312编码存储时,只要确保在编译时指定了正确的编码(如使用javac -encoding GB2312
命令),那么使用中文字符(如'中'
)作为char
类型的字面量是完全合法的。Java虚拟机(JVM)内部会将这些中文字符映射到相应的Unicode码点。因此,声明char foo = '中';
是正确的,前提是编译时使用了正确的编码设置。
5.关于final说法正确的是? ( )
A.final类的方法肯定不能被同一个包的类访问
B.final类的方法能否被同一个包的类访问不是由final决定
C.final方法等同于private方法
D.final对象本身的引用和值都不能改变
选项B说"
final
类的方法能否被同一个包的类访问不是由final
决定"是正确的。final
类的方法可以被同一个包内的其他类访问,这与final
关键字的定义无关。