目录
一、 标识符
1、 概念
2、 标识符的规范
(1) 类和接口
(2) 变量和方法
(3) 常量
二、 数据类型
1、 数据类型定义及默认值
2、数据类型自动转换
(1) 总结
(2) 与C++的不同点
(3) 原理
3、 强制转换
一、 标识符
1、 概念
Java语言中,对于变量,常量,函数,语句块也有名字,我们统统称之为Java标识符。
标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。
2、 标识符的规范
使用26个字母的大小写或数字还有“_”,“$”,数字和C++一样不能写在开头,但在Java中是区分大小写的(如HelloWorld和helloworld)。
(1) 类和接口
首字符大写,如果是多个单词,则每一个单词的首字符都要大写(如HelloWorld)。
(2) 变量和方法
第一个单词的首字符小写后续的单词首字符大写(和JS的函数命名规则一样,如helloWorld,俗称驼峰模式)。
(3) 常量
多个单词定义常量的时候每个单词都大写,单词之间使用“_”隔开(如HELLO_WORLD)。
二、 数据类型
1、 数据类型定义及默认值
序号 | 数据类型 | 大小/位 | 封装类 | 默认值 | 可表示数据范围 |
1 | byte(位) | 8 | Byte | 0 | -128~127 |
2 | short(短整数) | 16 | Short | 0 | -32768~32767 |
3 | int(整数) | 32 | Integer | 0 | -2147483648~2147483647 |
4 | long(长整数) | 64 | Long | 0 | -9223372036854775808~9223372036854775807 |
5 | float(单精度) | 32 | Float | 0.0 | 1.4E-45~3.4028235E38 |
6 | double(双精度) | 64 | Double | 0.0 | 4.9E-324~1.7976931348623157E308 |
7 | char(字符) | 16 | Character | 空 | 0~65535 |
8 | boolean | 8 | Boolean | flase | true或false |
2、数据类型自动转换
(1) 总结
1、 int 一旦达到最大值会损失精度。
2、 任何整数类型和long类型做运算都会转换成long类型。
3、 常量再做运算的时候只要不超出定义的数据类型的范围(范围如上表)就不会报错。
4、 float类型和所有整数类型计算都会转换成float。
5、float类型和常量计算时不会有类型提升。
6、 double类型和float类型计算会转换为double类型;
规律:小空间的数据类型和大空间的数据类型的数计算会向大空间的数据类型去转换。
(2) 与C++的不同点
float类型和c++有所不同,如java定义float a=1; 与float a = 1f;
float a =1 在这里是整型,当赋值给一个float的时候,存在一个隐式转换,但不损失精度。
float a=1f 在这里就是float类型。
如果定义成float=1.0;就肯定会报错,因为1.0是double类型的。double范围比float大,为了不损失精度,不会自动转换。这时就必须写成float a=1.0f;
(3) 原理
变量在做计算的时候可能存在溢出的情况,Java就采用自动类型转换来解决这个问题。
给大家举个栗子吧~ byte、short、char在计算的时候会自动的提升数据类型到int(int和其它数值计算也会溢出,int不会自动提升类型而是直接损失精度)。
在二进制里面,一个int是4个字节,最大的值是 0111 1111 1111 1111 1111 1111 1111 1111,此时如果在最低位上加1,则数值为1000 0000 0000 0000 0000 0000 ,二进制的最高位是符号位,则此时该数变成了一个负数,这个负数是多少呢?
3、 强制转换
大空间的类型向小空间的类型去转换。
int类型的8 | 0000000 0000000 0000000 0001000 |
short类型的8 | 0000000 0001000 |
byte类型的8 | 0001000 |
强制转换的语法和c++一样:(目标数据类型)变量名。
int i=10;
byte b = (byte)i;
注意:
① 小数转换整数会舍弃小数位(非四舍五入)。
② 如果把整型强制转换成byte有可能会损失精度。原因:转换变量的值可能会超过目标类型的最大范围。