Java编程选择题集锦:挑战偏门知识点

需积分: 9 1 下载量 61 浏览量 更新于2024-09-12 收藏 551KB PDF 举报
"这是一份关于Java编程的学习资料,包含了一些可能在学习过程中不太常见但重要的选择题习题,旨在帮助提高对Java语言的理解。" 在这些Java习题中,我们可以提取以下几个关键知识点: 1. **有效标识符**: - 在Java中,标识符是用来命名变量、类、方法等的。题目中的`IDoLikeTheLongNameClass`, `_ok`是合法的Java标识符,因为它们遵循了Java的命名规则:以字母、下划线或美元符号开头,后续可以是字母、数字、下划线或美元符号。而`$byte`和`const`不是有效的Java标识符,因为`$`虽然可以用于标识符,但在常量名中通常不推荐使用,且`const`在Java中是保留关键字,不能用于变量或类名。至于`3_case`,它以数字开头,所以也是非法的。 2. **垃圾收集**: - Java的垃圾收集是自动进行的,用于回收不再使用的对象所占用的内存。强制执行垃圾收集可以通过调用`System.gc()`,但这并不保证立即回收特定对象。选项B正确描述了如何尝试触发垃圾收集,但A选项强调了垃圾收集无法被强制执行是不正确的。C和D选项错误地试图传递参数给`gc()`方法,而E选项通过设置所有对象引用为null,确实可以间接促使对象变得可回收,但不是直接强制垃圾收集。 3. **方法重载与覆盖**: - 题目中的代码展示了方法重载,即在一个类中有两个同名但参数列表不同的方法。第5行定义了一个接受int参数的方法,第11行定义了一个接受String参数的方法。在第12行,代码尝试使用字符变量调用`test()`方法。由于Java会自动将字符转换为整数,所以这里实际上是在调用接受int参数的方法,因此D选项描述的代码将编译并输出"I am an int.",而B和C选项关于编译错误和运行时异常的陈述是错误的。A选项关于void方法不能被覆盖的陈述也与问题无关,因为这里涉及的是方法重载而非覆盖。 4. **类型转换与方法调用**: - 当一个字符被用作方法参数时,Java会将其转换为对应的ASCII值。因此,`t.test(ch)`实际上相当于`t.test((int)ch)`,由于没有接受char参数的方法,Java会查找能接受int参数的方法,这导致了`test(int i)`被调用,而不是期望的`test(String s)`。因此,代码将编译并输出"I am an int.",选项D正确,而E选项的输出"I am a String."是错误的。 通过这些习题,学习者可以更好地理解Java的标识符规则、垃圾收集机制、方法重载和类型转换等核心概念。