栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

开课吧T31项目第15天

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

开课吧T31项目第15天

T31项目第15天
    • 项目开发规约
    • 1.浮点数据处理
      • 1.1 浮点数据问题
      • 1.2 java精确的浮点存储
      • 1.3 浮点数值的使用注意事项
    • 2.日期类型数据处理
      • 2.1日期数据类型
      • 2.2 传统日期类的问题
      • 2.3新增API的特性
      • 2.4日期格式化的问题
      • 2.5获取当前毫秒数
    • 3.控制语句
      • 3.1 控制语句Switch
      • 3.2控制语句 if/else
      • 3.3 控制语句的规约
      • 3.3 高并发中的控制语句
    • 4 程序中参数校验
      • 4.1需要参数校验的场合
      • 4.2不需要参数校验的场合
    • 5. OOP
      • 5.1面向对象编程定义
      • 5.2面向对象编程注意点
      • 5.3 需要检验参数场合

今天是孤尽班学习的第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 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=1;
Interger b=2;
Interger c=null;
Boolean flag=false;
Interger result=flag?a*b:c;

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

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

if(x>52) 
if(!(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.构造方法中禁止添加任何业务逻辑,如需添加初始化逻辑,在外部构建一个初始化方法,在将初始化方法置入 构造方法中

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/458817.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号