曦曦xixi
Java后端
·04-20 17:04
Day 1 ✅ 今天做了: 1.回顾cmd基本的dos命令:dir/cd/md/rd/del/ren/java/javac/java/cls/echo —————————————————————— 2.java注释://单行注释、/*多行注释*/ 文档注释:/**@return long 注册成功返回用户唯一ID,注册失败返回-1*/ ①类接口,标注核心功能业务场景设计目标 ②方法,标注核心功能参数含义约束规则返回值说明异常抛出说明 javadoc -d doc UserService.java 生成文档 —————————————————————————— 3.java程序最小单元:变量 = 数据类型+变量名+变量值 数据类型:约束数据种类,分配内存大小 变量名:映射内存实际物理地址的代号 变量值:存储在里面的具体数据 ———————————————————————————— 4.数据类型→基本数据类型+引用数据类型 ①基本数据类型:整型byte(1)/short(2)/int(4)/long(8);整型赋值常量默认为int,long类赋值需要声明L 浮点型:float(4)/double(8);浮点赋值常量默认double,float赋值需要声明F 字符型:char(2):单个英文字母占1,单个汉字占2 布尔型:boolean(1):true or false 包装类:基本数据类型的实例化工具 ②引用数据类型:类、接口、数组…… ———————————————————————— 5.浮点数比较常见误区:2.7==8.1/3(?) 结论:因为十进制转换二进制问题,小数转为二进制的无限循环小数后被有限的物理空间截断为近似值 2.7实际存储数值为2.70000000000000018...;8.1/3实际存储数值为2.6999999999999997... float和double对于小数的存储是近似存储,不能用于要求精度的场景,两小数比较相加等 解决方案:创建BigDecimal对象,传入字符串形式小数,再进行处理。 —————————————————————————— 6.数据类型转换:自动转换/强制转换/String转基本数据类型 6.1自动转换,条件:小转大(小杯的水倒入大水杯)byte<short<char<int<long<float<double ①赋值时的自动转换:int score = 95; double newScore = score; ②运算时的自动转换(坑点):byte、short、char的混合运算会先全部转成int再运算,最后结果只能用int接收 ③传参时的自动转换:类似①,满足方法参数是大范围,传入值是小范围 易发生问题的自动转换: ①int转float/long转double时,可能会丢失精度 虽然float范围比int大,但float的有效位数只有 6~7 位,当int数值超过有效位数时,会丢失精度 int bigInt = 2147483647; // int的最大值 float f = bigInt; System.out.println(f); // 输出2.14748365E9(和原int值2147483647不一致,精度损失) 同理,long的大数值转double也可能丢失精度。 ②byte/short不能自动转char(符号问题) byte/short是有符号类型(范围包含负数),char是无符号类型(范围 0~65535),所以不能自动转换: byte b = 97; // char c = b; // 报错!byte是有符号,不能自动转无符号的char char c = (char)b; // 必须强制转换,此时c='a'(正确) ③布尔类型不参与自动类型转换 6.2强制转换,大转小(大杯的水倒入小杯),不安全有可能数据溢出导致精度损失,需要手动设置显式声明 格式:(目标数据类型) 待转换的变量/数值;double num = 5.5; int numInt = (int) num; 强制转换的几个雷区: ①数值溢出: 例如:Java 整数采用 “补码” 存储,int是 32 位,最大值 + 1 后二进制位全部翻转,最高位(符号位)变成 1,结果变成int最小值(循环溢出)。 安全方案:转换前先判断范围,避免溢出 ②浮点→整型的强制转换只会直接丢弃小数部分,不会做任何四舍五入处理。 安全方案:先用Math.round()实现四舍五入,再强制转换 ③char 与 byte/short 的符号问题 char是无符号类型(0~65535),byte是有符号类型(-128~127),强制转换时保留二进制位,超出范围后符号位变为 1,结果成负数 安全方案:获取真实Unicode值再判断是否超出强转的类型范围 ④byte/short 运算后强制转换的顺序问题 byte a = 10; byte b = 20; byte c = (byte) a + b; // 报错:不兼容的类型 byte/short运算时会先自动转int,(byte) a只是把 a 转成 byte,但 b 还是会转 int,最终结果是 int,无法直接赋值给 byte。 解决方案:byte c = (byte) (a + b); ⑤浮点数强制转换,本身浮点存储就是近似存储,强制转换只会进一步放大精度损失 安全方案:用BigDecimal避免精度丢失,绝对不能用浮点强制转换 6.3基本数据类型与 String 的相互转换 基本数据类型→String:①空字符串 + " " ②String.valueOf() 推荐使用②,可以避免空指针问题 String→基本数据类型 使用其对应包装类的parseXxx()方法(返回基本类型),或valueOf()方法(返回包装类,推荐使用,可兼容 null) 注意事项: ①优先用String.valueOf()转 String:语义清晰,避免拼接空字符串的 “魔法操作”,团队协作更易理解; ②转换数值类型必加异常处理:用try-catch捕获NumberFormatException,并设置兜底值,避免程序崩溃; ③转换前先校验空值 / 格式:先判断String是否为 null / 空,再转换,减少异常触发; ④boolean 转换适配业务场景:不要依赖Boolean.parseBoolean()的默认规则,根据业务(比如 1 = 真 / 0 = 假)自定义判断; ⑤包装类 vs 基本类型:常用包装类(Integer/Double)接收转换结果,方便处理 null 值(比如数据库字段为 null 的场景)。 —————————————————————————————————————————————————————— 7.变量名称:标识符、关键字、保留字 7.1标识符:程序员给变量起的名称 需要按照命名规则,遵守命名规范 命名规则:1.由26字母,0-9,_或$组成 2.不能数字开头 3.不能使用关键字和保留字 4.严格区分大小写 5.不能有空格 命名规范:1.包名全小写 2.类、接口首字母大写 3.变量、方法名首字母小写(驼峰命名法) 4.常量全大写 7.2关键字:在java中有特定用途的标识符,全小写 7.3保留字:在当前版本未作为关键字使用但后续版本有可能变成关键字 📚 今日总结:dos命令、java注释、java变量三要素、数据类型、数据类型转换、变量名称
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP