一、引入
如何在Java程序中存储一些数据?可以采用变量和常量的方式
变量:可以变化的量 人的年龄、身高、体重……
常量:不会变化的量
字面常量(其实就是具体的值):
如:一个小孩的年龄,今年是5岁,明年是6岁。
年龄(age)是变量,今年到明年变得是年龄,而不是5变成了6。
符号常量(真理数字,类似于π这样的数据)
二、变量的声明
变量的声明:我要创建一个变量
变量的声明仅仅是一种声明,不会在内存上实际开辟内存存储数据!
写法:数据类型 变量名;
Java是强类型的编程语言,Java中的任何一个变量都必须明确指明其数据类型。
如: int i; --> int整型 i变量名,i里面可以存储整数类型的值
此时仅仅声明了并未创建空间!
i=10; -->
这时候才会在内存中开辟一个空间,这个空间存储一个值:10
变量声明和定义可以写在同一行上,我们把Demo2.class反编译回来看看:
那么只声明不赋值会怎样?
再把Demo2.class反编译看看:
注意:
(1)我们可以看到,只声明int i; 不会在内存中有任何的处理。只有赋值了(i=10;),它才会在字节码中正式声明一个变量。
(2)int i=10; --> 声明变量同时赋值
“=”右边如果是一段表达式,那么会先运算出表达式的结果,然后再赋值
如:int i=10+10;
(3)可以一次性声明多个变量
int a=1,b=2,c=3,d=4;
(4)变量的值是可以反复修改的
变量是要声明一次类型即可,后面直接使用变量,不需要反复声明其类型。
这样写是不可以的:
int x=11;
System.out.println(x);
int x=12;
System.out.println(x);
可以这样写:
三、变量的作用范围
1、局部变量
方法内/方法块内/多条件分支或者循环内声明的变量,仅能在当前方法内/代码块内/多条件分支或者循环内。
2、成员变量(全局变量)
声明在方法之外的变量,可以通过访问修饰符控制访问范围,但是至少可以在当前类内部可见。
为什么只输出了一个20?
a方法只是写了,并没有执行。
程序启动,只执行主方法的代码,并没有执行a方法中的代码。
虽然没有执行,但也没有报错,说明z在a方法中也是识别的,只不过没有实现而已。
四、常量
不可修改的变量 --> 常量
字面值常量:1 2 3 4
符号常量:圆周率
变量的值是可以修改的:
我们加上“final”来修饰“i”,看看会发生什么:
final修饰的变量叫做“常量”,只能赋值一次,不可以修改值!
五、进制及其转换
类型
1、十进制:
0,1,2,3,4,5,6,7,8,9
逢十进一 人类喜欢的进制 45个算法
2、二进制:
0,1
逢二进一 计算机底层的进制 运算快 、运算准确 4个算法(0+0/1+1/0+1/1+0)
3、八进制:
逢八进一
4、十六进制:
逢十六进一
例子
(1)把十进制转化为二进制
为了将一个十进制转换成二进制数,可以采用将其不停地除以二进制的基数 2,直到商为0,然后将每一步的得到的余数串起来,从左向右书写,就是我们所要转换的二进制数。
(2)二进制(101110)转化为十进制
由于所处处的位置不同,每个数位都有一个不同的放大倍数,称为“ 权 ”。每个数位的权是这样计算的:从右向左开始,以基数为底,指数从0开始递增的幂比如一个二进制数10110001,它的基数是2,所以要这样计算它等值的十进制数。:
10110001 = 1×2 + 0×2 + 1×2 + 1×2 + 0×2 + 0×2 + 0×2 + 1×2 = 177天
(3)八进制 转换为 十进制
例如:八进制 16
1*8^1 + 6*8^0 = 14
(4)十进制 转换为 八进制
(5)八进制 到 二进制
可以把十进制当做一个“中转站”
八进制--》十进制--》二进制
实际上我们也不用这么麻烦,我们可以直接使用程序员计算器:
(6)十六进制 到 十进制
要把一个十六进制数转换成我们熟悉的十进制数,我们采用和前面一样的方法。只不过, 各个计算数位的权时,幂的底数的英文16.比如将十六进制数125转换成十进制数的方法如下:
125H = 1×16 + 1×16 + 1×16 = 293D
(7)十进制到十六进制的转换
要把一个十二进制数转换成十六进制数,则可以采取不停地除以16并取其余数的策略。
(8)二进制到十六进制的互换
如果将一个二进制数从右向左,分成4比特为一组的形式,分别将一组的值转换成十六进制数,就可以得到这个二进制数所对应的十六进制数。