计算机二级Java考试笔记可以归纳如下:
一、基础语法
1. 标识符命名规范
-
标识符由字母、数字、下划线(_)、美元符号($)组成,不能以数字开头,不能是Java的关键字或保留字。
-
类名首字母大写,采用驼峰式命名法;方法名、变量名首字母小写,后续单词首字母大写。
1. 数据类型
- Java有8大基本数据类型:整数类型(byte、short、int、long)、小数类型(float、double)、字符类型(char)、布尔类型(boolean)。
- 数据类型之间存在自动类型转换和强制类型转换。
2. 操作符
- 算术运算符:+、-、*、/、%、++、--。
- 比较运算符:==、!=、>、<、>=、<=。
- 逻辑运算符:&&、||、!。
- 位运算符:&、|、^、~、<<、>>、>>>。
- 三目运算符:条件 ? 值1 : 值2。
二、流程控制
1. 顺序结构
- Java程序按照从上到下的顺序逐行执行。
2. 分支结构
- if-else语句:用于区间段判断。
- switch-case语句:用于定值判断,通常与break配合使用。
3. 循环结构
- while循环:先判断条件,再执行循环体,可能执行0次或多次。
- do-while循环:先执行循环体,再判断条件,至少执行一次。
- for循环:用于已知循环次数的场景。
- 增强型for循环(foreach循环):用于遍历数组或集合。
三、面向对象
1. 类与对象
- 类是对象的模板,具有相同的属性和行为的一系列事物可以统称为一个类。
- 对象是类的实例,通过new关键字创建。
2. 继承与多态
- 继承:一个类只能有一个直接父类,但一个父类可以有多个子类。Java支持单继承,但可以通过实现多个接口来实现多重继承的效果。
- 多态:指同一个接口或父类的引用类型可以指向不同的子类对象,从而实现不同的行为。Java中实现多态的三个必要条件是继承、重写和向上转型。
3. 封装、继承、多态的意义
- 封装:隐藏对象的属性和实现细节,仅对外提供公共方法访问。
- 继承:提高了代码的复用性,使得子类可以继承父类的属性和方法。
- 多态:提高了程序的灵活性和可扩展性,使得程序能够应对不同的需求变化。
4. 访问修饰符
- public:公共权限,可以被任何类访问。
- protected:受保护权限,可以被同一个包内的类以及不同包中的子类访问。
- default(不写):默认权限,只能被同一个包内的类访问。
- private:私有权限,只能被本类访问。
四、异常处理
1. try-catch语句
- 用于捕获并处理异常。try块中放置可能抛出异常的代码,catch块中处理异常。
1. 异常类型
- RuntimeException:运行时异常,如除数为0异常(ArithmeticException)、数组越界异常(IndexOutOfBoundsException)等。
- 非运行时异常:如IOException、FileNotFoundException等,需要在代码中显式捕获并处理。
五、常用类与接口
1. String类
- 表示字符串。提供了多种方法来操作字符串,如substring()、indexOf()、charAt()等。
2. 集合框架
- Java提供了丰富的集合类,如List、Set、Map等。这些集合类提供了存储和操作大量数据的方法。
3. IO流
- Java的IO流用于读写数据。按照数据的传输单位,可以分为字节流(InputStream/OutputStream)和字符流(Reader/Writer)。
4. 多线程
- Java支持多线程编程。线程是程序中的执行单元,可以并发执行。Java提供了Thread类和Runnable接口来实现多线程。
六、软件测试与维护
1. 软件测试
- 软件测试的目的是为了发现错误而执行程序的过程。常见的软件测试方法包括单元测试、集成测试、确认测试和系统测试。
2. 软件维护
- 软件维护是指在软件生命周期内,对软件产品进行修改、完善以适应环境变化和用户新的需求的活动。包括改正性维护、适应性维护、完善性维护和预防性维护。
七、真题类型整理
1. 排序算法比较
以下用更通俗易懂的方式来解释这些算法时间复杂度:
O(1)
就像你有一个抽屉,抽屉里放着各种物品,不管抽屉里物品数量是多还是少,你要拿抽屉里固定位置的一支笔,每次拿的时间都是差不多的,不会因为抽屉里物品总数变化而改变拿笔的时间,这就是常数时间复杂度。不管数据规模(这里可以理解为抽屉里物品数量)怎么变,操作花费时间基本恒定。
O(logn)
想象你在玩猜数字游戏,数字范围是 1 - 100,你每次猜完,对方会告诉你数字是大了还是小了。你每次都能把范围缩小一半。如果数字范围扩大到 1 - 1000、1 - 10000,虽然范围变大了,但你猜的次数增长得并不快,这就是对数时间复杂度。数据规模 增大,操作次数增长比较缓慢。
O(n)
假设你要检查一排学生的作业有没有做完,你得一个一个挨着看,学生越多(数据规模 越大),你检查完所有学生作业花的时间就越长,而且时间增长和学生数量是成正比的,这就是线性时间复杂度。
O(nlogn)
以归并排序为例,它把数据不断分成两半来处理,然后再合并。虽然分和合并过程涉及到对数级别的操作,但因为有 个数据都要参与这个过程,整体复杂度就是 乘以 。它比线性复杂度要复杂一些,但比平方复杂度性能好很多。
比如冒泡排序,有一堆数字要排序,你要反复比较相邻的数字,每次比较都像在一个数字队伍里从头到尾走一遍。如果数字数量翻倍,比较的次数会变成原来的四倍左右。因为有两层循环,每一层都和数据规模 相关,所以时间复杂度是 的平方。
假如你要在一个三维数组里找满足特定条件的元素,可能需要三层循环去遍历这个三维数组,每一层循环都和数据规模 有关,随着 增大,操作次数增长得非常快,就是立方时间复杂度。
比如有 个物品,你要找出所有可能的选择组合(选或者不选每个物品),当物品数量增加时,组合数量呈指数级增长。比如 2 个物品有 种组合,3 个物品有 种组合,随着 增大,计算量会急剧膨胀。
假设有 个人要排成一排拍照,第一个位置有 种选择,第二个位置有 种选择,以此类推,总的排列方式就是 种。随着人数 增加,排列方式数量增长超级快,这是非常高的复杂度。
以上内容涵盖了计算机二级Java考试的主要知识点,考生可以根据这些笔记进行复习和备考。同时,建议多做真题来巩固所学知识,并注重理解代码的逻辑和算法的思想。