3.类型转换
由于Java是强类型语言,所以要进行一些运算的时候,需要用到类型转换。
低 ------------------------------------> 高
byte,short,char-> int-> long-> float-> double//等级由低到高排列
运算中,不同类型的数据先转化为同一类型,然后进行运算。
- 强制类型转换——数据类型由高等级转换成低等级
因为高等级的数据类型的范围往往比低等级的高,由高等级转换成低等级的时候,有可能出现内存溢出的情况。
- 自动类型转换——数据类型有低等级转换成高等级
因为等级低的数据类型范围比等级高的范围小,所以不会出现内存溢出的情况,也不用强制转换。
int类型的范围比byte大(int等级byte高),当int类型的数超出byte的范围时,int类型转换byte类型就会出现内存溢出
下面是有关内存溢出问题的拓展:
①数字的数值比较大时,我们可以用下划线进行分割,下划线不会被输出,这是jdk7版本后的新特性。
②int类型占4个字节的范围(-2147483648 ~ 2147483647),大概在正负21亿之间。上图中money*years
的结果是200亿,很明显已经超过了int类型的范围,我们把这种情况定义为内存溢出。溢出部分会在范围内循环,所以我们会看到图中输出的结果为-1474836480(感兴趣的小伙伴可以自己算一下)
③我们可以通过强制转换把int类型转换为long类型,从而扩大其范围,使数据在数据类型的范围内。但是问题来了,按照图中的方法:long total2 = money*years;
,我们把式子计算的结果转换成long类型后,输出的结果还是-1474836480,而不是200亿?其实仔细想一下我们不难发现,其实这条代码是用int类型的数据计算出一个int类型的结果,再把这个结果转换成long类型,所以它的结果和int类型是一样的。
④我们改变一下思路,用下面一条代码long total3 = money*((long)years);
,在计算前先把式子中其中一个变量转换成long,这样计算结果就会是long的结果,输出200亿
4.变量、常量
变量
变量——可以变化的量
Java是一种强类型语言,每一个变量都必须声明其类型
Java变量是程序中最基本的储存单元,其要素包括变量名,变量类型和作用域
type varName [=value] [{,varName[=value]}]
//数据类型 变量名 = 值;可以使用逗号隔开来声明多个容类型变量。(不建议)
注意事项:
- 每个变量都有类型,类型可以是基本类型,也可以是引用类型
- 变量名必须是合法的标识符
- 变量声明是一条完整的语句,因此每一个声明都必须以分号结束
变量作用域
- 类变量(在类下定义的变量【前面有static】,方法里可以使用)
- 实例变量(在类下定义的变量【无static】,方法里不能直接使用)
- 局部变量(在方法里定义的变量)
public calss Variable{
static int allClicks=0; //类变量
String str="hello world"; //实例变量
public void method(){
int i = 0;// 局部变量
}
}
常量
- 常量(Constant):初始化(initialize)后不能再改变值!不会变动的值。
- 所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
- 常量名一般使用大写字符。
final 常量名=值;
final double PI = 3.14;
变量的命名规范
- 所有变量、方法、类名要
见名知意
- 类成员变量:首字母小写和驼峰原则:mouthSalary(除了第一个单词,后面的单词首字母大写 如:lastName)
- 局部变量:首字母小写和驼峰原则
- 常量:所有字母大写和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:Man,GoodMan
- 方法名:首字母小写和驼峰原则:run( ),runRun()
欢迎大家关注博主的公众号:小黄的阁楼,里面的学习笔记会和CSDN同步,欢迎前来一起学习!!