diff --git a/尹顺宇10.29作业/尹顺宇10.29夺宝奇兵之超级云脑部分学习.docx b/尹顺宇10.29作业/尹顺宇10.29夺宝奇兵之超级云脑部分学习.docx deleted file mode 100644 index a9337bc..0000000 Binary files a/尹顺宇10.29作业/尹顺宇10.29夺宝奇兵之超级云脑部分学习.docx and /dev/null differ diff --git a/尹顺宇10.29作业/尹顺宇10.29学习笔记.md b/尹顺宇10.29作业/尹顺宇10.29学习笔记.md deleted file mode 100644 index b285970..0000000 --- a/尹顺宇10.29作业/尹顺宇10.29学习笔记.md +++ /dev/null @@ -1,528 +0,0 @@ -# 10.29MySQL学习笔记 - -## 1.分类 - -- DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段) -- DML: 数据操作语言,用来对数据库表中的数据进行增删改 -- DQL: 数据查询语言,用来查询数据库中表的记录 -- DCL: 数据控制语言,用来创建数据库用户、控制数据库的控制权限 - -## 2.数据库操作 - -### 2.1查看数据库 - -```java -# 查看所有的数据库 -mysql> SHOW DATABASES; -``` - - - -## 3.表操作(DDL) - -DDL是对表的结构进行操作 - -### 3.1数据类型 - -#### 3.1.1 数值 - -| 类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 | -| ------------ | --------------------------------- | --------------------------------------------- | --------------------------- | ---------------------------------------- | -| INT | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 | -| DOUBLE | 8 字节 | (-1.797E+308,-2.22E-308) | (0,2.22E-308,1.797E+308) | 双精度浮点数值 | -| DOUBLE(M,D) | 8个字节,M表示长度,D表示小数位数 | 同上,受M和D的约束 DOUBLE(5,2) -999.99-999.99 | 同上,受M和D的约束 | 双精度浮点数值 | -| DECIMAL(M,D) | DECIMAL(M,D) | 依赖于M和D的值,M最大值为65 | 依赖于M和D的值,M最大值为65 | 小数值,和钱相关,不会出现精度缺失的问题 | - -#### 3.1.2字符串 - -| 类型 | 大小 | 用途 | -| --------------------------- | ------------ | ----------------------------- | -| CHAR | 0-255字符 | 定长字符串CHAR(10)10个字符 | -| VARCHAR | 0-65535 字节 | 变长字符串VARCHAR(10)10个字符 | -| BLOB(binary large object) | 0-65535字节 | 二进制形式的长文本数据 | -| TEXT | 0-65535字节 | 长文本数据 | - -#### 3.1.3、日期时间类型 - -| 类型 | 大小 | 范围 | 格式 | 用途 | -| --------- | :--- | ------------------------------------------------------------ | ------------------- | ------------------------ | -| DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 | -| TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 | -| YEAR | 1 | 1901/2155 | YYYY | 年份值 | -| DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 | -| TIMESTAMP | 4 | 1970-01-01 00:00:00/2038 结束时间是第 **2147483647** 秒北京时间 **2038-1-19 11:14:07**,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 | - - - -### 3.2创建表 - -```sql -CREATE TABLE [IF NOT EXISTS] 表名( - 列名 数据类型 [约束], - 列名 数据类型 [约束], - 列名 数据类型 [约束] //最后一列的末尾不加逗号 -)[CHARSET=utf8]; //可根据需要指定表的字符编码集 -``` - -### 3.3查看表 - -```sql -# 查看当前数据库中所有表名称 -SHOW TABLES; -# 查看指定表的创建语句 -SHOW CREATE TABLE 表名; -# 查看表结构 -DESC 表名; -``` - -### 3.4修改表 - -```sql -# 添加列 -ALTER TABLE 表名 ADD ( - 列名 列类型, - 列名 列类型 -) - -# 修改列类型(如果被修改的列已存在数据,那么新的类型可能会影响到已存在数据), 修改表中的某列时,也要写全列的名字,数据类型,约束 -ALTER TABLE 表名 MODIFY 列名 列类型; - -# 修改列名, 在给定列新名称时,要指定列的类型和约束 -ALTER TABLE 表名 CHANGE 原列名 新列名 列类型; - -# 删除列, 删除列时,每次只能删除一列 -ALTER TABLE 表名 DROP 列名; - -# 修改表名称 -ALTER TABLE 原表名 RENAME TO 新表名; -ALTER TABLE 原表名 RENAME 新表名; -``` - -### 3.5删除表 - -```sql -DROP TABLE 表名; -``` - -## 4.DML - -DML就是对表的内容进行操作 - -### 4.1插入 - -基本格式: - -```sql -INSERT INTO 表名(列名1, 列名2, ...) VALUES(列值1, 列值2, ...); -或者 -INSERT INTO 表名 VALUES(列值1, 列值2, ...); -``` - -### 4.2修改 - -```sql -# WHERE条件是可选的, 如果没有条件, 就修改所有记录, 多数时候我们都加上WHERE条件 -UPDATE 表名 SET 列名1=列值1, 列名2=列值2, ...[WHERE 条件] -``` - -### 4.3删除 - -```sql -# WHERE条件是可选的, 如果没有条件, 就删除所有记录, 多数时候我们都加上WHERE条件 -DELETE FROM 表名 [WHERE 条件]; -``` - - - -### 4.4约束 - -#### 4.4.1主键约束 - -```sql -# 创建表时指定主键 -CREATE TABLE 表名( - 列名 数据类型 PRIMARY KEY, - 列名 数据类型, - 列名 数据类型 -); - -# 创建表时指定主键 -CREATE TABLE 表名( - 列名 数据类型, - 列名 数据类型, - 列名 数据类型, - PRIMARY KEY(设置为主键的列名) -); - -# 修改表时指定主键 -ALTER TABLE 表名 ADD PRIMARY KEY(列名); -ALTER TABLE 表名 MODIFY 列名 列类型 PRIMARY KEY; -ALTER TABLE 表名 CHANGE 原列名 新列名 列类型 PRIMARY KEY; - -# 删除主键 -ALTER TABLE 表名 DROP PRIMARY KEY; -``` - -主键自增长: - -```sql -# 创建表时指定主键 -CREATE TABLE 表名( - 列名 数据类型 PRIMARY KEY AUTO_INCREMENT, - 列名 数据类型, - 列名 数据类型 -); - -# 修改表时设置主键自增长 -ALTER TABLE 表名 CHANGE 原列名 新列名 列类型 PRIMARY KEY AUTO_INCREMENT; -ALTER TABLE 表名 MODIFY 列名 列类型 PRIMARY KEY AUTO_INCREMENT; - -# 修改表时删除主键自增长 -ALTER TABLE 表名 CHANGE 原列名 新列名 列类型; -``` - - - -#### 4.4.2唯一约束 - -```sql -# 创建表时指定唯一约束 -CREATE TABLE 表名( - 列名 数据类型 UNIQUE, - 列名 数据类型, - 列名 数据类型 -); - -# 修改表时设置唯一约束 -ALTER TABLE 表名 MODIFY 列名 列类型 UNIQUE; -ALTER TABLE 表名 CHANGE 原列名 新列名 列类型 UNIQUE; - -# 删除唯一约束 -ALTER TABLE 表名 DROP INDEX name; -``` - - - -#### 4.4.3非空约束 - -```sql -# 创建表时指定非空约束 -CREATE TABLE 表名( - 列名 数据类型 NOT NULL, - 列名 数据类型, - 列名 数据类型 -); - -# 修改表时设置非空约束 -ALTER TABLE 表名 MODIFY 列名 列类型 NOT NULL; -ALTER TABLE 表名 CHANGE 原列名 新列名 列类型 NOT NULL; - -# 删除非空约束 -ALTER TABLE 表名 MODIFY 列名 列类型; -ALTER TABLE 表名 CHANGE 原列名 新列名 列类型; -``` - -#### 4.4.4默认值 - -```sql -# 创建表时指定默认值 -CREATE TABLE 表名( - 列名 数据类型 DEFAULT 默认值, - 列名 数据类型, - 列名 数据类型 -); - -# 修改表时设置默认值 -ALTER TABLE 表名 MODIFY 列名 列类型 DEFAULT 默认值; -ALTER TABLE 表名 CHANGE 原列名 新列名 列类型 DEFAULT 默认值; - -# 删除默认值 -ALTER TABLE 表名 MODIFY 列名 列类型; -ALTER TABLE 表名 CHANGE 原列名 新列名 列类型; -``` - -#### 4.4.5外键约束 - -## 5.DQL - -查询操作:所有操作中使用最频繁 - -### 5.1单表查询 - -```sql -# 查询指定列 -SELECT 列1 [, 列2, ...列N] FROM 表名; -#去重查询 -SELECT DISTINCT 列1 [, 列2, ...列N] FROM 表名; -``` - -### 5.2列运算 - -```sql -# 列可以进行加、减、乘、除运算 -如:SELECT ename, sal*1.5 FROM emp; -# 格式:列名 AS 别名 -# AS也可以省略,格式:列名 别名 -# 查询所有员工的姓名和总工资(工资加奖金, 如果奖金为NULL则按照奖金为0进行运算) -SELECT ename AS '姓名', sal+IFNULL(comm, 0) AS '总工资' FROM emp; -SELECT ename '姓名', sal+IFNULL(comm, 0) '总工资' FROM emp; -# 除了可以给列起别名,也可以给表起别名,在多表查询中会使用到为表起别名 -``` - -### 5.3条件查询 - -主要使用where连接 - -```sql -# 查询部门编号为20的所有员工的信息 -SELECT * FROM emp WHERE deptno=20 - -# 查询工种为工程师的所有员工的信息 -SELECT * FROM emp WHERE job='工程师' - -# 查询有奖金的所有员工的信息 -SELECT * FROM emp WHERE comm IS NOT NULL and comm <> 0; -SELECT * FROM emp WHERE comm IS NOT NULL and comm != 0; -``` - -### 5.4模糊查询 - -> "_"匹配一个任意字符,只匹配一个字符而不是多个 -> -> "%"匹配0~N个任意字符 -> -> 模糊查询需要使用运算符:LIKE - -```sql -# 查询姓“周”的所有员工的信息 -SELECT * FROM emp WHERE ename LIKE '周%'; - -# 查询姓名中包含“杰”的所有员工的信息 -SELECT * FROM emp WHERE ename LIKE '%杰%'; - -# 查询姓“周”并且姓名只有三个字的所有员工的信息 -SELECT * FROM emp WHERE ename LIKE '周__'; -``` - -### 5.5排序 - -> 对查询的结果进行排序 -> -> 排序分成升序(ASC)和降序(DESC),可以使用多列作为排序条件 -> -> 排序使用关键字ORDER BY - -```sql -# 排序 -# 规则:列名 升序/降序 -SELECT 列1, 列2, 列3 FROM 表名 WHERE 条件 ORDER BY 规则1, 规则2,....,规则n  - -# 查询所有员工信息,按照工号升序排列 -SELECT * FROM emp ORDER BY empno ASC; -# 如果是升序,ASC可以省略 -SELECT * FROM emp ORDER BY empno; -多个排序规则就按顺序执行 -SELECT * FROM emp ORDER BY sal ASC, empno DESC; -``` - -### 5.6聚合函数 - -> | 函数 | 功能 | -> | ----- | -------- | -> | COUNT | 计算个数 | -> | MAX | 最大值 | -> | MIN | 最小值 | -> | AVG | 平均值 | -> | SUM | 和 | - -例如: - -```sql -# 查询公司员工个数 -SELECT count(1) FROM emp; -SELECT count(*) FROM emp; - -# 查询公司最高工资 -SELECT MAX(sal) FROM emp; - -# 查询公司最低工资 -SELECT MIN(sal) FROM emp; - -# 查询公司所有员工工资和 -SELECT SUM(sal) FROM emp; - -# 查询公司员工工资的平均值 -SELECT AVG(sal) FROM emp; -``` - -### 5.7分组查询 - ->主要使用GROUP BY关键字 - - - -例如: - -```sql -# 查询每个工种的平均工资 -SELECT job, AVG(sal) FROM emp GROUP BY job; - -# 查询每个工种的员工数量 -SELECT job, COUNT(1) FROM emp GROUP BY job; -``` - -分组查询设置条件的话,分组前的条件使用where,分组后的条件使用having - -```sql -# 查询工资大于15000的员工的工种,以及工种的平均工资 -SELECT job, AVG(sal) FROM emp WHERE sal>15000 GROUP BY job; - -# 查询工资大于15000的员工的工种,以及工种的平均工资,只显示超过两人的工种 -SELECT job, AVG(sal) FROM emp WHERE sal>15000 GROUP BY job HAVING COUNT(*)>=2; -``` - -### 5.8Limit子句 - ->主要用于分页查询 - -```sql -# 语法 -SELECT 列名 FROM 表名 LIMIT 起始行,查询行数; - -# 查询员工表中前五名员工的所有信息 -# 起始行是从 0 开始,代表了第一行 -SELECT * FROM emp LIMIT 0, 5; - -#查询员工表中从第4条开始,查询10行 -SELECT * FROM emp LIMIT 3,10; -``` - -### 5.9 多表查询 - -#### 5.9.1合并结果集 - -> 合并结果集就是把两个select语句的查询结果合并到一起,结果集就是一个表格。 -> -> 要求:被合并的两个结果:列数必须相同。 - -```sql -# UNION:去除重复记录 -SELECT * FROM t1 UNION SELECT * FROM t2; -# UNION ALL:不去除重复记录 -SELECT * FROM t1 UNION ALL SELECT * FROM t2; -``` - -#### 5.9.2内连接 - -```sql -# 方式1(MySQL特有,不符合SQL标准) -SELECT 列名 FROM 表1, 表2 WHERE 表1.列名 条件运算符 表2.列名 [AND 条件]; -# 方式2(符合SQL标准) -SELECT 列名 FROM 表1 INNER JOIN 表2 ON 表1.列名 条件运算符 表2.列名 [WHERE 条件]; -``` - -``` -# 列出员工的姓名和部门名称 -SELECT e.ename, d.dname FROM emp e, dept d WHERE e.deptno=d.deptno; -SELECT e.ename, d.dname FROM emp e INNER JOIN dept d ON e.deptno=d.deptno; -``` - -> 上面的查询只能查询出拥有部门的员工和拥有员工的部门,没有部门的员工和没有员工的部门是查询不到的。如果要将所有的员工和部门都查询出来需要使用外连接。 - -#### 5.9.3外连接 - -> 结果集中包含主表所有数据行,如果主表的某行在从表中没有匹配行时,则从表的选择列为NULL值。 - -##### 5.9.3.1左外链接 - -> 左外连接是以左表为主表,去关联右表(从表),**结果集中包含主表所有数据行**,如果主表的某行在从表中没有匹配行时,则从表的选择列为NULL值。 - -```sql -# 语法 -SELECT 列名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 左表.列名 条件运算符 右表.列名 [WHERE 条件]; - -# 列出员工的姓名和部门名称, 包括没有部门的员工 -SELECT e.ename, d.dname FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno; - -# 列出员工的姓名和部门名称, 包括没有员工的部门 -SELECT e.ename, d.dname FROM dept d LEFT JOIN emp e ON e.deptno=d.deptno; -``` - -##### 5.9.3.2右外连接 - -> 右外连接是以右表为主表,去关联左表(从表),**结果集中包含主表所有数据行**,如果主表的某行在从表中没有匹配行时,则从表的选择列为NULL值。 - -```sql -# 语法 -SELECT 列名 FROM 左表 RIGHT [OUTER] JOIN 右表 ON 左表.列名 条件运算符 右表.列名 [WHERE 条件]; - -# 列出员工的姓名和部门名称, 包括没有员工的部门 -SELECT e.ename, d.dname FROM emp e RIGHT JOIN dept d ON e.deptno=d.deptno; - -# 列出员工的姓名和部门名称, 包括没有部门的员工 -SELECT e.ename, d.dname FROM dept d RIGHT JOIN emp e ON e.deptno=d.deptno; -``` - -##### 5.9.3.3 全外连接 - -> 完全连接左表和右表中所有行,当某行数据在另一个表中没有匹配时,则另一个表的选择列值为NULL。 - -```sql -# 语法 -SELECT 列名 FROM 左表 FULL [OUTER] JOIN 右表 ON 左表.列名 条件运算符 右表.列名 [WHERE 条件] -``` - -> MySQL不支持这种语法,可以使用合并结果集进行模拟全外连接。 - -```sql -SELECT e.ename, d.dname FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno -UNION -SELECT e.ename, d.dname FROM emp e RIGHT JOIN dept d ON e.deptno=d.deptno; -``` - -### 5.10子查询 - -> 子查询出现的位置: -> -> - WHERE后,作为条件的一部分; -> - FROM后,作为被查询的一条表。 - -#### 5.10.1列子查询 - -```sql - SELECT id,stu_id,`name`,(SELECT `class_name`FROM t_class WHERE id = class_id ) class_name,class_id,sex,birthday FROM t_student LIMIT 10; -``` - -#### 5.10.2表子查询 - -```sql -SELECT id,stu_id,`name`,pinyin,sex,birthday FROM (SELECT *FROM t_student WHERE sex = '女')t1; -``` - -#### 5.10.3where之后 - -```sql - -- 等号(不等号)子查询 要求子查询结果必须是一行一列 - SELECT id,stu_id,`name`,pinyin,sex,birthday FROM t_student - WHERE class_id = (SELECT id FROM t_class WHERE class_name = '080503-JAVA'); - SELECT id,stu_id,`name`,pinyin,sex,birthday FROM t_student - WHERE class_id != (SELECT id FROM t_class WHERE class_name = '080503-JAVA'); - -- 大于号子查询,小于号子查询 - SELECT id,stu_id,`name`,pinyin,sex,birthday,class_id FROM t_student - WHERE class_id > ALL(SELECT id FROM t_class WHERE class_name LIKE '%JAVA%'); - - SELECT id,stu_id,`name`,pinyin,sex,birthday,class_id FROM t_student - WHERE class_id > ANY(SELECT id FROM t_class WHERE class_name = '080503-JAVA'); - -- 4.in 和not in 子查询 - SELECT id,stu_id,`name`,pinyin,sex,birthday,class_id FROM t_student WHERE id in(1,2,3); - SELECT id,stu_id,`name`,pinyin,sex,birthday,class_id FROM t_student - WHERE id in(SELECT id FROM t_class WHERE class_name LIKE '%JAVA%'); -``` - -#### 5.10.4exists - -```sql - SELECT id,stu_id,`name`,pinyin,sex,birthday,class_id FROM t_student - WHERE EXISTS(SELECT id From t_class WHERE class_name LIKE '%JAVA%') -``` - diff --git a/尹顺宇10.29作业/尹顺宇第三天学习总结.docx b/尹顺宇10.29作业/尹顺宇第三天学习总结.docx deleted file mode 100644 index 6375dbb..0000000 Binary files a/尹顺宇10.29作业/尹顺宇第三天学习总结.docx and /dev/null differ diff --git a/尹顺宇10.31作业/尹顺宇10.31学习总结.docx b/尹顺宇10.31作业/尹顺宇10.31学习总结.docx deleted file mode 100644 index 7ec72f4..0000000 Binary files a/尹顺宇10.31作业/尹顺宇10.31学习总结.docx and /dev/null differ diff --git a/尹顺宇10.31作业/尹顺宇10.31学习笔记.md b/尹顺宇10.31作业/尹顺宇10.31学习笔记.md deleted file mode 100644 index 73834de..0000000 --- a/尹顺宇10.31作业/尹顺宇10.31学习笔记.md +++ /dev/null @@ -1,560 +0,0 @@ -# Javase回顾 -## 1.环境 -jdk8及之前:jdk+jre -jdk:java development kit -jre: java runtime environment -jdk8以后:只有jdk -环境变量配置只需要配置JAVAHOME和path里面指向JAVAHOME的bin -## 2.开发工具 -idea(目前最流行) -eclipse(已经不常用) -## 3.基础语法 -### 3.1 java语言特点 -简单,严谨,易读 -编译+解释 -### 3.2 8种基本数据类型 - -|数据类型 | 精度 | 范围| -|--|--|--| -| byte | 1 |-2^7^ ~ 2^7^-1(-128~127) -| short | 2|-2^15^ ~ 2^15^-1(-32768 ~ 32767) -| int | 4|-2^31^ ~ 2^31^-1(约21亿多) -|long| 8 |-2^63^~ 2^63^-1(-9223372036854775808 ~ 9223372036854775807) -| float | 4 |约±3.4e38(± 3.4 × 10^38^ ) -| double | 8 | 约±1.7e308(± 1.7 × 10^308^ ) -| char | 2 |0 ~ 65535(Unicode) -| boolean | 1(不一定,不同虚拟机不一样 ) | -### 3.3 运算符 -> 算数运算符 :+ - * / % 双目运算符 -> 比较运算符 : > , <, >= , <=, == , != 计算结果是boolean值 -> 逻辑运算符:&& , ||, ! 运算结果是boolean值,存在短路运算 -> 赋值运算符: = ,+=, -=, *= , /= -> 条件运算符 a?b:c 唯一的三目运算符 -> 位运算符:基本用不到 -> 其他运算符:instanceof (例:a instanceof b ) -> 表达式(有值) -> ### 3.4语句 -> java代码执行的基本单位 - ->流程控制语句: ->1.顺序结构: ->2.分支结构: ->3.循环结构: - -### 3.5 数组 ->int[] a = new int[](1,2,3} ->获取数组长度。.length属性,只读。 ->如果访问数组元素。索引(下标),整数,包括0,不能是负数,不能是小数,不能超 ->出边界。 - -```java -public class Test1 { - public static void main(String[] args) { - int[] a = new int[5]; - int[] b = new int[]{1, 2, 3, 4, 5}; - int[] c = {1, 2, 3, 4, 5}; - System.out.println(c.length); - a[0] = 1; - a[1] = 2; - a[40] = 4; - } -} - -``` - -```java -import java.util.Arrays; - -public class Test2 { - public static void main(String[] args) { - int[] arr = new int[20]; - //存入随机数 - for (int i = 0; i < arr.length; i++) { - arr[i] = (int) (Math.random() * 100); - } - //输出随机数数组 - System.out.println(Arrays.toString(arr)); - - boolean found = false; - //判断生成的随机数数组中包不包含50并给出下标 - for (int i = 0; i < arr.length; i++) { - if (arr[i] == 50) { - found = true; - System.out.println(i); - break; - } - } - if (!found) { - System.out.println("无此值"); - } - - } -} - - -``` - -数组应用: -排序:冒泡,选择,快排 - -```java -import java.util.Arrays; - -public class Test3 { - public static void main(String[] args) { - int[] arr = {44, 64, 35, 66, 10, 67, 86, 32, 2, 44}; - quickSort2(arr);//调用函数 - System.out.println(Arrays.toString(arr)); - } - - //冒泡 - static void bubbleSort(int[] arr) { - for (int i = 0; i < arr.length - 1; i++) { - for (int j = 0; j < arr.length - 1 - i; j++) { - if (arr[j] < arr[j + 1]) { - int temp = arr[j]; - arr[j] = arr[j + 1]; - arr[j + 1] = temp; - } - } - } - } - - static void bubbleSort2(int[] arr) { - for (int i = 0; i < arr.length - 1; i++) { - for (int j = 0; j < arr.length - 1 - i; j++) { - if (arr[j] > arr[j + 1]) { - int temp = arr[j]; - arr[j] = arr[j + 1]; - arr[j + 1] = temp; - } - } - } - } - - //选择 - static void selectSort(int[] arr) { - for (int i = 0; i < arr.length - 1; i++) { - for (int j = i + 1; j < arr.length; j++) { - if (arr[j] < arr[i]) { - int temp = arr[j]; - arr[j] = arr[i]; - arr[i] = temp; - } - } - } - } - - static void selectSort2(int[] arr) { - for (int i = 0; i < arr.length - 1; i++) { - for (int j = i + 1; j < arr.length; j++) { - if (arr[j] < arr[i]) { - int temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; - } - } - } - } - - //快排 - static void quickSort(int[] arr) { - quickSort(arr, 0, arr.length - 1); - } - - static void quickSort2(int[] arr) { - quickSort2(arr, 0, arr.length - 1); - } - - - //快排实现 - static void quickSort(int[] arr, int low, int high) { - if (low >= high) { - return; - } - int pivot = arr[low];//基准值 - int left = low;//左指针 - int right = high;//右指针 - - while (left < right) { - //右指针不断左移 - while (left < right && arr[right] >= pivot) { - right--; - } - //左指针不断右移 - while (left < right && arr[left] <= pivot) { - left++; - } - - if (left < right) { - int temp = arr[left]; - arr[left] = arr[right]; - arr[right] = temp; - } - } - - //二者相遇 - if (left != low) { - arr[low] = arr[left]; - arr[left] = pivot; - } - - //递归 - quickSort(arr, low, left - 1);//对左区递归 - quickSort(arr, left + 1, high);//对右区递归 - } - - static void quickSort2(int[] arr, int low, int high) { - if (low > high) { - return; - } - int target = arr[low]; - int left = low; - int right = high; - - while (left < right) { - while (left < right && arr[right] >= arr[low]) { - right--; - } - while (left= high) { - return -1; - } - int mid = (low + high) / 2; - if (target == arr[mid]) { - return mid; - } else if (target < arr[mid]) { - return find(arr, low, mid - 1, target); - } else { - return find(arr, mid + 1, high, target); - } - } - - static int find2(int[] arr, int low, int high, int target) { - if (low >= high) { - return -1; - } - int mid = (low + high) / 2; - if (target == arr[mid]) { - return mid; - } else if (target < arr[mid]) { - return find2(arr, low, mid - 1, target); - - } else { - return find2(arr, mid + 1, high, target); - } - } -} - -``` - -### 3.6 函数(方法) - -### 3.7 面向对象 -类:类型,将很多实例抽取共性,总结归纳 -对象:独一无二的实例,在java中,对象通过类创建 - -创建对象:new 构造方法() - -### 3.8封装 -将成员属性和成员方法包含到一个类中,选择性的对外开放成员。 - -成员访问修饰符:对外开放程度 -public:公开,公有的,任何位置都可访问。 -protected:受保护的,包内及后代可以访问。 -<空>:包内访问。 -private:当前类内部访问。 -### 3.9 继承 -单继承,默认继承自object,顶级根类 -1.非私有成员可以被继承 -2.构造函数不能被继承 - -protect: -super:父对象 -this:当前对象 - -```java -package com.situ.chapter1; - -public class Person { - public int age;//年龄 - private String name;//姓名 -//无参构造方法 - public Person() { - - } -//有参构造 - public Person(String name) { - this.name = name; - System.out.println("创建Person对象"); - } - - //行为 - protected void sayHello() { - System.out.println("父亲sayHello"); - } - - void wang() { - System.out.println("aaa"); - sayHello(); - } -} - -``` - -```java -package com.situ.chapter1; - -public class Teacher extends Person { - - public Teacher() { - super(); - } - - @Override - protected void sayHello() { - System.out.println("儿子sayHello"); - } - - public void sayBye() { - this.sayHello(); - super.sayHello(); - - //System.out.println(super.name); - } -} -``` - -```java -package com.situ.chapter1; - -public class Test1 { - public static void main(String[] args) { - Person person = new Person(); - person.sayHello(); - person.wang(); - System.out.println("---------------"); - Teacher teacher = new Teacher(); - teacher.sayHello(); - teacher.sayBye(); - - } -} -``` - -访问构造函数: -this(xxx):调用当前类的构造函数 -super(xxx):调用父类的构造函数 - -构造函数:对对象的成员属性进行初始化 -1.与类同名 -2.无返回值 -3.如果一个类没有显式定义构造函数,会自动创建一个公有的无参的构造函数,如果显式指定了构造函数,就不会再自动创建无参构造函数 -4.构造函数是类成员,可以指定修饰符 -5.创建对象时,使用new<构造函数>(xxx) -6.创建子类对象时,必须先调用父类的构造函数 -7.一个构造函数的第一句代码必须是this(xxx)或者super(xxx),有且只有一次调用 -8.如果没有显式调用this(xxx)或super(xxx),默认调用super() -### 3.10 多态(非常重要) - -在程序运行期间,同一行为,表现出多种形态 -1.继承或接口 -2。重写 -3.使用一个父类型(祖先类型)的引用指向一个子类(后代类)的实例 - -```java -package com.situ.chapter2; - -public class Animal { - public void run() { - System.out.println("动物在跑"); - } -} - -``` - -```java -package com.situ.chapter2; - -public class Cat extends Animal { - private static String name; - - @Override - public void run() { - System.out.println("猫在跑"); - } -} - -``` - -```java -package com.situ.chapter2; - -public class Fish extends Animal { - @Override - public void run() { - System.out.println("鱼在跑"); - } -} - -``` - -```java -package com.situ.chapter2; - -public class Test1 { - static int a = 10; - public static void main(String[] args) { - Animal animal = new Cat(); - run(animal); - } - - static void run(Animal animal) { - animal.run(); - } -} -``` -### 3.11 static和final -static成员即类成员,属于类的,不属于某个对象,通过类名称直接访问 - -final:表示最终的,不变的 -1.修饰类,表示类不能被继承 -2.修饰方法:表示方法不可被重写 -3.修饰变量:表示变量为不可变的变量(常量) - -### 3.12 抽象类和接口 -抽象方法:只有方法定义,没有实现的方法,叫抽象方法 -抽象类:使用abstract关键字 -1.使用abstract关键字 -2.不能创建实例(对象) -3.除此之外,和普通类没有区别。 -4.可以有构造函数。 -5.抽象类中允许有抽象方法(也可以没有),普通类中一定没有抽象方法。 -6.一个类中只要有抽象方法,则必须是抽象类 - -接口: -1.接口不是类。 -2.接口中只能有抽象方法(),jdk1.8之后新增:静态方法(static)和默认方法(default) -3.接口中的方法默认是public abstract修饰,不写也行 -4.接口中的静态方法和类中的静态方法类似 -可直接接口名调用 -5.接口中的默认方法可被继承到实现类中,在默认方法中可以使用this关键字,由实现类来调用 - -接口提供一定的规范和约束,不提供实现 -实现类去实现接口 implements实现接口 -实现类必须对接口中的方法提供实现,如果不能,则只能为抽象类 - - -### 3.13 常用类 -1.Object:所有类的终极父类。没有父类 -hashCode:用于生成对象的唯一(尽量唯一)标识码 -默认返回对象的内存地址。 -equals:用于判定两个对象是否逻辑上相等,逻辑是由程序员决定的,重写。默认比较是否同一个内存地址 -toString:将一个对象以字符串的形式展示 -clone():克隆一个对象 -getClass:获取对象的类型实例(Class) - -2.String:表达式字符串,不可继承。内容不可变 -3.Math:数学相关方法 -4.Date:日期相关。LocalDate,LocalTime,LocalDateTime - -### 3.14 集合相关类: -1.List:ArrayList,LinkedList.列表:有序,可重复。 -2.set:HashSet 集合,无序,不重复 -3.Map:HashMap 映射:存储键-值对,键无序,不重复 - -### 3.15 泛型 - 类型变量 - -### 3.16异常 -程序出错时的处理方式.挽救或补回措施 -try...catch...finally -caatch可以已有多个分支,第一个分支,捕获某一个类型的异常 -finally分支中的代码一定会执行,无论是否出现异常 - -异常是有类型的 - -异常分两种: -异常分成两种: -1.编译时异常,检查异常 ,checkedException。在编译期就要求处理异常。 -2.运行时异常。RuntimeException。 - - - -### 3.17 IO -Input & Output 流对象完成输入输出的 - -流动的方向分为输入流和输出流 - -流动的单位:字节流和字符流 - -介质类型:文件流,网络流,数组流 - -以Stream结尾的是字节流 -以InputStream结尾的是输入流 -流在使用完之后必须关闭,如果忘记,容易内存泄漏 - - -throws:写在方法后面,表示此方法向上抛出异常 -throw:原地抛出(触发,引发)异常 - -### 3.18 多线程 -进程:Process,操作系统管理的独立的分配资源的单位,依靠端口进行通信 -一个程序至少有一个进程。 -如:QQ此时6个进程 -![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f000c716e26b4ac385455546ca2556bb.png) - - -线程:Thread。一个进程中可以包含至少一个线程。所有线程共享进程的资源。线程是cpu可调度的最小单位 - -cpu:单核。一个核心。 -多核。真正的并行。 -web开发程序都是并行的,多线程。 -![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ac0c637b29364252bc4fef75de588a71.png) - -### 3.18 反射 -反射:java的灵魂,在程序运行期间,在无法直接使用目标类的情况下,以一种间接的方式,去操作对象。 -Reflect: 镜像。 - -常用类: -Class: 描述其他类,描述类的类 -Field: 描述字段的类。描述成员属性 -Method:描述成员方法的。 -Constructor:描述构造函数的。 -Parameter:描述方法的参数的。 -Annotation:描述注解的。 - -获取Class类型实例三种方式: \ No newline at end of file