Java 变量类型学习笔记详细版一、Java 变量概述在 Java 中变量是存储数据的容器。每个变量都有特定的类型决定了它可以存储的数据种类和大小。变量的基本要素变量名标识符遵循命名规则数据类型决定变量能存储的数据类型变量值变量当前存储的数据二、Java 变量分类Java 变量主要分为两大类基本数据类型变量Primitive Types引用数据类型变量Reference Types三、基本数据类型变量Java 提供了 8 种基本数据类型分为四类1. 整数类型Integer Types类型关键字字节数取值范围默认值字节型byte1 字节-128 ~ 1270短整型short2 字节-32,768 ~ 32,7670整型int4 字节-2³¹ ~ 2³¹-10长整型long8 字节-2⁶³ ~ 2⁶³-10L使用示例byteage25;shortyear2024;intpopulation1400000000;longdistance9460000000000L;// 注意long 类型需要加 L 后缀注意事项整数默认是int类型long类型字面量需要加L或l后缀推荐L避免与数字 1 混淆整数运算默认返回int超过范围会溢出2. 浮点类型Floating-Point Types类型关键字字节数精度取值范围默认值单精度float4 字节6-7 位有效数字±3.4×10³⁸0.0f双精度double8 字节15 位有效数字±1.7×10³⁰⁸0.0d使用示例floatprice19.9f;// 注意float 需要加 f 或 F 后缀doublepi3.141592653589793;// double 是默认浮点类型doubletemperature-23.5;注意事项浮点数默认是double类型float类型字面量需要加f或F后缀浮点数运算可能存在精度问题不适合精确计算如货币计算精确计算应使用BigDecimal3. 字符类型Character Type类型关键字字节数取值范围默认值字符型char2 字节0 ~ 65,535 (Unicode)‘\u0000’使用示例chargradeA;charsymbol$;charchineseChar中;charnewline\n;// 转义字符chartab\t;注意事项使用单引号 包裹支持 Unicode 字符集支持转义字符\n,\t,\r,\\,\,\char类型本质上是无符号整数可以参与算术运算4. 布尔类型Boolean Type类型关键字取值默认值布尔型booleantrue或falsefalse使用示例booleanisStudenttrue;booleanhasPermissionfalse;booleanisValid(age18);注意事项只有true和false两个值不能与整数类型相互转换主要用于条件判断和逻辑运算四、引用数据类型变量引用类型变量存储的是对象的引用内存地址而不是数据本身。1. 类Class// 定义类classPerson{Stringname;intage;voidsayHello(){System.out.println(Hello, Im name);}}// 使用类PersonpersonnewPerson();person.name张三;person.age25;person.sayHello();2. 接口InterfaceinterfaceDrawable{voiddraw();}classCircleimplementsDrawable{publicvoiddraw(){System.out.println(Drawing a circle);}}DrawabledrawablenewCircle();drawable.draw();3. 数组Array// 一维数组int[]numbers{1,2,3,4,5};String[]namesnewString[3];names[0]Alice;names[1]Bob;names[2]Charlie;// 二维数组int[][]matrix{{1,2,3},{4,5,6},{7,8,9}};4. 枚举EnumenumDay{SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY}DaytodayDay.MONDAY;if(todayDay.MONDAY){System.out.println(今天是星期一);}5. 字符串StringStringname张三;StringmessagenewString(Hello World);Stringcombinedname message;五、变量的声明与初始化1. 声明变量intage;Stringname;doubleprice;2. 初始化变量// 声明并初始化intage25;Stringname张三;// 先声明后初始化intcount;count100;// 多变量声明intx1,y2,z3;StringaA,bB;3. 变量作用域publicclassVariableScope{// 类变量成员变量intclassVariable10;publicvoidmethod(){// 方法变量局部变量intmethodVariable20;if(true){// 块变量intblockVariable30;System.out.println(blockVariable);}// System.out.println(blockVariable); // 错误块变量在块外不可见}}作用域规则类变量整个类中可访问方法变量方法内可访问块变量代码块内可访问局部变量必须初始化才能使用成员变量有默认值六、类型转换1. 自动类型转换隐式转换小类型 → 大类型自动进行inta100;longba;// int → long自动转换doubleca;// int → double自动转换charchA;intnumch;// char → int自动转换65转换规则byte→short→int→long→float→doublechar→int→long→float→double2. 强制类型转换显式转换大类型 → 小类型需要强制转换doubleprice19.99;intintegerPrice(int)price;// 19小数部分被截断longbigNum1000L;intsmallNum(int)bigNum;// 1000doubled3.14;inti(int)d;// 3注意事项可能丢失精度可能溢出浮点数转整数会截断小数部分3. 字符串转换// 数字转字符串intnum123;Stringstr1String.valueOf(num);Stringstr2num;// 字符串转数字Stringstr456;intnum1Integer.parseInt(str);doublenum2Double.parseDouble(str);七、常量1. 常量的定义// 使用 final 关键字定义常量finaldoublePI3.1415926;finalintMAX_SIZE100;finalStringNAME张三;2. 常量命名规范全部大写字母单词间用下划线分隔例如MAX_VALUE,PI,DEFAULT_TIMEOUT3. 常量分类publicclassConstants{// 编译期常量publicstaticfinaldoublePI3.1415926;// 运行期常量publicstaticfinalStringDATE;static{DATEjava.time.LocalDate.now().toString();}// 实例常量publicfinalStringID;publicConstants(Stringid){IDid;}}八、变量命名规范1. 命名规则只能包含字母、数字、下划线_、美元符号$不能以数字开头不能是 Java 关键字区分大小写2. 命名约定变量名小驼峰命名法camelCaseuserName,studentAge,totalCount常量名全大写字母下划线分隔MAX_VALUE,PI,DEFAULT_TIMEOUT类名大驼峰命名法Person,StudentManager3. 命名建议使用有意义的名称避免单字母命名除循环变量等特殊情况保持名称简洁明了遵循团队命名规范九、常见错误与注意事项1. 变量未初始化intage;System.out.println(age);// 编译错误局部变量未初始化2. 类型不匹配intnumhello;// 编译错误类型不匹配doubled10;// 正确int 自动转换为 doubleinti10.5;// 编译错误需要强制转换3. 作用域错误if(true){intx10;}System.out.println(x);// 编译错误x 在块外不可见4. 整数溢出intmaxInteger.MAX_VALUE;intoverflowmax1;// 溢出结果为 -21474836485. 浮点数精度问题doublea0.1;doubleb0.2;doublecab;// 结果可能是 0.30000000000000004十、最佳实践1. 变量初始化// 推荐声明时初始化intcount0;Stringname;// 不推荐延迟初始化intcount;count0;2. 选择合适的数据类型// 根据实际需求选择类型intage25;// 年龄用 intdoubleprice19.99;// 价格用 double 或 BigDecimalchargradeA;// 等级用 charbooleanisActivetrue;// 状态用 boolean3. 使用常量代替魔法数字// 不推荐if(age18){// ...}// 推荐finalintADULT_AGE18;if(ageADULT_AGE){// ...}4. 避免过度使用强制类型转换// 不推荐inta(int)10.9;intb(int)10000000000L;// 推荐选择合适的数据类型doublea10.9;longb10000000000L;5. 注意变量作用域// 推荐最小作用域原则for(inti0;i10;i){// i 只在循环内有效}// 不推荐扩大作用域inti;for(i0;i10;i){// i 在循环外仍然有效}十一、总结变量类型选择指南使用场景推荐类型小整数-128~127byte中等整数-32768~32767short一般整数int大整数long单精度浮点数float双精度浮点数double精确计算货币BigDecimal单个字符char布尔值boolean文本String对象相应类类型集合数组或集合类关键要点Java 是强类型语言变量必须声明类型基本类型存储实际值引用类型存储引用自动类型转换从大到小强制转换从小到大局部变量必须初始化成员变量有默认值遵循命名规范提高代码可读性选择合适的数据类型避免精度丢失和溢出十二、练习题基础题声明一个int类型的变量赋值为 100声明一个double类型的变量赋值为 3.14声明一个char类型的变量赋值为 ‘A’声明一个boolean类型的变量赋值为true进阶题将double类型的变量强制转换为int类型将int类型的变量自动转换为long类型定义一个常量表示圆周率声明一个字符串变量并连接其他字符串思考题为什么浮点数运算可能存在精度问题什么时候应该使用long而不是int局部变量和成员变量有什么区别如何避免整数溢出