Day11 总复习
1 程序基础
1.1 数据类型
数据类型的本质 :规定占用内存空间的大小,限制数据的格式类型
数据类型包括 :
基本数据类型和引用数据类型
基本数据类型包括 整型 浮点型 字符型 布尔型
整型包括int byte short long;
浮点型包括 float(单浮点32位) double(双浮点64位);
字符型 char;
布尔型 boolean;
引用数据类型包括 类 数组 接口
ASCII码 : 字符和整数之间的映射
a = 97 ; A = 65 ; 0 = 48…….
自动类型转换 :
Byte ->short -> int -> long -> float -> double
char ->int ->long -> float ->double
注意 :
当byte,short,char,int四种类型中,任意一种或多种进行运算,结果都是int
1.2 变量
定义 :可变的量,方便对空间中的数据进行操作
声明 :数据类型 变量名 = 值;
int i1 = 0;
Byte b1 = 0;
Short s1 = 10;
Long l1 = 10L;
Char c1 = ‘c’;
Double d1 = 2.2;
Float f1 = 1.2F;
Boolean b1 = true;
分类 :
局部变量 :方法中声明的变量,只能在当前方法中使用,没有默认值,作用域就是一个大括号
静态变量 :使用Static修饰的变量,和方法是平级关系
成员变量 :没有使用static修饰的变量
调用 :
局部变量 :在方法中直接通过名字调用该变量,没有默认值,必须赋值
静态变量 :通过 类名.静态变量名 调用,当前类中调用当前类的静态变量,类名可以省略
成员变量 :类体中通过 对象引用.成员变量 调用
默认值 : 整数 0 ;小数 0.0 ; 布尔型 false ; 字符型 \u0000 ; 引用类型默认null
1.3运算符
i++ : 先赋值,再加一
++i : 先加一,再赋值
运算符优先级 :
位运算符 :
& 位与,两边都为真才是真,不管第一个条件是否为false,第二个条件依然会执行
&& 短路与,假如第一个条件为false,则第二个条件不执行
| : 或,两边一个为真 结果就为真,不管第一个条件为false还是true,第二个条件都执行
|| : 短路或,如果第一个条件就为true,则第二个条件不再执行
1.4流程控制
顺序结构 :
严格从上到下,从左到右
分支结构 :
通过指定的判断条件,选择性执行不同的分支
If…else…. :
单分支 :有不执行的情况
If(布尔型表达式){
为真时执行的代码
}
双分支 :一定有一个分支执行
If(布尔型表达式){
为真时执行的代码
}else{
为假时执行的代码
}
Switch
语法 :
Switch(值){
Case 值;
Break;
}
1.5 循环结构
循环就是重复执行很多次代码
For循环
for(表达式1,表达式2,表达式3){
循环体
}
三要素 : 起始值,终止条件,步长
While循环
while(布尔型){
循环体
}
Break : 可以用在switch中,结束case分支,防止case穿透
也可以用在循环中,结束当前循环
Continue : 跳过当前次循环,继续下次
1.6 方法
方法就是很多条语句的集合,代码放到方法中,可以多次使用,目的是代码复用,使程序更加简短清晰,提高开发效率
声明 :
修饰符列表 返回值类型 方法名(参数列表){方法体}
分类 :
静态方法:使用static修饰的方法
成员方法:没有static修饰的方法
构造方法:修饰符 方法名(),连void也没有
调用 :
静态方法:类名.静态方法名(参数)
成员方法:对象引用.成员方法名(参数)
方法不调用不执行,调用才执行
1.7 内存划分
静态区/方法区 :
保存程序文件(class文件) 以及静态数据,方法被调用之前,也保存在静态区,内部还有运行时常量池
VM栈 : 又叫栈内存
栈内存是以栈数据结构为模型开辟的一段空间, 特性是先进后出
栈 : 是一种数据结构,先进后出,像弹夹
栈的构成因素
栈空间 : 栈内存就是栈空间
栈帧: 栈空间中的每一个栈元素 就叫栈帧(比如 弹夹中的每一个子弹 就叫栈帧)
栈底元素 : 第一个放进去的栈帧
栈顶元素 : 最后一个放进去的栈帧
栈操作
压栈 : 就是指把元素放入栈空间的过程
弹栈 : 就是把元素弹出去的过程
栈内存,是用来执行方法的,所有方法的执行,必须在栈内存进行
本地方法栈 :
用来执行一些本地方法,比如hashCode 等 , 模型和操作都和VM栈一致
堆内存 : 用来保存对象
1.8 递归
递归就是方法中调用当前方法
2 数组
数组是引用数据类型,用来保存多个数据
2.1 数据结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关
数据操作 : 增删改查
2.2 数组
特性 :
连续存储,下标从0开始,采用内存地址偏移
长度一旦确定不可更改
添加删除操作时,应新建一个数组,将需要的值复制进新数组
查询更改效率极高
声明 :
静态声明:在已知每个元素的时候,使用静态声明
数据类型[] 变量名 = {值,值};
数据类型[] 变量名 = new 数据类型{值};
动态声明:在不知每个元素的时候,使用动态声明
数据类型[] 变量名 = new 数据类型{长度};
存储方式 :
使用 :
查询 : 数组[下标]
更改 : 数组[下标]=值
排序 :
API : Arrays.sort(数组);
冒泡 : 两两比较,大于交换位置
选择 : 假设第一个是最小的,和后面依次比较,大于交换下标交换数值
二分查找 :
定义起始位置,结束位置,中间位置
如果目标大于中间 则 结束不变 起始=中间+1
如果目标小于中间 则 起始不变 结束=中间-1
重新生成中间位置
起始大于结束终止
二维数组 :
静态声明 :int[][] arr = {{数值};};
动态声明 :int[][] arr = new int[5][];
3 面向对象
3.1 面向对象和面向过程
面向对象是软件开发方法,一种编程范式。面向对象的概念已经超越了程序设计和软件开发,扩展到如数据库、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
面向过程 : 侧重分步骤
比如要做一件事的时候,先进行分析
第一步应该做什么
第二步应该做什么
面向对象 : 侧重分模块
比如要做一件事的时候,分析出这件事应该交给谁去做
总结 :
面向有对象优势 : 可扩展性,可维护性,灵活性,使程序耦合度降低
缺点 : 性能比面向过程相对较差
3.2 类和对象
类 : 描述这一类事物的属性和特征,进行抽象出的模板
对象 : 就是某一个具体的事物
对象是类的实现,保存了属性的值
如果对象和对象之间 有相同的属性相同的值,使用静态变量
如果对象和对象之间 有相同的属性不同的值(也可以相同),使用成员变量
3.3 构造方法
构造方法是每个类都有的,用于创建该类的对象,默认有一个无参构造
语法 :
修饰符 类名(参数列表){方法体}
不能使用static,没有返回值,连void都没有
3.4 实例化
1 加载对应的类文件
2 new在堆内存创建空间
3 执行构造方法,对堆内存对象进行初始化
4 构造方法弹栈,并把堆内存地址返回给变量
3.5 调用
对象调用静态属性
1 可以使用类名直接调用
2 可以使用对象进行调用,因为在编译阶段会把对象转换为类名调用
静态调用成员 :
静态方法中,无法直接使用非静态属性,需要使用对象调用才可以调用
区分成员方法和构造方法 :
没有返回值的是构造方法,连void都没有,有返回值的是成员方法
3.6 This
定义 :
是每个对象中,保存自身地址的一个引用型变量 this就表示当前对象
功能 :
1 在成员方法或者构造方法中,区分同名的成员变量和局部变量
2 用在构造方法中,重载调用当前类中其它构造方法,但是必须写在构造方法第一行
3 return this 返回当前对象的内存地址,可以链式调用
注意 :
This不能出现在静态上下文
3.7 封装
把所有组成部分组合到一起,还可以通过权限控制修饰符将数据隐藏起来,可以控制用户对类数据的修改程度
适当的封装可以让代码更容易理解,易于维护,更提高了代码的安全性
Package
软件包机制,主要解决了命名冲突问题
Import
用于把当前类中需要的其他类载入,必须在class之上,package语句之下
3.8 权限控制
3.9 继承
定义 :
已有的类中,派生出新的类,新的类用于父类的属性和行为
目的 :
代码复用,提高效率
语法 :
class 类名 extends 父类名 {类体 }
Super :
代表了父类的特征,用在成员方法和构造方法中区分父子类之间同名的方法和变量super.xxx
还可以用在子类方法中,调用指定的父类构造方法super(xxx),必须出现在子类构造方法第一行
3.10 覆写
覆写特指成员方法,当父类功能无法满足子类需求时,进行覆写
定义 :
写一个和父类一样的方法,但是功能不同
规则 :
1 方法名,返回值,参数列表 必须和父类一致
2 不能比原方法拥有更低的访问权限
3 不能比原方法拥有更宽泛的异常