### OCA考试大纲
#### Java Basics 基础
- Define the scope of variables 定义变量的作用范围
- Define the structure of a Java class 定义一个 Java 类的结构
- Create executable Java applications with a main method; run a Java program from the command line; produce console output 创建包含一个 main 方法的可执行 Java 应用程序;从命令行运行一个 Java 程序;产生控制台输出
- Import other Java packages to make them accessible in your code 导入其他 Java 包使其可在你的代码中使用
- Compare and contrast the features and components of Java such as: platform independence, object orientation, encapsulation, etc. 比较和对比 Java 的特性和组件,例如:平台独立性,面向对象,封装等
#### Using Operators and Decision Constructs 使用操作符和条件判断结构
- Use Java operators; use parentheses to override operator precedence 使用操作符;使用括号覆盖操作符优先级
- Test equality between Strings and other objects using `==` and `equals ()` 使用 `==` 和 `equals()` 检查字符串和其他对象之间的相等性
- Create if and if/else and ternary constructs 创建 if 和 if/else 已经三元(条件)结构
- Use a switch statement 使用 switch 语句
#### Using Loop Constructs 使用循环结构
- Create and use `while` loops 创建并使用 while 循环
- Create and use `for` loops including the enhanced for loop 创建并使用 for 循环,包括增强版 for 循环
- Create and use do/while loops 创建并使用do/while 循环
- Compare loop constructs 比较循环结构
- Use `break` and `continue` 使用 break 和 continue
#### Working with Inheritance 使用继承
- Describe inheritance and its benefits 描述继承及其好处
- Develop code that makes use of polymorphism; develop code that overrides methods; differentiate between the type of a reference and the type of an object 开发应用到了多态的代码;开发重写方法的代码;区分引用的类型和对象的类型
- Determine when casting is necessary 确定何时类型转换时必要的
- Use `super` and `this` to access objects and constructors 使用 super 和 this 访问对象和构造方法
- Use abstract classes and interfaces 使用抽象类和接口
#### Working with Selected classes from the Java API 使用从 Java API 中选择的类
- Manipulate data using the `StringBuilder` class and its methods 使用 StringBuilder 类及其方法去操作数据
- Create and manipulate Strings 创建并操作字符串
- Create and manipulate calendar data using classes from `java.time.LocalDateTime`, `java.time.LocalDate`, `java.time.LocalTime`,`java.time.format.DateTimeFormatter`, `java.time.Period` 创建并操纵日历数据,使用这些类:`java.time.LocalDateTime`, `java.time.LocalDate`, `java.time.LocalTime`,`java.time.format.DateTimeFormatter`, `java.time.Period`
- Declare and use an `ArrayList` of a given type 声明并使用某个类型的 `ArrayList`
- Write a simple Lambda expression that consumes a Lambda Predicate expression 编写一个简单的 Lambda 表达式,要求一个 Lambda Predicate 表达式
#### Working With Java Data Types 使用 Java 数据类型
- Declare and initialize variables (including casting of primitive data types) 声明并初始化变量(包括原始数据类型的转换)
- Differentiate between object reference variables and primitive variables 区分对象引用变量和原始变量
- Know how to read or write to object fields 知道如何读或写对象字段
- Explain an Object's Lifecycle (creation, "dereference by reassignment" and garbage collection) 解释一个对象的生命周期(创建,“重新赋值解引用” 和垃圾回收)
- Develop code that uses wrapper classes such as `Boolean`, `Double`, and `Integer` 开发使用封装类的代码,例如 Boolean, Double 和 Integer
#### Creating and Using Arrays 创建并使用数组
- Declare, instantiate, initialize and use a one-dimensional array 声明,实例化,初始化以及使用一维数组
- Declare, instantiate, initialize and use multi-dimensional arrays 声明,实例化,初始化以及使用多维数组
#### Working with Methods and Encapsulation 使用方法和封装
- Create methods with arguments and return values; including overloaded methods 创建带参数和返回值的方法
- Apply the `static` keyword to methods and fields 在方法和字段应用 static 关键字
- Create and overload constructors; differentiate between default and user defined constructors 创建并重载构造方法;区分默认和用户定义构造方法
- Apply access modifiers 应用访问修饰符
- Apply encapsulation principles to a class 对类应用封装原则
- Determine the effect upon object references and primitive values when they are passed into methods that change the values 确定对象引用和原始变量传递到会改变值的方法时的效果 (考察引用传递还是值传递)
#### Handling Exceptions 处理异常
- Differentiate among checked exceptions, unchecked exceptions, and Errors 区分检查异常,非检查异常以及错误
- Create a try-catch block and determine how exceptions alter normal program flow 创建一个 try-catch 语句块并确定异常时如何改变正常的程序控制流的
- Describe the advantages of Exception handling 描述异常处理的优点
- Create and invoke a method that throws an exception 创建并调用一个会抛出异常的方法
- Recognize common exception classes (such as `NullPointerException`, `ArithmeticException`, `ArrayIndexOutOfBoundsException`, `ClassCastException`) 识别常见的异常类(例如 空指针异常,算术异常,数组越界异常,类型转换异常)
#### Assume the following: 默认以下情况:
- **Missing package and import statements:** If sample code do not include package or import statements, and the question does not explicitly refer to these missing statements, then assume that all sample code is in the same package, or import statements exist to support them.
**缺失的包和导入语句:**如果示例代码没有包含包或导入语句,并且问题没有明示这些缺失的语句,那么认为所有的示例代码是在同一个包,或者存在导入它们的导入语句。
- No file or directory path names for classes:
类没有文件名或者目录路径名:
If a question does not state the file names or directory locations of classes, then assume one of the following, whichever will enable the code to compile and run:
如果问题没有提及到类的文件名或者目录位置,那么假设以下几点,能让代码编译并运行即可:
- All classes are in one file 所有类是在同一个文件
- Each class is contained in a separate file, and all files are in one directory
每个类分别存在与不同的文件,并且所有文件都在同一个目录
- **Unintended line breaks:** Sample code might have unintended line breaks. If you see a line of code that looks like it has wrapped, and this creates a situation where the wrapping is significant (for example, a quoted String literal has wrapped), assume that the wrapping is an extension of the same line, and the line does not contain a hard carriage return that would cause a compilation failure.
**意外的换行:**示例代码可能由非预期的换行。如果你看到一行代码看起来软换行了,并且它造成了一个情形,换行的影响是重要的(例如,一个双引号括起来的字符串常量换行了),假设那个换行是同一行的延申,且该行不包含导致编译失败的硬回车换行。
- **Code fragments:** A code fragment is a small section of source code that is presented without its context. Assume that all necessary supporting code exists and that the supporting environment fully supports the correct compilation and execution of the code shown and its omitted environment.
**代码片段:**一个代码片段是不带有上下文出现的一小节代码片段。假设所有必要的支持代码存在并且支持的环境能保证呈现的代码片段及其省略的部分能够正确执行。
- **Descriptive comments:** Take descriptive comments, such as "setter and getters go here," at face value. Assume that correct code exists, compiles, and runs successfully to create the described effect.
**描述性注释:**将描述性注释,例如“setter 和 getters 在这里” 按字面意思理解。假设正确的代码存在,编译、运行成功产生所描述的效果。
- 0.考试大纲解读
- 1.内容简介与环境搭建
- 1.1内容简介
- 1.2.在Windows安装JDK8
- 2.Java基础
- 2.1.Java类结构
- 2.2.main方法
- 2.3.注释
- 2.4.package与import
- 2.5.命名冲突与代码格式
- 2.6.静态导入
- 2.7.理解原始数据类型
- 2.8.整数型原始类型
- 2.9.小数型原始类型
- 2.10.原始char与boolean
- 2.11.声明和初始化变量
- 2.12.理解原始类型变量的默认初始化
- 2.13.变量作用范围
- 2.14.类里面元素的顺序
- 2.15.理解null
- 2.16.原始类型的包装类
- 2.17.Java的好处
- 2.18.考试题目举例
- 3.操作符
- 3.1.理解操作符
- 3.2.算术操作符
- 3.3.数值类型提升以及类型转换
- 3.4.一元操作符第一部分
- 3.5.一元操作符第二部分
- 3.6.赋值运算符
- 3.7.复合赋值运算符
- 3.8.关系操作符
- 3.9.关系操作符
- 3.10.相等操作符
- 3.11.理解 == 与 equals()方法
- 3.12.字符算术运算
- 3.13.考试题目举例
- 4.基本程序控制流
- 4.1.if else语句
- 4.2.三元操作符
- 4.3.switch语句
- 4.4.while循环
- 4.5.do-while循环
- 4.6.for循环
- 4.7.考试题目举例
- 5.理解字符串类型
- 5.1.创建字符串以及字符串连接
- 5.2.理解不可变性
- 5.3.字符串常量池和字符串相等
- 5.4.String类的方法第一部分
- 5.5.String类的方法第二部分
- 5.6.方法串联
- 5.7.使用StringBuilder类
- 5.8.StringBuilder类的方法
- 5.9.理解相等性
- 5.10.考试题目举例
- 6.数组
- 6.1.理解数组
- 6.2.使用数组
- 6.3.数组常见的问题
- 6.4.For-each循环
- 6.5.break语句和标签
- 6.6.continue语句
- 6.7.数据排序
- 6.8.搜索数组
- 6.9.可变数量参数
- 6.10多维数组
- 6.11嵌套循环
- 6.12考试题目举例
- 7.ArrayList
- 7.1.理解ArrayList
- 7.2.ArrayList的方法第一部分
- 7.3.ArrayList的方法第二部分
- 7.4.在ArrayList使用包装类
- 7.5.ArrayList与数组之间的转换
- 7.6.ArrayList元素排序
- 7.7.搜索ArrayList
- 7.8.遍历List第一部分
- 7.9.遍历List第二部分
- 7.10.考试题目举例
- 8.方法
- 8.1.设计一个方法
- 8.2.方法的返回类型
- 8.3.方法的参数列表
- 8.4.带有数量可变参数的方法
- 8.5.访问修饰符
- 8.6.静态方法和字段
- 8.7.使用静态方法和字段第一部分
- 8.8.使用静态方法和字段第二部分
- 8.9.final方法
- 8.10.静态初始化
- 8.11.在方法之间传输数据
- 8.12.方法的返回数据
- 8.13.重载方法
- 8.14.考试题目举例
- 9.类设计
- 9.1.类的构造函数
- 9.2.默认构造函数
- 9.3.构造方法重载
- 9.4.this 与 this()的区别
- 9.5.初始化的顺序
- 9.6.数据封装
- 9.7.不可变类
- 9.8.类与继承第一部分
- 9.9.类与继承第二部分
- 9.10方法重写
- 9.11.super 与 super()的区别
- 9.12.重载与重写的区别
- 9.13.抽象类
- 9.14.抽象方法
- 9.15.创建接口
- 9.16.实现接口
- 9.17.接口的默认方法
- 9.18.接口的静态方法
- 9.19.抽象类与接口的区别
- 9.20.多态
- 9.21.虚方法
- 9.22.参数多态
- 9.23.考试题目举例
- 10.Java 8的日期和时间API
- 10.1.创建日期与时间
- 10.2.使用日期与时间
- 10.3.Periods
- 10.4.格式化日期和时间
- 10.5.解释日期和时间
- 10.6.考试题目举例
- 11.异常处理
- 11.1.理解异常处理
- 11.2.Checked 与 Unchecked 异常的区别
- 11.3.处理异常
- 11.4.使用finally语句块
- 11.5.捕获不同的异常
- 11.6.return 和 finally块
- 11.7.抛出异常的方法
- 11.8.考试题目举例
- 12.简单的Lambda表达式
- 12.1.理解Lambda
- 12.2.使用Lambda
- 12.3.Predicates
- 12.4.考试问题举例
- 13.福利
- 13.1.Anki记忆卡片