代码的评审
结对编程
走查等等
通过审查文档就可以直接发现问题
轻量级代码评审
实时的监控制度
静态代码分析
checkstyle等软件和工具
作用
提升代码和编程能力
bugs、代码风格、java语言本身用法不同、错误使用结构
动态代码分析
执行后收集数据 分析不足
测试和调试的不同
测试发现错误
调试确定错误的位置
二者都不可以提高代码质量
重构
在不改变功能的前提下优化代码
不同于迭代的优化
重构的工具有很多也有很多的方法 很多的研究
build不同于construction
05 数据类型和类型检验
主题
数据类型的基本知识,静态\动态检查
可变数据的危险性
不变数据的优越性
snapshot图理解数据类型
用集合类表达复杂数据类型
本章:理论基础ADT、技术基础OOP
数据类型和变量
常见数据类型:int string char .....
变量:用特定数据类型定义
基础数据类型:int long boolean double char
对象数据类型:string biginteger
以上两种数据类型不能在差异
不可变/可变的重点讲解
对象形成层次结构
继承关系:
封装基本数据类型
操作符
运算
+:字符串中就是连接
直接使用操作符或者调用函数(sin)
静态数据检查和动态数据检查、
类型转换
不可以吧高标准的赋值给低标准的
静态类型语言
在没有执行的时候可以推断:
语法错误(动态检查也会检查语法只不过不检查数据类型)、类名/函数名错误、参数数目错误、参数类型、返回值类型
静态检查:数据类型的检查
动态检查
只有运行阶段才可以知道是否正确
动态检查:非法参数、非法返回值、越界、空指针
动态检查:关于值的检查
结论
基本数据类型不是真正的数字
强制类型转换
溢出问题
例子
java不把整数和布尔值混淆:静态
溢出:不正确(不是动态检查)
没有类型转换:不正确(不是动态检查)
运算错误:动态错误
double的类型很特别:不正确(不是动态检查),所以不同于上一个
可变和不可变
改变一个变量:就是改变存储空间
改变变量的值:将储存空间中的物品改变
不变性
重要的设计原则
一旦被创建值不可以变
final 就代表不可变了
final尽量用在局部变量
扩展:
字符串是一个不可变的类型
新生成了一个类型
stringbuilder 是一个可以变的
区别
只有一个引用时二者没有区别
多个引用的时候:
就是string:多个引用的时候其实是进行了大量的靠北
stringbuilder:就是只在一个里边修改
可变类型的优势和劣势![](https://i-blog.csdnimg.cn/blog_migrate/e6fa4827b6cb3b08b0435d1a81bda590.png)
危险:
性能和安全的对抗
例子:
执行方法后可能就修改了原来的数据
改进
防御式拷贝
使用不可变类型
结论
存在多个引用的话建议使用不可变
闪图
运行时的内部状态
优点
便于交流
便于刻画
便于思路清晰
基本类型
对象类型
变量
双层圈代表不可变
单层代表可变
final的应用双线
引用不可变但是值可变
可变的引用,也可指向不可变的值
例子:final应用 但是值可以改变 所以sb只能指向这个空间 但是可以修改值 输出abcd
输出abcde 原理闪图如下