变量及使用
标识符
表示各种各样的名字,也包括变量名,总的来说是一个表示名字的字符串
命名规范
开头必须是:
大小写字母
下划线
美元符号$
Unicode 字符集中编号为0xC0以及它后面的所有符号
- (包括世界上绝大多数国家的语言字符,当然包括中文)
- 0xC0是一个十六进制数
组成必须是:
0-9数字
大小写字母
下划线
美元符号$Unicode 字符集中编号为0xC0以及它后面的所有符号
- (包括世界上绝大多数国家的语言字符,当然包括中文)
注意事项:
不能以数字开头
不能是Java中的保留字和关键字
严格区分大小写
约定俗成的规范
总体原则:不要使用拼音和汉字(专用另说)
命名方式
-
大驼峰
类名、接口名、注解名
-
小驼峰
变量、方法
包名
包名禁止大写
一级包名尽量只有一个单词,多个单词时分包, 域名反转
包名为单数名词
注意:
下划线加数字可以控制排序
除开以上:
标识符的命名尽量不要使用下划线和$
常量
在程序运行过程中,值可能发生改变的量
字面值常量
在Java中,所有直接写值的量都是字面值常量
整数
小数
字符
字符串
空常量---引用数据类型变量的独有取值,只有null一个
自定义常量
变量
在程序运行过程中,值一定不会发生改变的量
变量使用前需要声明和初始化
声明
声明变量的目的是告诉编译器,变量的数据类型和变量的名字
-
语法:
数据类型 变量名;
-
局部变量
仅仅声明的局部变量没有任何意义,相当于代码中根本没这个东西
编译器在编译代码时,会自动忽略掉代码中的未初始化局部变量main方法内部的String也要初始化后才能使用
初始化
局部变量初始化 = 赋初始值的过程
注意事项
Java当中的整数字面值常量,默认当作int处理
Java当中的小数字面值常量,默认当作double处理
虽然Java语法允许一行定义多个相同数据类型的变量,但规范的Java代码禁止这样做
浮点数
精度问题
/* 十进制在表示小数时,经常会出现无限循环的情况,比如10/3,就是一个无限循环小数
* 到了二进制当中,二进制小数也可能出现无限循环的情况
* 典型的就是二进制小数0.1
* 十进制的0.1如何转换成二进制的0.1呢?
* 十进制正小数(0.开头)转换成二进制,先用小数部分乘以2,取结果的整数部分(必然是1或者0),
* 然后小数部分继续乘2
* 直到小数部分为0,或者已经达到了最大的位数
* 最终的结果(0.开头)正序排列
* 0.1 --> 二进制0.1
* 0.1 * 2 = 0.4 ---> 0
* 0.4 * 2 = 0.8 ---> 0
* 0.8 * 2 = 1.6 ---> 1
* 0.6 * 2 = 1.2 ---> 1
* 0.2 * 2 = 0.4 ---> 0
* ....
* 二进制0.1本身就是一个无限循环小数,再加上浮点数本身的有效位数就有限
* 所以浮点数的0.1用double表示和float表示,完全不是同一个数
*
* 以有效位数来说
* float的有效位数,大概是7~8位
* double的有效位数,大概16~17位
*/
数据类型转换
Java中变量的数据类型由某一种转换为另一种
自动类型转换
基本数据类型的数据类型转换必须在byte、short、int、long、float、double这些数值类型和char类型之间进行
boolean类型不参与基本数据类型的数据类型转换。(布尔类型不能做任何类型转换)
不需要写额外代码,完成类型转换, 是编译器主动帮助完成类型转换
转换条件
把小取值范围的数据类型 --> 大取值范围的数据类型
注意:
- 浮点数的所有类型取值范围都远大于任何整型以及char类型
- 基本数据类型的自动类型转换,全程无需写额外代码,那么它是绝对安全的吗?会不会带来数据失真呢?
有可能
当int --> float时就会
long --> float
long --> double 也会 - char类型作为数值类型,取值范围是[0,65535], 所以char类型的自动类型转换需要从int类型开始
强制类型转换
概念:
指的是编译器不会自主完成类型转换,需要程序员写额外代码完成类型转换
语法:
强转后的数据类型 变量名 = (强转后的数据类型)被强转的变量;
转换的条件:
把大取值范围的数据类型 --> 小取值范围的数据类型
问题:
出现数据丢失失真的情况
表达式类型提升
概念:
如果表达式当中存在多种数据类型变量参与运算,由于表达式的运算结果是唯一的,那么结果变量的数据类型将会提升到"最大取值范围"的那个
注意:
1. byte,short,char类型之间只要参与运算,那么结果一定是int
2. 只要表达式中存在任一变量,那么表达式的最终结果数据类型就遵循"表达式的类型提升"

浙公网安备 33010602011771号