1. 标识符
-
自己给类, 变量, 方法...起的名字都是标识符
-
简单记 : 自己起的名就是标识符
-
-
标识符的命名规则 (必须遵守)
-
26个英文字母, 大小写都行
-
数字 0 ~ 9
-
_ $
-
数字不能开头
-
不能是 Java 中的关键字
-
严格区分大小写
-
-
标识符的命名规范 (江湖规矩)
-
大驼峰命名法 (类) : 如果是一个单词, 首字母大写, 如果是多个单词, 每个单词首字母大写
-
Student
-
GoodStudent
-
IfDemo1
-
-
小驼峰命名法 (变量, 方法) : 如果是一个单词, 所有字母小写, 如果是多个单词, 从第二个单词开始首字母大写
-
age
-
maxAge
-
minAge
-
maxValue
-
-
-
要求 : 见名知意 !
2. 数据类型
1. 基本数据类型
-
整数类型
-
byte 1个字节 -128~127
-
short 2个字节
-
int 4个字节
-
long 8个字节
-
-
小数类型
-
float 4个字节
-
double 8个字节
-
-
字符类型
-
char 2个字节
-
-
布尔类型
-
boolean 1个字节
-
-
使用不同的数据类型, 定义变量.
- 今后定义整数类型变量, 首选int, 如果int装不下了, 换成long, 定义long类型变量, 需要加入L的标识(大小写都可以) - 今后定义小数类型变量, 首选double, 非要使用float类型变量, 需要加入 F 的标识 (大小写都可以) int age = 23; double height = 180.1'; char gender = '男'; boolean flag = false; ---------------------------- String name = "张三";
-
细节
-
所有整数默认都是 int 类型
-
System.out.println(100); // int
-
-
所有小数默认都是 double 类型
-
System.out.println(10.0); // double
-
-
2. 引用数据类型
TODO : day04 学习数组的时候开始介绍
3. Scanner键盘录入
1. 找符咒 (导包) import java.util.Scanner; - 必须写在class的上面 2. 召唤精灵 (创建对象) Scanner sc = new Scanner(System.in); 3. 指挥精灵干活 int age = sc.nextInt(); String name = sc.next();
4. 运算符
4.1 算数运算符
+ - * -------------------------------------- / : 整数相除, 结果只能得到整数, 如果想要得到小数, 需要有小数参与运算 % : 除法结束之后, 得到的余数.
4.2 字符串拼接操作
- 当 + 号操作过程中, 出现了字符串, 这时候就是字符串连接符了, 而不是算数运算符了. System.out.println("年龄为:" + 23); // "年龄为:23" System.out.println("年龄为:" + 23 + 1);// "年龄为231" System.out.println("年龄为:" + (23 + 1)); // "年龄为24"
4.3 自增自减运算符
++ : 让变量自身的值 + 1 -- : 让变量自身的值 - 1 使用: 可以放在变量的前面, 也可以放在后面. a++; ++a; 问题: 在前在后有什么区别? - 单独使用: 在前在后没有区别 a++; ++a; - 参与运算使用: ++在前: 先自增, 再赋值 int a = 10; int b = ++a; sout(a); // 11 sout(b); // 11 ++在后: 先操作, 再自增 int a = 10; int b = a++; sout(a); // 11 sout(b); // 10 - 注意事项: 自增自减运算符, 只能操作变量, 不能操作常量.
4.4 赋值运算符
基本赋值运算符: = : 将符号右边的数据, 赋值给左侧的变量. int age = 23; 扩展赋值运算符: += -= *= /= %= += : 将符号左右两边的数据做加法运算, 再将结果赋值给左边的变量. int a = 10; a += 20; sout(a); // 30 注意事项: 扩展赋值运算符, 底层自带强转效果.
4.5 关系运算符(比较运算符)
> >= < <= == != 结论: 无论比较运算符简单还是复杂, 结果都只能是boolean类型的true, false.
4.6 逻辑运算符
-
作用 : 可以整合多个条件, 为一段整体的逻辑条件
-
if (score >= 95 && score <= 100) {}
-
分类: &(与) : 并且, 遇false则false |(或) : 或者, 遇true则true !(非) : 取反 ^(异或) : 相同为false, 不同为true ----------------------------------------- &&(短路与) : & 没有短路效果, 无论符号左边是true还是false, 右边都要继续执行 && 具有短路效果, 当符号左边为false, 右边就不执行了 如果符号左边为true, 右边继续执行. ||(短路或) | 没有短路效果, 无论符号左边是true还是false, 右边都要继续执行 || 具有短路效果, 当符号左边为true, 右边就不执行了 如果符号左边为false, 右边继续执行.
-
今后最常用的逻辑运算符
-
&&
-
||
-
!
-
4.7 三元运算符
-
根据一个判断条件, 从给出的两个数据中, 二者选其一.
-
格式
判断条件 ? 值1 : 值2;
-
需求 : 求两个整数的最大值
int a = 10; int b = 20; int max = a > b ? a : b;
4.8 运算符优先级
-
() 的优先级, 高于所有运算符.
5. 类型转换
5.1 隐式转换
-
基本的隐式转换
-
小的给大的赋值, 可以直接赋值
-
小和大针对的是数据的取值范围
-
byte -> short - > int -> long -> float -> double
-
注意 : float虽然占用4个字节, 但是取值范围比8个字节的long更大.
-
-
-
运算过程中的隐式转换
-
当取值范围小的数据, 和取值范围大的数据, 在一起运算, 小的会先提升为的大的然后再进行运算
-
byte short char 在运算的时候, 都会直接提升为 int 类型
-
5.2 强制转换
-
将取值范围大的数据, 给取值范围小的变量赋值, 不能直接赋值, 需要强转
double a = 12.3; int b = (int)a; sout(b); // 12 今后尽量减少数据的强转使用, 避免不必要的精度损失问题
5.3 面试题
byte b1 = 3; byte b2 = 4; byte b3 = b1 + b2; 原因: b1 和 b2 相加, 两个byte运算, 都会先提升为int类型 两个int相加, 结果还是int, int类型结果给byte类型变量赋值, 需要强转. 解决: byte b3 = (byte)(b1 + b2);
byte b = 3 + 4; 解释: 3和4是两个常量, 在javac编译的时候, 就会自动运算出一个7的结果. .class字节码文件中 : byte b = 7; 自动判断数据, 是否在byte的取值范围内 不在: 编译出错 在 : 编译通过
6. if 语句
-
Java 程序默认的执行流程 -> 顺序结构 -> 代码从上到下, 从左到右依次执行.
if语句的格式1 : if(判断条件){ 语句体; } 执行流程: 1. 执行判断条件, 看其返回结果是true, 还是false 2. true : 执行 {} 当中的语句体 3. false : 不执行 {} 当中的语句体. 注意事项: 1. if语句 () 和 {} 之间不要写分号 2. if语句 {} 当中, 如果语句体是一条语句, {} 可以省略不写, 但是不建议!
if语句的格式2 : if(判断条件){ 语句体1; }else{ 语句体2; } 执行流程: 1. 执行判断条件, 看其返回结果是true, 还是false 2. true : 执行语句体1 3. false : 执行语句体2
if语句的格式3 : if(判断条件1){ 语句体1; }else if(判断条件2){ 语句体2; }else if(判断条件3){ 语句体3; } ... else{ 语句体n+1; } 执行流程: 1. 执行判断条件1, 看其返回结果是true, 还是false. true : 执行语句体1, 执行完毕, 结束整个if语句. false : 进入第二步 2. 执行判断条件2, 看其返回结果是true, 还是false. true : 执行语句体2, 执行完毕, 结束整个if语句. false : ... 3. 如果给出的所有条件, 都不成立, 将会执行最后的 else