题目来自牛客网
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关键字的定义无关。