编程语言基础《2》
2.6变量
1什么是变量
1,变量本质上就是内存中的一块空间。
2,变量包含三部分:数据类型、名称、字面值(数据)。
3,变量是内存中存储数据的最基本的单元。
2数据类型
1,数据类型不一样,在内存中开辟的空间大小也是不一样的。
2,数据类型的作用:指导JVM在运行阶段应该开辟多大的内存空间。
3变量要求
变量中存储的具体“数据”必须和变量的“数据类型”一致,否则,编译时会报错。
4声明变量
1,数据类型 变量名; 例如,【int num;】
2,变量在一行可以声明多个:【int a,b,c;】
5声明变量并赋值
1,变量名 = 字面值; 例如,【int num = 10;】
1,在这里“=”叫赋值运算符,它先运算等号右边的表达式,然后将结果赋值给左边的变量。
2,变量赋值之后,可以重新赋值,变量的值是可以变化的。
int num = 10;
System.out.println(num); // 10
num = 20;
System.out.println(num); // 20
num = 100;
System.out.println(num); // 100
2,有了变量的概念以后,内存空间就得到了重复的使用。
3,变量必须声明且赋值以后才能访问。int i; 程序执行到这里,内存空间并没有开辟出来,程序是无法访问的。
4,一行上可以同时声明多个变量,但不能同时赋值,只会对最后一个起到赋值作用。
int a,b,c = 300;
只有c被赋值为300,a和b均没被赋值,所以,这种写法会报编译错误。
5,在同一个“作用域”中,变量名不能重名,但可以重新赋值。
public static void test1(){
int i = 100;
System.out.println(i); // 100
i = 200;
System.out.println(i); // 200
int i = 90;
System.out.println(i); // 报错,因为之前已经有一个变量i了,不能再命名一个变量i。
}
7访问变量的两种形式
1,读取变量中保存的具体数据:get(获取)
2,修改变量中保存的具体数据:set(设置)
8变量作用域
1,作用域:就是变量的有效范围。
2,变量出了大括号就不管用了
9变量的分类
1,根据变量声明的位置
1,局部变量:在方法体中声明的变量
2,成员变量:在方法体外【类体之中】声明的变量
2,在不同的作用域中,变量名是可以重名的。
2.7数据类型详解
1,数据类型的作用指导JVM在运行阶段应该开辟多大的内存空间。
1分类
1,基本数据类型
2,引用数据类型
2基本数据类型
1,整数型:byte、short、int、long
2,浮点型:float、double
3,布尔型:boolean
4,字符型:char
3字符串和字符
字符串"abc"属于引用数据类型
4基本数据类型占用空间
基本数据类型 占用空间大小【单位:字节】
-------------------------------------------------------------------
byte 1 取值范围(-128~127)
short 2
int 4
long 8
float 4
double 8
boolean 1
char 2 取值范围(0~65535)
----------------------------------------------------------------
5八种基本数据类型的默认值
8种基本数据类型 默认值
-------------------------------------------
1,byte short int long 0
2,float double 0.0
3,boolean false【0】
4,char \u0000
注意:char类型变量可以存储一个中文字符(2个字节)UTF-8中一个中文是3个字节。
6转义字符 \
1,各种含义的转义字符表示
1,换行符:\n
2,制表符(Tab):\t 注意:制表符和空格不一样,它们的ASCII值不一样。
3,反斜杠:\\
4,单引号:\'
2,该目录下有一个转义字符的工具:C:\Windows\System32\cmd.exe
1,输入命令:native2ascii.exe 进入编辑状态,输入你想编写的文字,它就会转义成Unicode编码形式的文字。
2,你最近过的还好吗?----> \u4f60\u6700\u8fd1\u8fc7\u7684\u8fd8\u597d\u5417\uff1f
7整数型
1,java中整数型的字面值默认是int类型。
2,java中long类型的数值要在后面添加“L”,例如:34244324L。
3,java语言中的整数型字面值有三种表示方式
1,十进制
2,八进制:以0开始 例如,010
3,十六进制:以0x开始 例如,0x10
4,示例:long x = 456;
1,456默认是int类型
2,long类型比int类型的取值范围大,小容量的可以自动转换为大容量的,不会报错
3,存在类型转换。
5,示例:long z = 2147483648;
1,会报编译错误:过大的整数。
2,2147483648默认被当做int类型4个字节处理,但它超出了int类型的取值范围
3,解决方法:long z = 2147483648L;这就表示把该数字当成了long类型来存储,就不会报编译错误了。这样也就 不存在类型转换了。
6,大容量的强转为小容量会损失精度,造成数据不准确
long x = 100L;
int y = x;
int y = (int)x; // 将long类型的数据强转为int类型
总结:强转的话,编译不会报错,但在运行期间会损失精度。
8浮点型
1,分类
float 单精度 4个字节
double 双精度 8个字节(默认)
2,double的精度太低(相对而言),不适合做财务软件。
但是sun公司准备了更高精度的引用数据类型:java.math.BigDecimal。
3,javaSE类库的源码和字节码位置:
SE类库的字节码:C:\Program Files\Java\jdk1.8.0_202\jre\lib\rt.jar
SE类库的源码:C:\Program Files\Java\jdk1.8.0_202\src.zip
4,想要自定义指定浮点型的具体类型,在字面值后面添加“F或者f”;比如,float s = 5.1f;
5,double和float在计算机内部二进制存储的都是近似值。
9布尔型
1,boolean的两个值:true和false。
2,底层存储boolean类型占用1个字节,false是0,true是1
3,布尔类型经常使用在逻辑运算和条件控制语句当中。
10基本数据类型之间互相转换
1,小容量向大容量转换叫自动类型转换,容量从小到大排序
byte < short < int < long < float < double
char <
注意:
任何浮点类型不管占用多少个字节,都比整数型容量大。
char 和 short可表示的种类数量相同,但char可以去更大的正整数。
2,大容量转小容量叫强转,需要加强制类型转换符。程序才能编译通过,但在运行阶段会损失精度,需要谨慎使用。
3,当整数字面值没有超出byte、short、char的取值范围,可以直接赋值给byte、short、char类型的变量。
4,char num = 97; 表示int类型的97赋值为char型的变量num,存在类型转换,int类型转为char类型。
5,byte、short、char混合运算时各自先转换成int类型再做运算。
6,多种数据类型混合运算,先转换成容量大的类型再运算。
7,注意:
byte b = 3; 可以编译通过,3没有超出byte类型取值范围。
int i = 10;
byte b = i / 3; 编译报错,编译器只检查语法,不会“运算”i/3,
2.8运算符
1算数运算符
1,内容
+ 求和
- 相减
* 乘积
/ 商
% 求余数【取模】
++ 自加1 【单目运算符】 可以出现在变量前面或后面;比如,int k = 10; k++; ++k;
-- 自减1 【单目运算符】
2,总结
1,无论++运算符出现在变量前或者变量后,只要运算结束,该变量的值一定会自加1.
2,++出现在变量后面(k++):先做赋值操作,再对变量中保存的值做自加1运算。
int num = 10;
int sum = num ++;
System.out.println(num); // 11
System.out.println(sum); // 10
3,++出现在变量前面(++k):先做自加1运算,再做赋值操作。
int m = 20;
int n = ++m;
System.out.println(m); // 21
ystem.out.println(n);// 21
4,示例:
int e = 100;
System.out.println(e ++); // 100 先赋值,100
System.out.println(e); // 101 先赋值,再运算,结果:101
----------------------------------------------------------------------------------------
int s = 100;
System.out.println(++s);//101 先运算,自加1是101
System.out.println(s); // 101 运算后是101,再赋值给变量s,结果是101
2关系运算符
1,内容
> 大于
>= 大于等于
< 小于
<= 小于等于
!= 不等于
== 等于
= 赋值
2,关系运算符的结果一定是布尔类型true或false。
3逻辑运算符
1,内容
& And 逻辑与 有车有房就为真,少一样就是假。
| Or 逻辑或 车和房有一样就为真,都没有就是假。
! Not 逻辑非 取反,!false是真;!true是假。
^ 逻辑异或 两边的算子只要不同就是真。相同就是假。
&& 短路与
|| 短路或
2,逻辑运算符要求两边的算子都是布尔类型,并且运算结果也是布尔类型。
3,“逻辑与和逻辑或”与“短路与和短路或”最终运算结果是相同的,只不过“短路与和短路或”存在短路现象。
int x = 10;
int y = 8;
System.out.println(10 < 8 && ++x < y);
System.out.println(x);// 10
注意:短路与(&&),由于10 < 8 为false,而逻辑运算符是短路与,存在短路现象,后面的 ++x < y 就没有执行的必要了,
这就是短路现象,所以结果为false。
4,如果希望两个表达式都执行的话就是用逻辑与。
5,从某个角度来看,短路与更智能,因为后面的表达式可能不执行,所以执行效率比较高,实际开发中使用频率也比较高。
4赋值类运算符
1,基本赋值运算符:=
2,扩展赋值运算符:+= -= *= /= %=
1, byte x = 10;
x += 5;// 等同于x = (byte)(x+5),并不等同于:x = x + 5;
x += 1000; // 等同于x = (byte)(x + 1000)
2,扩展类赋值运算符不改变运算结果的数据类型,比如,最初你的z是byte类型,不管加多少次,结果都是byte 类型。
5字符串连接运算符
1,有字符串参与,“+”表示连接字符串。没有字符串参数,“+”表示求和运算。
a = 100;
b = 200;
System.out.println(a + "+" b + "=" + (a+b)); //100 + 200 = 300
6三元运算符
1,语法规则:布尔表达式 ? 表达式1:表达式2
2,执行原理:
1,如果布尔表达式的值为真,就把表达式1的执行结果作为整个运算的结果返回。
2,如果布尔表达式的值为假,就把表达式2的执行结果作为整个运算的结果返回。
3,示例:
sex = true;
c = sex ? '男':'女';
System.out.println(c);//男

浙公网安备 33010602011771号