1. ⭐️运算符介绍⭐️
📚运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
运算符:
☕️ 算术运算符
☕️ 赋值运算符
☕️ 关系运算符 [比较运算符]
☕️ 逻辑运算符
☕️ 位运算符 [需要二进制基础]
☕️ 三元运算符
2. ⭐️算术运算符⭐️
📚 算术运算符是对数值类型的变量进行运算的,在 Java 程序中使用的非常多。
/**
* 演示算术运算符的使用
*/
public class ArithmeticOperator {
//编写一个 main 方法
public static void main(String[] args) {
// /使用
System.out.println(10 / 4); //从数学来看是 2.5, java 中 2
System.out.println(10.0 / 4); //java 是 2.5
// 注释快捷键 ctrl + /, 再次输入 ctrl + / 取消注释
double d = 10 / 4;//java 中 10 / 4 = 2, 2=>2.0
System.out.println(d);// 是 2.0
// % 取模 ,取余
// 在 % 的本质 看一个公式!!!! a % b = a - a / b * b
// -10 % 3 => -10 - (-10) / 3 * 3 = -10 + 9 = -1
// 10 % -3 = 10 - 10 / (-3) * (-3) = 10 - 9 = 1
// -10 % -3 = (-10) - (-10) / (-3) * (-3) = -10 + 9 = -1
System.out.println(10 % 3); //1
System.out.println(-10 % 3); // -1
System.out.println(10 % -3); //1
System.out.println(-10 % -3);//-1
//++的使用
//
int i = 10;
i++;//自增 等价于 i = i + 1; => i = 11
++i;//自增 等价于 i = i + 1; => i = 12
System.out.println("i=" + i);//12
/*
作为表达式使用
前++:++i 先自增后赋值
后++:i++先赋值后自增
*/
//注意下面代码
int j = 8;
//int k = ++j; //等价 j=j+1;k=j;
int k = j++; // 等价 k =j;j=j+1;
System.out.println("k=" + k + "j=" + j);//8 9
}
}
📚总结:
☕️对于除号"/",它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。例如:int x= 10/3 ,结果是3。
☕️当对一个数取模时,可以等价a%b=a-a/b*b,这样我们可以看到取模的一个本质运算。
☕️当自增当做一个独立语言使用时,不管是++;还是 i++;都是一样的,等价。
//注意下面代码
int j = 8;
//int k = ++j; //等价 j=j+1;k=j;
int k = j++; // 等价 k =j;j=j+1;
System.out.println("k=" + k + "j=" + j);//8 9
⭐️注意下面两个面试题:⭐️
📚面试题1
int i=1;
i=i++;
System.out.println(i);
问:结果是多少?为什么?
答:结果是1,因为:
i=i++;//规则使用临时变量:(1) temp=i;(2) i=i+1;(3)i=temp;
System.out.println(0);//1
📚面试题2
int i=1;
i=++i;
System.out.println(i);
问:结果是多少?为什么?
答:结果是2,因为:
i=++i;//规则使用临时变量:(1) i=i+1;(2) temp=i;(3)i=temp;
System.out.println(0);//2
📚算术运算符练习
T1:假如还有 59 天放假,问:合 xx 个星期零 xx 天
public class ArithmeticOperatorExercise01 {
//编写一个 main 方法
public static void main(String[] args) {
//1.需求:
//假如还有 59 天放假,问:合 xx 个星期零 xx 天
//2.思路分析
//(1) 使用 int 变量 days 保存 天数
//(2) 一个星期是 7 天 星期数 weeks: days / 7 零 xx 天 leftDays days % 7
//(3) 输出
//3.走代码
int days = 59;
int weeks = days / 7;
int leftDays = days % 7;
System.out.print(days + "天 合" + weeks + "星期零" + leftDays + "天");
}
}
T2:定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。
public class ArithmeticOperatorExercise02 {
//编写一个 main 方法
public static void main(String[] args) {
//1.需求
//定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为
//:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度
//
//2 思路分析
//(1) 先定义一个 double huaShi 变量保存 华氏温度
//(2) 根据给出的公式,进行计算即可 5/9*(华氏温度-100)
// 考虑数学公式和 java 语言的特性
//(3) 将得到的结果保存到 double sheShi
//3 走代码
double huaShi = 1234.6;
double sheShi = 5.0 / 9 * (huaShi - 100);//注意是使用5.0
System.out.println("华氏温度" + huaShi + " 对应的摄氏温度=" + sheShi);
}
}
3. ⭐️关系运算符(比较运算符)⭐️
☕️关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false.
☕️ 关系表达式经常用在 if 结构的条件中或循环结构的条件中.
📚 关系运算符一览
📚 细节说明
☕️关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false;
☕️ 关系运算符组成的表达式,我们称为关系表达式,如: a > b;
☕️ 比较运算符"==“不能误写成”="。
4. ⭐️逻辑运算符⭐️
☕️用于连接多个条件(多个关系表达式),最终的结果也是一个 boolean 值
1. 逻辑运算符一览
分为两组学习:
☕️ 短路与 && , 短路或 ||,取反 !
☕️ 逻辑与 &,逻辑或 |,^ 逻辑异或
2. 说明逻辑运算规则:
☕️ a&b : & 叫逻辑与:规则:当 a 和 b 同时为 true ,则结果为 true, 否则为 false
☕️ a&&b : && 叫短路与:规则:当 a 和 b 同时为 true ,则结果为 true,否则为 false
☕️a|b : | 叫逻辑或,规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
☕️ a||b : || 叫短路或,规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
☕️ !a : 叫取反,或者非运算。当 a 为 true, 则结果为 false, 当 a 为 false 是,结果为 true
☕️) a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false
⭐️注意:&& 和 & 使用区别
☕️&&短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false,效率高
☕️& 逻辑与:不管第一个条件是否为 false,第二个条件都要判断,效率低
⭐️注意:|| 和 | 使用区别
☕️ ||短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true,效率高
☕️ | 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低
5. ⭐️赋值运算符⭐️
📚赋值运算符就是将某个运算后的值,赋给指定的变量。
+= ,-= ,*= , /= ,%= 等 , 重点讲解一个 += ,其它的使用是一个道理
a += b; [等价 a = a + b; ]
a -= b; [等价 a = a - b; ]
6. ⭐️三元运算符⭐️
1. 基本语法
条件表达式 ? 表达式 1: 表达式 2;
📚运算规则:
☕️ 如果条件表达式为 true,运算后的结果是表达式 1;
☕️ 如果条件表达式为 false,运算后的结果是表达式 2。
2. 三元运算符使用
public class TernaryOperator {
//编写一个 main 方法
public static void main(String[] args) {
int a = 10;
int b = 99;
// 解读
// 1. a > b 为 false
// 2. 返回 b--, 先返回 b 的值,然后在 b-1
// 3. 返回的结果是 99
int result = a > b ? a++ : b--;
System.out.println("result=" + result);//result=99
System.out.println("a=" + a);//a=10
System.out.println("b=" + b);//b=98
}
}
3. 使用细节
📌 表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换);
📌 三元运算符可以转成 if–else 语句。
//三元运算符细节
public class TernaryOperatorDetail {
//编写一个 main 方法
public static void main(String[] args) {
//表达式 1 和表达式 2 要为可以赋给接收变量的类型
//(或可以自动转换/或者强制转换)
int a = 3;
int b = 8;
int c = a > b ? (int)1.1 : (int)3.4;//可以的
System.out.println(c);//3
double d = a > b ? a : b + 3;//可以的,满足 int -> double
System.out.println(d);//11.0
}
}
4. 案例:实现三个数的最大值
public class TernaryOperatorExercise {
//编写一个 main 方法
public static void main(String[] args) {
//案例:实现三个数的最大值
int n1 = 553;
int n2 = 33;
int n3 = 123;
//思路
//1. 先得到 n1 和 n2 中最大数 , 保存到 max1
//2. 然后再 求出 max1 和 n3 中的最大数,保存到 max2
int max1 = n1 > n2 ? n1 : n2;
int max2 = max1 > n3 ? max1 : n3;
System.out.println("最大数=" + max2);//最大数=553
//使用一条语句实现, 推荐使用上面方法
//提示: 后面我们可以使用更好方法,比如排序
// int max = (n1 > n2 ? n1 : n2) > n3 ?
// (n1 > n2 ? n1 : n2) : n3;
// System.out.println("最大数=" + max);
}
}
7. ⭐️运算符优先级⭐️
📌 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
📌 只有单目运算符、赋值运算符是从右向左运算的。
📌 一览表, 不要背,使用多了,就熟悉了。
8. ⭐️标识符的命名规则和规范⭐️
📚标识符概念
- Java对各种变量、方法和类等命名时使用的字符序列称为标识符
- 凡是自己可以起名字的地方都叫标识符int num1 = 90;
📚标识符的命名规则(必须遵守)
- 由26个英文字母大小写,0-9,或$组成
- 数字不可以开头。
int 3ab = 1;//错误
- 不可以使用关键字和保留字,但能包含关键字和保留字。
- Java中严格区分大小写,长度无限制。
int totalNum = 10;
int n = 90;
- 标识符不能包含空格。
int a b = 90;
📚练习:
hsp //ok
hsp12 //ok
1hsp //错误, 数字不能开头
h-s // 错误 , 不能有 - x h // 错误, 有空格
h$4 // ok
class //错误,class 关键字
int // 错误 ,int 是关键字
double //错误 ,double 是关键字
public //错误 ,public 是关键字
static //错误 ,static 是关键字
goto //错误, goto 是保留字
stu_name //ok
📚标识符命名规范[更加专业]
☕️ 包名:多单词组成时所有字母都小写:aaa.bbb.ccc //比如 com.hsp.crm
☕️ 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz [大驼峰]
比如: TankShotGame
☕️ 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz [小驼峰, 简称 驼峰法]
比如: tankShotGame
☕️ 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
比如 :定义一个所得税率 TAX_RATE
☕️ 后面我们学习到 类,包,接口,等时,我们的命名规范要这样遵守,更加详细的看文档.
9. ⭐️关键字⭐️
定义:被 Java 语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有字母都为小写
10. ⭐️保留字⭐️
Java 保留字:现有 Java 版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字 byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const。