Java入门篇
基础基础知识
1、标识符即名字其规则:由字母,数字,下划线和$组成,不能以数字开头 ,不能用关键字
业内规定:
类:首字母大写,驼峰命名法
包:小写字母组成,域名倒置
变量/方法:首字母小写,驼峰命名法,需要语义化,见名知意
常量:全部大写字母,单词之间下划线隔开 要加个 final 修饰,不可改变
关键字:Java 官方用掉的名字
数据类型分为基本数据类型和复合数据类型或引用数据类型
2、一个字节(byte)=8 个位(bit) 数据库里面的单位是字节
MySql 里长度仅指定使用 MySql 命令行客户端选择数据时要显示多少字符
里面 int 永远是 4 字节也就是 32 位 TINYINT 是 1 字节
varchar 里的长度是字节也是最大字节,会自适应实际的长度
正常一个汉字占 2 个字节可能是 4,一个字母占 1 字节不分大小写
int 存储数值的范围是:-2 的 32 次方–2 的 32 次方减 1,(也就是-247483648 至 147483647 之间的所有正负整数),所以说 int 是不需要指定长度为多少的。
字节与位的区别:数据存储是以字节为单位,数据传输是大多是以位为单位
3、基本数据类型(四类八型):
整数类型: byte 8 short 16 int(默认) 32 long 64 数字是位数
浮点类型: float 32 double(默认) 64 单精度 双精度 float 范围比 long 大因为它是小数的
字符型: char 只有这用单引号,其他基本都是双引号
布尔型 Boolean: true false
4、随机数
1 | Random random = new Random(); //new出这个对象 |
5、区别
break 主要用于停止整个循环语句,循环语句后面的代码还会运行
continue 用于循环里面让程序跳过当前循环,立刻进入下一次的循环
return 用于返回方法类型指定的值也可以是对象,还能可以结束后面代码的执行
6、Scanner
1 | Scanner sc=new Scanner(System.in);//new出这个对象 |
7、数据类型转换
短的变成,是自动转换;长的变短必须强转,会精度损失
浮点转整需要舍弃小数位
byte 到 double 从低到高
8、运算符
算数运算符+、关系运算符>=、逻辑运算符&、赋值运算符+=、三元运算符、
位运算符:操作二进制 & | >>
7 0111 7/2 =3 1 3/2=1 1 1/2= 1 7 的二进制结果倒着余数 111
9 1001 9/2=4 1 4/2=2 0 2/2=1 0 1/2= 1 结果倒着余数 1001
0001 7&9 结果 1 &必须 2 个是 1 才是 1
&&与 二真才真也叫短路逻辑运算符 ||或 一真则真
&&和&区别就是第一个要是假就不判断另一个,也就是短路了,直接就是假的
1 | int a = 10; |
9、复合数据类型有无数种,自带方法和属性,如 String、Scanner、Random 等
10、Java 基础运行流程,代码从上到下,从左往右,只运行一次
11、变量作用域:方法内声明的变量,方法外不可用。
12、区别
for 和 while 都被称为前置判断循环 do..while 是后置判断循环
while 和 do while 都属于不确定次数的循环语句
for 是属于确定次数的循环语句
13、数组的创建
1 | dataType[] arrayRefVar = new dataType[arraySize]; //动态声明 |
14、for each 的使用
1 | for(元素类型type 元素变量value :遍历对象obj){ |
15、二维数组的遍历
1 | String[] stu1 = {"张三", "Jx202211", "男", "22"}; |
16、函数:一段具备特定功能的、高度封装的代码块
函数声明:
1 | 1、修饰符 public static 公开的 静态的 |
函数的调用:函数名();即可,也可以传参
17、形参与实参
比如函数声明里就是形参,而调用那里输入则是实参
18、返回值,看声明里返回值类,void 则没有返回值,如 int 则返回整型 n,如果是类,返回一个对象类
19、函数的递归即函数里调用函数自己
20、对象:世界万物皆对象,对象的特点是属性、对象的行为是方法,对象的行为必须是自发的
21、对象 3 大特征,封装、继承、多态
封装:私有化属性并设置公有的 get、set 方法,get 有返回值,set 没有
1 | private String name; |
22、修饰符的使用
1 | //private:私有的 能且仅能在本类中使用 |
23、面向对象与面向过程区别
面向过程:只关注事情本身的完成,不关注谁去做,就像大象塞进冰箱,不管是谁把冰箱打开,谁把大象弄进去
面向对象:更多关注 谁去做事情 各有各的好处
24、构造函数
是一个没有返回值,并且函数名和类型相同的函数,在对象实例化的一瞬间就会执行,利用构造函数的参数,对属性进行赋值。
25、函数/方法的重载:同一类中方法名相同,参数数量和类型不同,构造函数就可以用重载
26、static 方法
static 方法就是没有 this 的方法。在 static 方法内部不能调用非静态方法,反过来可以。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用 static 方法。这实际上正是 static 方法的主要用途。
static 关键字还有一个比较关键的作用就是用来形成静态代码块以优化程序性能。它的特性:只会在类加载的时候执行一次。
27、final 关键词
(1)final 修饰类中的属性或者变量
无论属性是基本类型还是引用类型,final 所起的作用都是变量里面存放的“值”不能变,这个值,对于基本类型来说,变量里面放的就是实实在在的值,而引用类型变量里面放的是个地址,所以用 final 修饰引用类型变量指的是它里面的地址不能变,并不是说这个地址所指向的对象或数组的内容不可以变,这个一定要注意。
final 修饰属性,声明变量时可以不赋值,而且一旦赋值就不能被修改了。对 final 属性可以在三个地方赋值:声明时、初始化块中、构造方法中。总之一定要赋值。
(2)final 修饰类中的方法
作用:可以被继承,但继承后不能被重写。
(3)final 修饰类
作用:类不可以被继承。
28、对象的生命周期
对象的出生:一旦被声明被赋值之后 对象即出现
对象的销毁:当该对象没有被指向 就会被自动销毁
String a;这是空,没有对象,所以没有出生和销毁
29、堆与栈
寄存器:最快的存储区,由编译器根据需求进行分配,我们在程序中无法控制
栈:存放基本类型的变量数据和对象打的引用,对象本身不存放在栈中,而存放在堆(new 出来的对象)或者常量池中(字符串常量存放在常量池中)
堆:存放所有 new 出来的对象
普通数据类型里的变量名放在栈里面,数据放堆里面
静态域(属于方法区):存放静态成员(static 定义的)
常量池(属于方法区):存放字符串常量和基本类型常量(public static final)
非 RAM 存储:硬盘等永久存储空间
30、继承与 super
继承就是子类继承父类的属性和方法 苹果是水果可以继承水果类 食草动物是动物可以继承动物类 必须满足 is-a 关系 父类更通用 子类更具体
关键字是 extends 写在类名后面
一个类只能继承 1 个 继承不可滥用,牵一发而动全身,父类改变一次,其他全部受到影响,即耦合性过高,现在继承通常用于我们写的类继承 Java 官方的类
继承关系下 父类和子类构造函数的运行
首先父的构造函数先执行 然后子的构造函数后执行 main 方法里 new 的是子类,可以使用子类的构造函数的参数,父类想传参必须在子类里面加 super 再加需要传的值。因为没 new 父所以不能传参,必须靠子类
关键字 super :放在代码里 用来子类给父类的构造函数的参数传参 ,找爹
31、多态
多态指同一个事物能呈现出多种形态的能力 多态是继承的一种体现
例子
比如创建狮子、老虎类,它们的方法都是吃和睡,方向需要传参那种类名和参数名小写,再创建饲养员类用来测试狮子和老虎类,正常需要创建 2 个 test 方法,传入老虎类和狮子类的类名和参数名小写,再创建 Main 类里弄 main 方法,new 狮子和老虎和饲养员对象,饲养员.test(这是 new 的狮子)再饲养员.test(new 的老虎对象),结果显示老虎和狮子吃睡 !!!
多态的使用,需要再创建一个新的动物类,写入空的吃和睡的方法,啥参数都没,狮子类和老虎类去继承这个动物类。再去测试类那先将方法体注释,重新写一个方法,传入动物类的类名和参数名,直接调用动物的吃和睡方法。再去 main 运行结果一样。不过比前面更方便。这就是多态使用
32、重写
父类的方法,子类写的一模一样,最终执行的是子类的方法
重写规则:修饰符不能强于父类,返回值类型、方法名、参数列表必须一样
33、接口:没有方法体的方法的集合
新建接口 new Java class 里的 interface
好处 1:规定好整体项目的开发的规范
好处 2:规定项目骨架 方便内容填充
实现接口的要在类中 implements
实现接口的类 需要全部实现 接口中的方法
有方法体的方法 被称为 实例方法
没方法体的方法 被称为 抽象方法
一个类可以实现多个接口 ,继承不能多继承。
34、常量:声明之后 不能改变的量就是常量 名称全部大写 关键字 final 最终的意思
JavaSe 进阶
数据库
1、CRUD
(创建 Create、检索 Retrieve、更改 Update、删除 Delete)
1 | 查:select * from 表名 where 条件 |
查和删不加条件,则全部查找、删除;
增也可以不加字段 1、…,直接 values 对应上值也行,而且也可以插入多条,直接 values 后面再逗号继续插入值
多表查的时候有共同的字段,需要声明一下是哪个表里面的
mysql 里运行不区分大小写,尽量都大写
– (默认升序 asc 数据条从上到下递增 降序 desc)
HAVING 是分组之后加的条件
2、六大范式
英文 Normal form
第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般数据库只需满足第三范式(3NF)。
第一范式(1NF):强调属性的原子性。即属性不可再分。
比如:学生表中
id 学生姓名 学生学号 学生人数 手机号 符合
id 学生姓名 学生(学生学号 学生人数) 手机号 不符合
再比如一个字段家庭地址,那肯定有省市区这些值,这些值也可以看出一张表,所以不满足,不允许表中还有表,一个字段只存储一项信息
第二范式(2NF):第二范式就是在第一范式的基础上属性完全依赖于主键。也可以说是在第一范式的基础上,消除了非主属性对码的部分函数依赖。
比如:学生表中
1 | 学号 姓名 课程 班级 分数 |
可以看出(课程) → (分数)
(学号) → (姓名, 班级)
1.元组:表中的一行就是一个元组。
2.码:一个表中,可以唯一决定一个元组的属性”集合”。假设 k 为表中的某个属性,在 k 确定的情况下,这个表中的其他属性都可以确定,那么 k 就叫做候选码,也叫码。
(学号,课程)这个属性组就叫做码。
3.主属性:码里面的属性就是主属性。
4.部分函数依赖:比如上表中学号和课程组成主键已经不满足 2NF,那么你必须知道这 2 个的值才能知道后面列对应的值,就像 Z=X+Y 一样,你输入一个 X 不知道 Y 无法得到 Z,而 Z=X,Z=Y 就是部分函数依赖。而且这张表数据冗余,可以分成 2 张表
1 | 学号 课程 分数 学号 姓名 班级 |
上面 2 张表属性都完全依赖于主键学号,这就是第二范式
第三范式(3NF): 在 2NF 的基础上,消除了非主属性对于码的传递函数依赖。即,如果存在非主属性对于码的传递函数依赖,则不符合 3NF。
1 | 订单id 商品id 商品尺寸 |
可以看出主键订单 id,满足第二范式,商品 id 依赖订单 id,商品尺寸依赖商品 id,所以不满足第三范式,分成下面 2 张表即可满足
1 | 订单id 商品id 商品id 商品尺寸 |
再比如有字段 学号 学生 系名称 系主任 ,可以看出系名称依赖学号,系主任依赖系名称,像上面拆成 2 表即可
Mybatis
SpringMVC
Spring
Spring 是轻量级企业应用开发框架 IoC 和 AOP 的容器框架 全能具备 MVC 三层功能,不替换任何框架是来整合 N 框架
注解
1 | @Component 配合 类似于给需要注解这个的类new了一下,可以给('变量名')默认小驼峰,比如给LuckyA类添加了这个注解 |
AOP 思想
AOP 的使用场景
异常、安全、日志、权限、事物
位置:前置、后置、环绕、异常、最终
/**
* 这里我们使用注解的形式
* 当然,我们也可以通过切点表达式直接指定需要拦截的package,需要拦截的class 以及 method
* 切点表达式: execution(...)
*
* execution(public * *(..)) 任意的公共方法
* execution(* set*(..)) 以set开头的所有的方法
* execution(* com.LoggerApply.*(..))com.LoggerApply这个类里的所有的方法
* execution(* com.annotation.*.*(..))com.annotation包下的所有的类的所有的方法
* execution(* com.annotation..*.*(..))com.annotation包及子包下所有的类的所有的方法
* execution(* com.annotation..*.*(String,?,Long)) com.annotation包及子包下所有的类的有三个参数,第一个参数为String类型,第二个参数为任意类型,第三个参数为Long类型的方法
* execution(@annotation(com.lingyejun.annotation.Lingyejun))
*/
SpringBoot
1 |