学习目标
- 掌握变量与常量的语法和规范
- 掌握8大基本数据类型及特征
- 掌握各种类型字面量书写方式
- 掌握赋值运算符
- 掌握算术运算符及溢出现象
- 掌握自增自减运算符
- 掌握比较运算符
- 掌握逻辑运算符
- 掌握逻辑短路现象
- 掌握位运算符
- 掌握基本运算符优先级
- 掌握自动转换和强制转换
- 掌握控制台输入
- 掌握随机数值生成
第二天
变量与常量的使用
变量是什么 ( variable )
变量, 变化的量, 在程序运行过程中可能发生变化的量.
本质上计, 变量是用来存储数据的手段, 它可写, 可读, 它代表的是内存空间.
变量有三个要素:
- 数据类型: 决定了数据在内存中占多大空间
- 变量名称: 代表了内存地址
- 变量的值: 内存空间中装的数据
使用步骤
- 声明变量: 向系统申请内存空间 ( 根据类型不同, 空间大小不同 ) 数据类型 变量名;
- 赋值: 这是写操作, 实际上是把数据值写到内存空间中 变量名 = 表达式;
- 读值: 把空间中的值拿来使用 ( 打印, 输出, 运算, . . . . ) 要注意的是, 一个变量如果没有值, 是不可读的.
8大基本类型
- byte, 字节型, 128 ~ +127
- short, 短整型, 2字节, 32768 ~ +32767
- int, 整型, 4字节, 2147483648 ~ +2147483647
- long, 长整型, 8字节, 2的63次方 ~ (+2的63次方1)
- char, 字符型, 2字节, 和int是兼容的 ( 所有的char都可以看作是一个 int )
- float, 单精度浮点型, 4字节 double, 双精度浮点型, 8字节
- boolean, 布尔型, 逻辑值( true, false ), 占用空间大小根据平台而定.
要注意的是, String不是基本类型, 只不过在很多行为上,
它像基本类型而已. 另外, 负整数在内存中是以补码形式
存储; 小数在内存中是以尾数和指数的形式存储.
各种字面量/直接量表式方法
‘a’ 是 char字面量
“…” 是String字面量
350是int字面量, 如果要表示成long, 350L
3.56是double字面量, 如果要表式成float, 3.56F
数值字面量也可以用2进制(以0b开头),8进制(以0开头),16进制(以0x开头)表示.
变量如何命名
- 规则:
- 不能是java关键字或保留字
- 不能数字开头
- 能包含字母/数字/下划线/$
- 规范:
- 驼峰命名法(Camel), 如:myInt, intNumOfMale
对变量的应用
- 你是否能发现变量?
- 你是否能正确选型?
各种运算符
赋值运算符" = "
变量 = (表达式);
表达式, Expression, 它即可以是一个字面量, 也可以是一个变量, 也可以是一个算 式, 也可以是一个方法调用, … 总之, 能产生一个确定值的就是表达式.
- 要注意:
- 右边的值赋给左侧的变量
- 如果右边是个变量, 那么, COPY这个变量的值, 赋给左侧变量.
- 赋值本身也是个表达式, 这个表达式的值就是变量的最终值 ( 右侧表达式的值 ).
算术运算符
+ * / %
+ += -= *= /= %=
需要注意的点:
- int + int => int
- int / int => int, 小数部分丢掉
- 运算中如果有float,double的参与, 结果是浮点型
- 整除相除, 不能除0, 否则产生(报错)java.lang.ArithmeticException: / by zero.
- 浮点型可以除0, 得到Infinity
比较运算符
> >= <
> <= == !=
比较运算产生boolean值: true, false
逻辑运算
! && ||
& | ^
!, 逻辑非, NOT, 不
&&, 逻辑与, AND, 并且
||, 逻辑或, OR, 或者
&&, || 和 &, | 的区别是 前者可能发生逻辑短路现象, 后者不会.
位运算符
&, |, ^ 还可以用于位运算
~ 用于按位取反 (反码形式)
<< 无符号左移
>> 无符号右移
>>> 带符号右移
基本运算符的优先级
从高到低:
() --> ! --> 算术运算 --> 比较运算 --> && --> || --> =
如果是复杂的表达式, 可以多用()控制优先级, 这样程序更可读: boolean c = ( !(a+3 > 5) ) && ( b/20 < 6 );
各种数据类型特征
数据类型转换
- 自动转换: 把小类型赋给大类型, 例如 int > double
- 强制转换: 把大类型的值赋给小类型的变量, 如: int num = (int)3.5;
控制台输入
import java.util.Scanner; // 导入Scanner所在的包
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ class ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
// 创建一个扫描器对象, System.in表示: 这个扫描器扫描的是系统标准输入流
Scanner scanner= new Scanner(System.in);
// 调用它的各种方法, 得到用户输入的数据
int age = scanner.nextInt();
String name = sanner.next();
double price = scanner.nextDouble();
随机值生成
Math.random() //得到一个随机浮点数n, 0 <= n < 1
常量
常量, 常态的量, 不可变的量.
常量一旦赋了初始值, 就不可改变.
常量的命名通常全大写, 多个单词以_隔开.