开课吧T31项目第15天


今天是孤尽班学习的第15天,今天跟着无尘老师学习 浮点数的处理、控制语句的处理、日期类数据的处理、参数校验规则、OPP的编程原则,感谢老师们的辛勤付出,我会继续努力,加油。

项目开发规约

1.浮点数据处理

浮点型数据(float,double):精确度比整形数据精确度低,会存在精度损失问题
java中处理货币应该以整形来存储,以货币的最小单位进行存储,例如 以分为单位,表示时除以100来表示单位元

1.1 浮点数据问题

在数据转换中会出现精度的损失
foloat 有效数据值为23,double的有效数据值为53

例如:5.2F(十进制)转换为二进制保存
转换过程:
1.先转换整数部分 5 转换为 101
2.小数部分使用乘2除整法:0.0011001…
在这里插入图片描述

3.将转换的数值进行科学计数法进行格式化处理
将整数部分转换为整数部分只有一位1,将幂指数增增加为整数部分右移动的部分,初始指数为1,现在指数为2,
101.0011001 转换为1.010011001
将小数部分010011001填充到 有效数值中

在这里插入图片描述,4.移码公式:将整数部分 2+(128-1)=129,2为整数位数值
在这里插入图片描述

1.2 java精确的浮点存储

数据库中定义数据类型:decimal(M,D)
整数部分M存储 0-65,小数部分位数D小于M
java中定义数据类型 java.lang.BigDecimal

判断两个浮点数是否相等只用判断是两个数的差异在一定的范围内,

例如:
float a=1.0F-0.9F
float b=0.9F-0.8F
float diff=1e-6F
if Math.abs(a-b<diff){
System.out.printf(“true”)
}

1.3 浮点数值的使用注意事项

比较浮点数值使用 conpare()比较只会比较数值(-1 不相等,0 相等)
equals 会比较精度同时也会比较数值

禁止使用将 double类型转换为BigDecimal类型

IEEE754 浮点数据计算标准

2.日期类型数据处理

2.1日期数据类型

在这里插入图片描述

2.2 传统日期类的问题

传统日期类是不安全的,类中定义的属性没有final修饰
例如Data:private static BaseCalendar jcal;
日期、时间、时间戳没有明确的对应的类
不能满足格式化和解析的需求

2.3新增API的特性

线程是安全,属性添加了final,初始属性之后不可更改
关注点分离:时间日期都有响应的类
结构清晰,所有的类中,方法都定义完成相同行为
实用操作:实现一系列方法完成通用任务

2.4日期格式化的问题

日期格式化是,传入patten的年份使用 小写y表示
YYYY 表示 本周当前年(跨年的周会让年数产生变化)
yyyy表示 当天当前年
M(月份) 和 m(分钟)
H (24小时类)和h(12小时类)

2.5获取当前毫秒数

new Data().getTime()毫秒
System.nanoTime()纳秒
统计日期使用System.instant

3.控制语句

3.1 控制语句Switch

每个case使用continue/case/return 来终止
添加注释说明程序执行以哪一个case结束
switch块内在呢个价default 放在最后来处理异常
swith应该对判断的值增加空指针异常处理,当值为空指针时,不会执行switch语块,会直接抛出NPE错误

3.2控制语句 if/else

if/else/for/while/do 语句必须使用大括号,保证代码的统一简洁,为了后期维护
异常分支少用if else(if else 属于嵌套,会存在异常)

3.3 控制语句的规约

1.同一个类中定义多个属性为不同的类型包装类,系统会把所有包装类型拆包为同一类型
,会抛出空指针异常
例如:

Interger a=1Interger b=2Interger c=nullBoolean flag=false;
Interger result=flag?a*b:c;

2.不要其他表达式中插入赋值语句(条件判断),赋值会导致条件判断出错和实际不符合
不要在条件判断中增加复杂的语句,提高可读性

3.不要使用取反逻辑,提高代码可阅读性
例如

if(x>52if(!(x<=52)

3.3 高并发中的控制语句

使用区间来判断 不能使用等于来判断,会导致当前值被击穿
场景:对于秒杀场景中使用 数据库底层来处理 和 java处理判断库存数量,
数据库判断更新库存

@UPDATE(update store set count=count-1 where id=#{id} and (count-1)>=0)
Interger updateById(@Pagram(id)Interger id)

java业务层判断更新库存

if((count-1<=1{ Throw Exception}

建议使用数据层判断,数据库语句执行只会锁住当前行,java处理则会锁住整个表

4 程序中参数校验

4.1需要参数校验的场合

1.使用频次较低的方法
2.执行时间很长的方法,避免参数错误,导致程序执行消耗资源
3.需要极其稳定性和可用性的方法
4.对外提供的开发接口(RPC/API/HTTP)
5.公开接口进行入参保护,尤其是批量操作接口

4.2不需要参数校验的场合

循环调用的方法:必须注明外部参数检查
底层调用频繁的方法:例如同一台服务中service 和dao层的参数传递,dao层参数校验可以忽略
被private修饰的方法或者参数

5. OOP

5.1面向对象编程定义

特性:继承、封装、多态
特点:可维护性,可重用性,可扩展性

5.2面向对象编程注意点

1.所有的覆盖方法需要加 @OverWriter
2.相同参数类型,相同业务含义
3.避免使用Object,定义类型
4.可变参数放在参数列表的最后
5.尽量不要使用可变参数
6.对象比较使用常量的值来比较,避免出现NPE
例如:“test.”.equel(Object)

5.3 需要检验参数场合

1.所有的pojo类属性必须使用包装类型赋值
2.定义DO/DTO/VO 等POJO类时,不要设定任何属性的默认值
3.定义数据对象DO类时,竖向类型要与数据库类型相匹配
4.getter 和 setter 方法 不要增加业务逻辑
5.禁止在POJO中,同事存在属性 的is()和get*()方法
6.构造方法中禁止添加任何业务逻辑,如需添加初始化逻辑,在外部构建一个初始化方法,在将初始化方法置入 构造方法中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞扬晴雪

学习的路上,感谢你的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值