Day02 课程安排
--------------------------------------------------------------------------------------------------------
1、变量
2、变量的类型
Day02-1
1、变量的概念
变量对应内存中的一块区域
2、变量的作用
主要用于操作内存中的数据
3、变量的定义(类型、名字、作用域)
(1)变量必须有类型。(Java是一种强类型(脚本语言弱类型)的语言)
(2)变量必须有名字。(必须遵循标识符的定义)
(3)变量必须有作用域(作用范围)。
以上三者统称之为变量三要素(变量类型、变量名字、变量作用域不包括变量取值)
程序中变量的定义:(目前要写在方法内部)
定义变量太多会造成程序效率下降
说明:
(1) 作用域重合,名字相同的变量不能重复定义
(2) 变量的位置,定义在方法的内部。(此变量为局部变量)
(3) 多个变量的定义中间使用逗号隔开。
4、变量的赋值(初始化)
(1)定义时初始化
(2)先定义再初始化
说明:
局部变量使用前必须初始化(赋值)
5、变量的类型
认识变量的类型
(1)每个变量都应该有一个类型,根据类型不同来决定变量在内存中的储存结构
(2)在Java体系中变量可分两大类型
a) 基本数据类型(8种):数值型:(整型4个浮点型2个),字符型:布尔型
b) 引用数据类型
整型(byte,short,int,long)
所有整型数据计算时候都可能出现溢出现象
字面值(字面量)只有十进制八进制十六进制 二进制为底层数据不能直接出现
Byte b1=20(所有的数据底层以二进制形式存储)
Byte b2=0x70(16进制字面值(以0x打头))
Byte b3=010(8进制数据字面值(以0打头))
a) byte(-128~127)(1byte=8bit,1M=1024byte,1G=1024M,1t=1024G)
b) 短整型数据(2byte,16bit,-32768~32767)(不常用,兼容性差)
c) 整型()
1 00000000 00000000 00000000 00000000
-1(负数在计算机中以补码(源码取反加1表示))
源码 10000000 00000000 00000000 00000000
反码 11111111 11111111 11111111 11111110 (源码取反)
补码 11111111 11111111 11111111 11111111 (反码加1)
Integer.MAX_VALUE(MAX_VALUE为常量)
d) 长整型(8byte,64bit)
long num=12L(L是长整型的一个标识,可以小写,可以省略)
浮点型(float,double)
浮点类型精度运算可能会出现精度损失
Double D2=1.0
Double d3=0.9;
D2-d3=0.09999999999999;
a) 单精度float (4byte,32bit)(后缀f或F可以小写不可省略)
b) 双精度 double(8byte,64bit)(后缀D或d可以省略)
D2/0=Infinity(无穷大)
Math.sqrt(-9)=NAN(not a number)
字符型(2byte,16bit)
ASCII码(对应键盘上的任意一个字符,0-127个)
Unicode(万国码)
三种字面类型
char c1=’A’;
char c2=65;
(直接将65存入到c2的内存中而 int n=65 char c2=n错误 因为c2不能直接接受n因为n的在内存中占有4个字节而字符占有两个 所以需要强制转换 即:去掉一部分)
char c3=’\u0041’ (\u特殊编码); c3=’A’;
char c4=’中’;
char cc=(char)(c1+1);(表达式结果类型取决于表示范围最大的那个变量)
但是C1+=1例外
‘0’=48 A=65 ‘中’=20013
特殊字符:
\f 换页 \\ 反斜杠 \b 倒退一格 \’单引号 \r 归位 \” 双引号 \t 制表符Tab \n 换行
布尔型(ture和false)
6、变量的类型转换
(1) 隐式转换(自动类型转换)表示范围小的赋值给表示范围大的
(2) 显示转换(强制类型转换)表示范围大的赋值给表示范围小的 会使精度转换后精度降低,但是强制类型转换必须属于同种系列之间(char int float)
7、表达式类型的自动提升
任何一个表达式经过计算肯定有一个结果。结果的类型是什么类型,取决于表示范围最大的那个变量。
Byte t1=20;
Byte m=t1+30;错误 (t1+30)表达式结果是整形 但是+= *=……除外
Float f=12.3;
Long l=2000;long l1=f+l;错误 float比long范围大
但是如果是+=就可以 如char c=a;正确:c +=2; 错误:c=c+2
8、运算符的应用
(1) 算数运算符(+ - * / % ++ --)
15/2=7 15.0/2=7.5 3D/0=Infinity 3/0除数不能为0 15.0%2=1.0 15%2=1
M5=10 m6 10 11 12
M6=m5+++m5+++m5++相当于(m5++)+(m5++)+(m5++)=33
(2) 赋值运算符(= += -= *= /= %=)
特例byte t1=10;t1+=10 t1=20但是不等价与t1=t1+10;
(3) 关系运算符(> < >= <= != ==)
(4) 逻辑运算符(&& || !)逻辑与又叫短路与 逻辑或又叫短路或
a=10 b=20
flag=a>b&&a++>12
flag=false a=10
(5) 条件运算符(?:)(其格式为 变量=?表达式1:表达式2)
Int max=a>b?(a>c?a:c):(b>c?b:c)
位运算符(& | ~ ^)
Int a=8;b=4;
a&b=0 00000000 00000000 00000000 00001000
00000000 00000000 00000000 00000100
位与运算(只有两个都为1时结果才为1)
^相同为0
(6) 移位运算符(>> << >>>)
>>执行有符号右移(补符号位)
<
>>>执行无符号右移(不补符号)负数会变成整数 没有无符号左移