本文主要讲解Java变量、基本数据类型及其对应的包装类型基础细节知识
一、变量
Java变量的定义
任何的语言必须要的恐怕是变量了
在Java中变量是十分的容易上手,于C、C++语言类似,Java的变量声明:
数据类型 变量名;//分号是必须的
变量名命名规则:包括 英文,数字, _ ,$ ,而且不能以数字开头;
变量的定义举个栗子:
1 | int a; |
编译错误是指,在程序运行前,编译器对程序做的一些基本语法的检查错误;
另外要注意的一点:
没有初始化的局部变量不能直接使用,如:
1 | int a; |
如果作为成员变量出现,即这个变量是属于某个类所有,而不属于某个方法函数所有的变量,可以不初始化,其默认的值为对应的0,或者是null
;
二、基本数据类型
基本数据类型:
如图基本数据类型如上图的八种:
字面量:如
1 | int a = 3; //3就是字面量,或者称作直接量 |
使用的时候主要注意的有以下几点:
1、基本类型字面量默认类型
整形类型的字面量默认为int,所以在初始化或者赋值的时候不能超过int的最大值,如果超过;则编译错误,
如下面就是编译错误:
1 | int a = 1000000000000; |
所以当:数值较大的时候要使用long 类型;
1 | long a = 1000000000000L;//加个L代表是long 类型 |
同时double和float也有这样的问题,带小数点的字面量的数据类型为double
1 | float c = 1.222222222222222222;//编译错误 |
正确如下写法,float类型的值明确带个f或者F:
1 | float i = 1.02f; |
2、另外在做运算的时候,要注意不同类型的转换问题
转换如图所示:
排在最右端的是大类型,也就是当把小类型的字面量赋给大类型字面量的时候,会发生类型自动向大类型转化,但是大类型不能直接向小类型转化,需要强制转化如:
1 | double i = 2;//此时的 i 为double |
但是 如果double有小数点的话,强制转化会造成小数点的损失精度,如:
1 | double i = 2.6; |
如果强转为小类型的数据类型的范围较大,会出现异常.如:int i = (int)10000000000000000000000;错误,所以要根据数据类型的具体情况而.
3、变量的作用域
Java语言支持的变量类型有:
- 成员变量
- 局部变量
其实变量的这些分类就如下图一样明了,
- class 中定义的变量 而不属于其他任何方法的变量,叫做成员变量.
- 属于某个方法的变量叫做局部变量
4、 变量作用域和生命周期
作用域:
成员变量的作用域比较大,站得高看得远,这个类的所有的方法都能够”看到它”,都能去用它
局部变量作用域:只在它所在的方法中被使用,其他方法”看不到”这个变量,但是也可以与成员变量同名,但是这个时候成员变量的调用就不能直接调用了要用到this,this说明是这个类的东西.生命周期:
明显的:
成员变量的生命周期和整个类的生命周期是一致的,就是这个类 活到什么时候,这个成员变量就活到什么时候.
局部变量的生命周期和它所在方法的生命周期一致,调用这个方法结束后,这个局部变量就被销毁了.
练一练:
这就像”男人(女人)和 人 分不开,人 和 运动 分不开”一样 ,数据类型 和 变量 是分不开的,变量 和 运算符 也是分不开的.像人天生为分为男女一样,一个变量在声明的时候也要先说明数据类型.
1 | //类的声明一定要大写,而且要与文件同名 |
三、包装类型
基本数据类型对应的包装类型
基本数据类型:byte,int,short, long,boolean,char,float,double
包装类型: Byte,Integer,Short,Long,Boolean,Character,Float,Double
自动拆包装包
包装数据类型不仅仅看上去是把首字母大写了,而且还有了一个本质的变化,那就是摇身一变,变成了引用类型
随着JDK的升级,包装类有了自动拆包(包装类型变成对应的基本类型),装包(基本类型变成对应的包装类型):
例如:
1 | Integer i = new Integer(1);//初始化 |
四、运算符
算数运算符
在发例子之前先了解一下运算符和优先级,其实里面大部分大家都认识了;
特别注意的是++
和--
,++
或--
在变量前,先做自增或自减操作,再用,在变量后面的话,先用变量,然后做自增或自减操作
例如:
1 | int B = 20; |
但B最终都是发生变化的,B = 22;
关系运算符:
Java运算符优先级
当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。
例如,(1+3)+(3+2)*2
,这个表达式如果按加号最优先计算,答案就是 18,如果按照乘号最优先,答案则是 14。
再如,x = 7 + 3 * 2;
这里x得到13,而不是20,因为乘法运算符比加法运算符有较高的优先级,所以先计算3 * 2得到6,然后再加7。
下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。