"这是一份Java笔试题目集,包含了核心Java和PLSQL的相关问题,旨在帮助面试者做好充分准备。"
在这份Java笔试题目中,我们可以看到几个关于Java语法和程序执行逻辑的问题,以下是这些问题的详细解答:
1. **合法标识符的声明**
A. `$persons` - 合法,因为Java允许美元符号开头的标识符(虽然不常见)。
B. `TwoUsers` - 合法,遵循驼峰命名法,可以作为类名。
C. `*point` - 不合法,星号(*)不是合法的标识符首字符。
D. `this` - 合法,但它是Java中的一个关键字,通常用于引用当前对象。
E. `endline` - 合法,遵循驼峰命名法,可以作为变量名。
2. **在“//pointx”处的语法有效语句**
A. `i=m;` - 没有声明,不合法,因为在该位置m没有被声明。
B. `i=b;` - 静态方法中不能使用类中的非静态成员,因此不合法。
C. `i=p.a;` - 私有变量`a`不能被外部类访问,所以不合法。
D. `i=p.change(30);` - 合法,因为`change()`方法是公共的,可以在子类实例上调用。
3. **编译和运行代码的结果**
给定的代码中,`x`和`y`在类级别上声明为静态,但`x`在静态初始化块中赋值。`myMethod()`内的`y`值计算会因为后置递增操作符而变得复杂。
在`main()`方法中,`x--`后,`x`为4。`myMethod()`调用会改变`y`的值,但由于递增操作的顺序,具体结果取决于编译器如何解析`x+++++x`。大多数编译器会先进行两个自增操作,再进行赋值,因此`y`将变为10。然后`System.out.println`打印`x+y+++x`时,`y`已经改变,但`x`在递减后未再次改变,所以`x`仍然是4。因此,打印结果取决于`x+y`的计算顺序,但不会是1、2或3。正确答案可能是E. `print7`或F. `print8`,具体依赖于编译器的行为。
4. **给定代码的输出**
这段代码涉及了类`Value`和`Test`以及它们之间的交互。在`Test`的`main`方法中,`first()`被调用,`first()`创建了一个`Value`对象并改变了其`i`值,然后调用了`second()`方法,并传入了`Value`对象和一个局部变量`i`。
在`second()`方法中,`v.i`(`Value`的`i`)被赋值为`v.i`加上`x`两次递增后的值,即`25 + (5 + 1)`。`v.i`现在为31。回到`main`方法,`System.out.println`打印`v.i`(31)和`i`(5),但由于`i`在`first()`方法中是局部变量,在`main`方法中没有定义,编译时会有错误。因此,这段代码无法编译通过,更不用说输出任何结果。
这些题目考察了Java的基础知识,包括标识符的规则、方法调用、访问控制、静态与非静态成员的使用,以及运算符的优先级和副作用。通过解答这些问题,面试者可以检验自己的Java编程基础是否牢固。