SCJP Braindump SCJP 题库 SCJP 考题
### SCJP知识点解析 #### SCJP概述 - **SCJP**(Sun Certified Programmer for the Java Platform)是一项由Sun Microsystems提供、旨在验证Java程序员对Java语言掌握程度的专业认证。 - SCJP考试覆盖了Java编程的核心概念和技术,包括但不限于类的设计、异常处理、线程管理、集合框架等。 #### SCJP轻松过 - 学习指南与题库分析 ### 代码示例解析 #### 示例1: 类继承与方法重写 ```java class Super { public float getNum() { return 3.0f; } } public class Sub extends Super { // Which method, placed at line 6, will cause a compiler error? // A. public float getNum() { return 4.0f; } // B. public void getNum() {} // C. public void getNum(double d) {} // D. public double getNum(float d) { return 4.0d; } } ``` - **答案解析:** - **选项A** 不会导致编译错误,因为它是对`Super`类中的`getNum()`方法的有效重写。 - **选项B** 将导致编译错误,因为方法签名不匹配,无法实现有效重写。 - **选项C** 同样将导致编译错误,原因是方法签名不同,无法实现重写。 - **选项D** 也将导致编译错误,原因是返回类型不一致。 **结论:** 正确答案为B、C、D。 #### 示例2: `finally` 块执行 ```java public class Foo { public static void main(String[] args) { try { return; } finally { System.out.println("Finally"); } } } ``` - **问题:** 运行结果是什么? - **答案解析:** - `finally`块在方法返回之前总是被执行。 - 因此,尽管`return`语句试图结束方法执行,但`finally`块仍然会被执行。 - 结果是输出“Finally”。 **结论:** 正确答案为B(打印出"Finally")。 #### 示例3: 数组索引越界异常 ```java public class Test { public static void main(String[] args) { String foo = args[1]; String bar = args[2]; String baz = args[3]; } } // java Test Red Green Blue ``` - **问题:** `baz`的值是什么? - **答案解析:** - 当调用`java Test Red Green Blue`时,`args`数组包含四个元素:`["Red", "Green", "Blue"]`。 - `baz`被赋值为`args[3]`,但由于数组下标从0开始,实际上不存在`args[3]`元素。 - 这将导致程序抛出`ArrayIndexOutOfBoundsException`异常。 **结论:** 正确答案为G(程序抛出`ArrayIndexOutOfBoundsException`异常)。 #### 示例4: 线程同步 ```java public class SychTest { private int x; private int y; public synchronized void setXY(int i) { setX(i); setY(i); } public synchronized boolean check() { return x != y; } } ``` - **问题:** 在何种情况下`check()`会返回`true`? - **答案解析:** - 如果`setXY`方法被多个线程调用,并且在某个时刻一个线程正在执行`setX`而另一个线程正在执行`setY`,则有可能在某个瞬间`x`和`y`的值不相等。 - `SychTest`类中的`setX`和`setY`方法没有被声明为`synchronized`,因此它们可以在不同的线程中并发执行。 **结论:** 正确答案为C(当多个线程分别调用`setX`和`setY`时,`check()`可能会返回`true`)。 #### 示例5: StringBuffer操作 ```java public class Foo { public static void main(String[] args) { StringBuffer a = new StringBuffer("A"); StringBuffer b = new StringBuffer("B"); operate(a, b); System.out.println(a + "," + b); } static void operate(StringBuffer x, StringBuffer y) { y.append(x); y = x; } } ``` - **问题:** 打印什么? - **答案解析:** - 方法`operate`中,`y.append(x)`使得`y`变为`AB`。 - 接下来的`y = x`只是改变了局部变量`y`的引用,不会影响到外部的`b`。 - 因此,最终打印的结果是`A,AB`。 **结论:** 正确答案为F(打印“A,AB”)。 #### 示例6: 线程安全 ```java public class X implements Runnable { private int x; private int y; public static void main(String[] args) { X that = new X(); (new Thread(that)).start(); (new Thread(that)).start(); } public synchronized void run() { for (;;) { x++; y++; System.out.println("x=" + x + ",y=" + y); } } } ``` - **问题:** 运行结果如何? - **答案解析:** - 类`X`实现了`Runnable`接口,并且其`run`方法被声明为`synchronized`,这意味着在同一时间只有一个线程可以执行该方法。 - 创建两个线程并启动它们,这两个线程共享同一个`X`对象实例。 - 由于`run`方法是同步的,两个线程将交替执行`run`方法。 - 输出将是`x`和`y`每次递增后的值,每次一个线程执行`run`方法时都会使`x`和`y`增加1。 **结论:** 输出将显示`x`和`y`每次递增后的值,由于同步机制,两个线程将依次更新这些值。
剩余28页未读,继续阅读
- 粉丝: 0
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- lanchaoHunanHoutaiQiantai
- (177377030)Python 爬虫.zip
- (177537818)python爬虫基础知识及爬虫实例.zip
- 自动驾驶横纵向耦合控制-复现Apollo横纵向控制 基于动力学误差模型,使用mpc算法,一个控制器同时控制横向和纵向,实现横纵向耦合控制 matlab与simulink联合仿真,纵向控制已经做好油门刹
- (178199432)C++实现STL容器之List
- (178112810)基于ssm+vue餐厅点餐系统.zip
- 两相步进电机FOC矢量控制Simulink仿真模型 1.采用针对两相步进电机的SVPWM控制算法,实现FOC矢量控制,DQ轴解耦控制~ 2.转速电流双闭环控制,电流环采用PI控制,转速环分别采用PI和
- VMware虚拟机USB驱动
- Halcon手眼标定简介(1)
- (175128050)c&c++课程设计-图书管理系统