目录
下表转自黄高原老师-《新生培训方案》
学习内容 | 学习资料 | |
---|---|---|
第一阶段: JAVA基础 (2周) | java环境搭建:对jvm,jre,jdk 和系统环境变量都有了解,能搭建运行编译环境,编译运行helloworld java 语法,包括变量、对象、接口、泛型、异常、IO 都有了解 java8: stream、 lambda 等 | 视频 : https://www.bilibili.com/video/BV1fh411y7R8 文档: https://www.runoob.com/java/java-tutorial.html https://www.runoob.com/java/java8-new-features.html https://www.liaoxuefeng.com/wiki/1252599548343744 书籍 《Head First Java》 |
第二阶段: 数据库MySQL (1周) | SQL 语句、索引,食物,库表设计 | 视频 : https://www.bilibili.com/video/BV1Vy4y1z7EX 文档 SQL - 菜鸟教程:https://www.runoob.com/sql/sql-tutorial.html MySQL - 菜鸟教程:https://www.runoob.com/mysql/mysql-tutorial.html |
第三阶段: 项目框架 (4周) | maven spring springboot spring jpa | 视频: Spring 5 框架最新版教程(idea版):https://www.bilibili.com/video/BV1Vf4y127N5 SpringMVC 2021 最新教程:https://www.bilibili.com/video/BV1Ry4y1574R Maven 零基础入门教程:https://www.bilibili.com/video/BV1TW411g7hP SpringBoot2 零基础入门:https://www.bilibili.com/video/BV19K4y1L7MT 网站: maven和spring官网 |
学习计划参照
第一阶段 JAVA基础
Day 1
(2023-08-12)
1.1.1 学习内容
- jvm, jre, jdk
- Java环境搭建与运行
1.1.2 学习目标
- 明晰JDK、JRE和JVM的意义和关系
- 下载安装JDK,配置系统环境变量,搭建运行编译环境
- 编译运行helloworld
1.1.3 学习成果
- JDK、JRE和JVM关系图
JVM (Java Virtual Machine Java 虚拟机)
JRE (Java Runtime Environment Java 运行环境)
JDK (Java Development Kit Java 开发工具包)
- 第一个helloworld程序
- 运行结果
Day 2
(2023-08-13)
1.2.1 学习内容
- 变量
- 运算符
- 程序控制结构
- 数组、排序和查找
1.2.2 学习目标
- 明晰Java变量、运算符、程序控制结构(if-else/ switch,for/ while/ do..while,break/ continue/ return)、数组(一维/二维)、排序和查找的基本用法和结构
- 综合上述学习内容练习综合案例
- 二维数组应用案例(如杨辉三角)
1.2.3 学习成果
public class ArrayTest {
public static void main(String[] args) {
MyTools mt = new MyTools();
int[] arr = {10, -1, 8, 0, 34};
mt.bubble(arr);
System.out.println("======");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i] + "\t");
// System.out.println("args = " + Arrays.toString(args));
}
}
}
class MyTools {
public void bubble(int[] arr) {
int temp = 0;
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]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
Day 3
(2023-08-14)
1.3.1 学习内容
面向对象编程(基础)
- 类
- 对象
- 实例
- 方法递归
- 方法重载
- this关键字
面向对象编程(中级)
- 封装
- 继承
- 多态
- 方法重写
- 4种修饰符使用
- super关键字
1.3.2 学习目标
- 根据教程明晰Java面向对象编程的基本特征和方法
- 完成零钱通项目,实现明细、入账、消费、退出的功能
- 完成房屋出租系统项目,实现新增房源、查找、删除、修改、列表、退出的功能
1.3.3 学习成果
Day 4
(2023-08-15)
1.4.1 学习内容
- 类变量和类方法
- 代码块
- 单例模式
- final关键字
- 抽象类和模板设计模式
- 接口
- 内部类
1.4.2 学习目标
- 静态方法只能访问静态成员,非静态方法可以访问所有成员,遵守访问权限
- static代码块在类加载时才执行,只执行一次(创建对象实例、当创建子类对象实例时父类被加载、使用类的静态成员);普通代码块每创建对象一次调用一次
- 创建对象时,对一个类的调用顺序为:静态代码块和静态属性初始化(两个都有看各自顺序)=》普通代码块和普通属性初始化(两个都有看各自顺序)=》构造方法
- 创建子类对象调用顺序:父类静态 =》子类静态 =》父类普通 =》父类构造 =》子类普通 =》子类构造
- final应用场景:类不能被继承(但可以实例化对象)、子类不能重写父类方法(但子类可以继承)、类属性值不能修改、局部变量不能修改
- final赋初值:定义时、构造器中、代码块中;(静态)定义时、静态代码块
- 抽象类abstract不能用private、final、static修饰
- interface接口中(1 抽象方法 2 默认实现方法 3 静态方法)
- 接口中属性等价 public static final
- 类继承类是单继承,但类和接口可以继承多个接口
- 类的五大成员:属性、方法、构造器、代码块、内部类
- 局部内部类:外部其他类不能访问局部内部类;访问外部类成员使用外部类名.this.成员访问;局部内部类直接访问外部类成员、外部类访问局部内部类成员需要先创建对象
- 匿名内部类
1.4.3 学习成果
知识点:继承、多态、动态绑定、内部类、接口
package com.weiwei.innerclass_;
public class InnerClassExercise02 {
public static void main(String[] args) {
CellPhone cellPhone = new CellPhone();
cellPhone.alarmClock(new Bell() {
@Override
public void ring() {
System.out.println("懒猪起床了");
}
});
cellPhone.alarmClock(new Bell() {
@Override
public void ring() {
System.out.println("小伙伴上课了");
}
});
}
}
interface Bell{
void ring();
}
class CellPhone{
public void alarmClock(Bell bell){
bell.ring();
}
}
知识点:代码块、静态变量(方法)、构造器
package com.weiwei.codeblock_;
public class CodeBlockDetail04 {
public static void main(String[] args) {
new B02();
}
}
class A02 {
private static int n1 = getVal01();
static {
System.out.println("A02的一个静态代码块..");//(2)
}
{
System.out.println("A02的第一个普通代码块..");//(5)
}
public int n3 = getVal02();
public static int getVal01() {
System.out.println("getVal01");//(1)
return 10;
}
public int getVal02() {
System.out.println("getVal02");//(6)
return 10;
}
public A02() {
System.out.println("A02的构造器");//(7)
}
}
class B02 extends A02 {
private static int n3 = getVal03();
static {
System.out.println("B02的一个静态代码块..");//(4)
}
public int n5 = getVal04();
{
System.out.println("B02的第一个普通代码块..");//(9)
}
public static int getVal03() {
System.out.println("getVal03");//(3)
return 10;
}
public int getVal04() {
System.out.println("getVal04");//(8)
return 10;
}
public B02() {
System.out.println("B02的构造器");//(10)
}
}
Day 5
(2023-08-16)
1.5.1 学习内容
- 异常
- 泛型
- IO
- Java8
1.5.2 学习目标
- try-catch-finally 和 throws(默认)
- 注意泛型的语法 ;泛型类、泛型接口、泛型方法( 泛型创建对象时,必须说明其类型,不指定默认为Object)
- InputStream 和 OutputStream
1.5.3 学习成果
( 代码见上 )
知识点:异常处理(try-catch、throws、throw)
知识点:泛型、集合的操作
第二阶段 数据库MySQL
Day 6
(2023-08-17)
2.1.1 学习内容
- MySQL安装配置
- 简单查询
- 条件查询
- 排序数据
- 单行处理
- 多行处理
- 分组查询
- 连接查询
- 子查询
- 表的创建
2.1.2 学习目标
- DQL 语句总结:
select
...
from
...
where
...
group by
...
having
...
order by
...
limit
...
执行顺序:
1.from
2.where
3.group by
4.having
5.select
6.order by
7.limit..
DQL操作 | 命令(操作符) | 语句结构 |
---|---|---|
条件查询 | =、<>、between...and...、is null、and、or、in、not、like | select...from...where... |
数据排序 | order by、asc(desc) | select...from...order by...(asc/desc) |
单行处理 | lower、upper、substr、length、rand()、case...when...then...else...end、ifnull | select 命令(...) from... |
多行处理 | count、sum、avg、max、min | select 命令(...) from... |
分组查询 | group by、having | select...from...where...group by...having...order by... |
连接查询 | join...on...、inner/left outer/right outer | select...from...left/right outer join...on... |
其他 | union、limit |
DDL操作 | 语法格式 |
---|---|
建表 | create table 表名(字段名1 数据类型, 字段名2 数据类型, 字段名3 数据类型); create table 表名( |
DML操作 | 语法格式 |
---|---|
插入数据 | insert into 表名(字段名1,字段名2,字段名3...) values(值1,值2,值3); |
修改数据 | update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3... where 条件; |
删除数据 | delete from 表名 where 条件; |
2.1.3 学习成果
( 代码见上 )
知识点:DQL操作
知识点:DQL操作
补充:DDL,DML操作
Day 7
(2023-08-18)
2.2.1 学习内容
- 事务
- 索引
- 视图
- DBA命令
- 数据库设计三范式
2.2.2 学习目标
- 事务只对DML语句有效果
- 事务开启:start transaction; 回滚事务:rollback; 提交事务:commit;
隔离级别 | 要求 |
---|---|
读未提交 (READ UMCOMMITTED) | 允许一个事务可以看到其他事务未提交的修改 |
读已提交 (READ COMMITTED) | 允许一个事务只能看到其他事务已经提交的修改,未提交的修改是不可见的 |
可重复读 (REPEATABLE READ) | 事务不会读到其他事务对已有数据的修改,即使其他事务已提交 |
串行化 (SERIALIZABLE) | 相当于单线程,后一个事务的执行必须等待前一个事务结束 |
索引操作 | 语句结构 |
---|---|
创建索引 | create unique index 索引名 on 表名(列名); |
查看索引 | show index from ...; |
使用索引 | explain select ... from ... where ...; |
删除索引 | drop index ... on ...; |
三范式 | 要求 |
---|---|
第一范式 | 有主键,具有原子性,字段不可分割 |
第二范式 | 完全依赖,没有部分依赖 |
第三范式 | 没有传递依赖 |
2.2.3 学习成果
( 代码见上 )
知识点:事务
mysql> insert into t_vip values(9,'lwl');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t_vip values(10,'lwl');
Query OK, 1 row affected (0.00 sec)
mysql> select * from t_vip;
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan |
| 2 | zhangsan |
| 3 | zhangsan |
| 4 | zhangsan |
| 5 | zhangsan |
| 6 | zhangsan |
| 7 | zhangsan |
| 8 | zhangsan |
| 9 | lwl |
| 10 | lwl |
+----+----------+
10 rows in set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from t_vip;
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan |
| 2 | zhangsan |
| 3 | zhangsan |
| 4 | zhangsan |
| 5 | zhangsan |
| 6 | zhangsan |
| 7 | zhangsan |
| 8 | zhangsan |
+----+----------+
8 rows in set (0.00 sec)
知识点:索引
mysql> select * from emp;
+-------+--------+-----------+------+------------+---------+---------+--------+
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
+-------+--------+-----------+------+------------+---------+---------+--------+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 |
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 |
| 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 |
| 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 |
| 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 |
| 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 |
+-------+--------+-----------+------+------------+---------+---------+--------+
14 rows in set (0.00 sec)
mysql> explain select * from emp where ename = 'KING';
+----+-------------+-------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
| 1 | SIMPLE | emp | NULL | ref | emp_ename_index | emp_ename_index | 13 | const | 1 | 100.00 | NULL |
+----+-------------+-------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)
mysql> drop index emp_ename_index on emp;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> create index emp_ename_index on emp(ename);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> explain select * from emp where ename = 'KING';
+----+-------------+-------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
| 1 | SIMPLE | emp | NULL | ref | emp_ename_index | emp_ename_index | 13 | const | 1 | 100.00 | NULL |
+----+-------------+-------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)
第三阶段 项目框架
Day 8
(2023-08-21)
3.1.1 学习内容
- 反射
- Maven
3.1.2 学习目标
- 反射机制和用法
- Maven负责项目的自动构建,帮助开发人员做项目代码的编译,测试, 打包,安装,部署等工作;以及管理依赖(管理项目中使用的各种jar包)
- maven工具的获取和安装
-
maven中的概念
①POM
②约定的目录结构
③坐标
④依赖管理
⑤仓库管理
⑥生命周期
⑦插件和目标
⑧继承
⑨聚合 -
命令:
1) mvn clean: 清理命令, 作用删除以前生成的数据, 删除target目录。
2)mvn compile:编译命令,执行的代码编译。
3)mvn test-compile: 编译命令, 编译src/test/java目录中的源文件。
4)mvn test:测试命令, 作用执行 test-classes目录的程序, 测试主程序代码是否符合要求。
5)mvn package:打包,作用是把项目中的资源class文件和配置文件都放到一个压缩文件中, 默认压缩文件是jar类型的。
6)mvn install : 把生成的打包的文件 ,安装到maven仓库。
-
idea中集成maven
3.1.3 学习成果
( 代码见上 )
知识点:反射
Homework01.java
package com.weiwei.reflection.homework;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Homework01 {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchFieldException, NoSuchMethodException, InvocationTargetException {
Class<PrivateTest> privateTestClass = PrivateTest.class;
PrivateTest privateTestObj = privateTestClass.newInstance();
Field name = privateTestClass.getDeclaredField("name");
name.setAccessible(true);
name.set(privateTestObj,"天龙八部");
Method getName = privateTestClass.getMethod("getName");
Object invoke = getName.invoke(privateTestObj);
System.out.println("name的属性值=" + invoke);
}
}
class PrivateTest{
private String name = "hellokitty";
public String getName(){
return name;
}
}
Car.java
package com.weiwei.reflection;
public class Car {
public String brand = "宝马";
public int price = 500000;
public String color = "白色";
@Override
public String toString() {
return "Car{" +
"brand='" + brand + '\'' +
", price=" + price +
", color='" + color + '\'' +
'}';
}
}
知识点:Maven