🧇运算符
算术运算符
+
在Java中+号的含义:
- 加减乘除的加
- 正负的正
- 连接符什么时候+号是作为连接符的呢?
任意数据类型的数据与字符串相连接的时候,那个+号就是连接符
-*/
整数除以整数得到的还是整数
举例子int i = 5;int j = 2;int a = i / j;System.out.println(a);//得2
%:模,取余
举例子:int i = 2;int j = 3;System.out.println(i % j); //1int a = 4;int b = 2;System.out.println(a % b); //0
++
单独使用:
int i = 1;//i++; // i = i + 1++i;System.out.println(i);//2不管++在前还是在后,结果都是一样,因为++都参与了运算
参与运算:
++在前:先自身加1,然后再参与运算
int i = 1;int j = ++i;System.out.println(j);//2System.out.println(i);//2
++在后:先参与运算,然后再自身加1
int i = 1;int j = i++;System.out.println(j);//1System.out.println(i);//2
面试题:byte b1 = 1;b1 = b1 + 1;System.out.println(b1);//编译报错//针对byte类型和short类型的时候,只要右边有一个是变量,就会编译报错byte b1 = 1;b1++; //b1 = (byte)(b1 + 1)System.out.println(b1);//正确,因为++里面自带强制类型转换
—
单独使用:
int i = 2;//i--; // i = i - 1--i;System.out.println(i);//1不管--在前还是在后,结果都是一样
参与运算: ```java —在前:先自身减1,然后再参与运算 int i = 2; int j = —i; System.out.println(j);//1 System.out.println(i);//1
—在后:先参与运算,然后再自身减1 int i = 2; int j = i—; System.out.println(j);//2 System.out.println(i);//1
```练习题:int i = 10;int j = i++ + ++i + i-- + --i;System.out.println(j); //44
赋值运算符
=
int i = 1;
+=
int i = 1;i += 2;System.out.println(i); //3
-=
*=
/=
%=
注意:都自带了强制类型转换
关系运算符
关系运算符得出来的结果一定是boolean类型的数据,也就是说要么是true,要么是false

<
>=
<=
!=
==:比较两边的数据是否相等
int i = 1;int j = 2;System.out.println(i == j);//false==和=的区别?
=是赋值
==是比较
逻辑运算符
左右两边的数据的数据类型都是boolean类型,结果都是boolean类型

&(单与):System.out.println(true & true);//trueSystem.out.println(true & false);//falseSystem.out.println(false & false);//falseSystem.out.println(false & true);//false结论:两边只要有一个是false,结果就为false
|(单或):System.out.println(true | true); //trueSystem.out.println(true | false); //trueSystem.out.println(false | false); //falseSystem.out.println(false | true); //true结论:两边只要有一个是true,结果就为true
^(异或):System.out.println(true ^ true); //falseSystem.out.println(true ^ false); //trueSystem.out.println(false ^ false); //falseSystem.out.println(false ^ true); //true结论:两边相同为false,两边不同为true
!(非):System.out.println(!true); //falseSystem.out.println(!false); //trueSystem.out.println(!!true); //trueSystem.out.println(!!!true); //false
&&(双与):System.out.println(true && true);//trueSystem.out.println(true && false);//falseSystem.out.println(false && false);//falseSystem.out.println(false && true);//false结论:两边只要有一个是false,结果就为false
||(双或):System.out.println(true || true); //trueSystem.out.println(true || false); //trueSystem.out.println(false || false); //falseSystem.out.println(false || true); //true结论:两边只要有一个是true,结果就为true
&和&&的区别?
&&:如果左边为false,右边就不再执行了,结果就为false
&:如果左边为false,右边依然会执行,结果就为false
|和||的区别?
||:如果左边为true,右边就不再执行了,结果就为true
|:如果左边为true,右边依然会执行,结果就为true
总结:推荐使用&&和||,提高了执行效率
位运算符
两边的数据都是数字,结果也为数字


&(与位运算)
System.out.println(3 & 2); //2
计算机怎么算的?
|(或位运算)
System.out.println(3 | 2); //3

^(异或位运算)
System.out.println(3 ^ 2); //1
练习?int i = 1;int j = 2;通过某些方式,实现i和j变量的数据的调换?方式一:int temp = i;i = j;j = temp;方式二:i = i ^ j;j = i ^ j;i = i ^ j;
~(按位取反)

注意:符号位都会取反。
>>(右移位运算)


system.out.printIn(3 >> 2);A >> N --> A/2^N
<<(左移位运算)
System.out.printIn(3 << 2);A << N --> A*2^N //效率高,直接操作二进制
>>>(无符号右移)
System.out.printIn(3 >> 2); //0
>>和>>>的区别是什么?
:如果数据是负数,最左边的符号位是1,右移之后,左边要补1;
- 如果数据是正数,最左边的符号位是0,右移之后,左边要补0;
:不管数据是正数还是负数,右移之后,左边都要补0.
三元运算符(条件运算符,三目运算符)
- 格式:条件表达式 ? 表达式1 : 表达式2;
- 注意:条件表达式的结果一定是boolean类型
- 执行流程:
如果条件表达式为true,就会执行表达式1,不会执行表达式2
如果条件表达式为false,就会执行表达式2,不会执行表达式1
练习:
获取两个数的较大值?int i = 2;int j = 3;int max = i > j ? i : j;System.out.println(max); //得3
- 注意事项:
- 三元运算符是一个运算符,既然是运算符,就一定会有一个结果,所以呢,
表达式1和表达式2都会得到一个结果,所以表达式1和表达式2中不能是输出语句
3 > 2 ? System.out.println("在吗") : System.out.println("约吗");//格式错误
- 表达式1和表达式2既然会得到一个结果,如果传递给一个变量去接收,该变量的数据类型应该和表达式1和表达式2的结果的数据类型匹配 ```java int i = 3 > 2 ? 1 : 2; boolean b = 3 > 2 ? true : false; double d = 3 > 2 ? 1.1 : 2.2;
double d = 3 > 2 ? 1 : 2; int c = 3 > 2 ? ‘a’ : ‘b’;//97 都可以
<a name="uyilz"></a># 🐶键盘录入键盘录入的实现步骤?<br />第一步:导包```javaimport java.util.Scanner;
注意:写在class的上面,package的下面
第二步:创建对象
Scanner sc = new Scanner(System.in);
第三步:调用方法
int i = sc.nextInt();//接收录入的数字String s = sc.next();//接收录入的字符串
整体;
public class Test02 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入第一个数字");int i = sc.nextInt();System.out.println("请输入第二个数字");int j = sc.nextInt();System.out.println(i + "..." +j);}}
📽if语句
格式一
if(条件表达式) {语句体;}
条件表达式最终的结果只能是boolean类型,要么是true,要么是false
执行流程:
如果程序执行到if语句的时候,会去看条件表达式的结果是true还是false,
如果是true,就会进入到if中,执行里面的语句体内容,
如果是false,就不会进入到if中,就不会执行到里面的语句体内容。
例子:
int i = 1;if(i > 2) {System.out.println("约吗");}System.out.println("滚犊子");
if语句常见的考试题?
第一题:boolean b = true;if(b == false) {System.out.println("在吗");}System.out.println("约吗");第二题:boolean b = true;if(b = false) {System.out.println("在吗");}System.out.println("约吗");第三题:boolean b = false;if(b); {System.out.println("在吗");}System.out.println("约吗");1.由一对花括号括起来的东西,称为代码块{代码}2.在程序中,分号可以随意写3.当if语句中的语句体内容,只有一条有效语句的时候,花括号是可以省略不写的第四题:boolean b = false;if(b)System.out.println("在吗");System.out.println("约吗");//输出约吗第五题:boolean b = false;if(b)int i = 1;//这个不是有效语句System.out.println("在吗");//编译报错
格式二
if(条件表达式) {语句体;} else {语句体;}
执行流程:
如果程序执行到if语句的时候,会去看条件表达式的结果是true还是false,
如果是true,就会进入到if中,执行里面的语句体内容,
如果是false,就不会进入到if中,会进入到else中,执行里面的语句体
练习:获取两个数的较大值?int i = 1;int j = 2;if(i > j) {System.out.println(i + "最大");} else {System.out.println(j + "最大");}
if语句的第二种格式可以和三元运算符互换
三元运算符代码写的少一些,if语句的第二种格式可读性更高一些
格式三
if(条件表达式) {语句体;} else if(条件表达式) {语句体;} else if(条件表达式) {语句体;} ...else {语句体;}
执行流程:
如果程序执行到if语句的时候,会去看条件表达式的结果是true还是false,
如果为true,就会执行if中的语句体内容,其他的语句体不会执行
如果为false,就会继续向下走,看else if的条件表达式的结果是true还是false,
如果是true,就进入到elseif中,执行里面的语句体内容
如果是false,就继续向下走……
如果if和所有的elseif中的条件表达式都为false,就会执行else中的语句体内容
练习:int i = 5;if(i > 7) {System.out.println("哈哈");} else if(i > 6) {System.out.println("呵呵");} else if(i > 5) {System.out.println("嘿嘿");} else {System.out.println("嘻嘻");}注意:else可以省略不写int i = 6;if(i > 7) {System.out.println("哈哈");} else if(i > 6) {System.out.println("呵呵");} else if(i > 5) {System.out.println("嘿嘿");}
考试题?int a;int i = 6;if(i > 7) {a = 1;} else if(i > 6) {a = 2;} else if(i > 5) {a = 3;} /* else {}*/System.out.println(a);//编译报错 3
🐝Switch语句
格式:switch(表达式) {case 取值1:语句体;break;case 取值2:语句体;break;... ...default:语句体;break;}
执行流程:
当程序执行到switch的时候,会进入到switch,会找第一个case进行匹配,如果匹配成功,就进入到case中执行
里面的语句体内容和break。如果没有匹配成功,会继续向下走,找第二个case继续匹配… …
如果所有的case都不匹配,最后会执行default中的语句体内容。
练习:int i = 3;switch(i) {case 1:System.out.println("哈哈");break;case 2:System.out.println("呵呵");break;case 3:System.out.println("嘻嘻");break;default:System.out.println("嘿嘿");break;}
我们在使用switch的时候需要注意哪些问题?
- switch中的表达式的数据的数据类型可以为哪些?
byte,short,int,char,String,枚举
- default可以放在任意一行,但是不管放在那一行,都会先找第一个case去匹配,如果所有的case都不匹配,才会执行default
default可以省略不写,但建议写上
- break是结束语句,可以不写,就容易造成switch的穿透现象
如果匹配过一次或者执行过default之后,都不会再进行二次匹配了,但是语句体内容该执行还是会执行
- switch结束标记:
a.break
b.遇到结尾}
什么时候使用switch,什么时候使用if?
如果是判断某个区间范围的话,推荐使用if
如果是判断某几个数据的话,推荐使用switch
🦉局部代码块
由一对花括号括起来的,就称为代码块
{代码}
什么是局部代码块?
写在main(程序执行的入口)里面的代码块,就称为局部代码块
public static void main(String[] args) {int j = 1;{}}
局部代码块有什么用呢?
能够让变量更早的在内存中消失,节省内存空间
public static void main(String[] args) {{int j = 1;}}
🐞for循环
格式:for(初始化条件; 判断条件; 控制条件) {语句体;}
- 初始化条件:定义一个变量,并且赋值
- 判断条件:关系运算符
- 控制条件:自增+1
- 语句体:想要重复执行的内容代码
执行流程:
初始化条件 —> 判断条件 —> 语句体 —> 控制条件
—> 判断条件 —> 语句体 —> 控制条件
—> 判断条件 —> 语句体 —> 控制条件
… …
直到判断条件不满足,循环结束
练习:
需求:在控制台上打印出10个1
在学习循环之前:System.out.println(1);System.out.println(1);System.out.println(1);System.out.println(1);System.out.println(1);System.out.println(1);System.out.println(1);System.out.println(1);System.out.println(1);System.out.println(1);在学习循环之后:for(int i = 1; i <= 10; i++) {System.out.println(1);}
需求:在控制台上打印出1-10的数字
for(int i = 1; i <= 10; i++) {System.out.println(i);}
需求:在控制台上打印出1-10的和(累加和思想)?
1+2+3+4+5+6+7+8+9+10int sum = 0;for(int i = 1; i <= 10; i++) {sum = i + sum;}System.out.println(sum);
需求:在控制台上打印出1-100之间的偶数?
方式一:for(int i = 1; i <= 100; i++) {//判断i是否为偶数if(i % 2 == 0) {System.out.println(i);}}方式二:for(int i = 1; i <= 100; i++) {//判断i是否为偶数if(i % 2 != 1) {System.out.println(i);}}方式三:for(int i = 2; i <= 100; i+=2) {System.out.println(i);}
需求:在控制台上打印出1-10之间奇数的个数?(统计思想)
int count = 0;for(int i = 1; i <= 10; i++) {if(i % 2 == 1) {count++;}}System.out.println(count);
🐣while循环
格式:初始化条件;while(判断条件) {语句体;控制条件;}
执行流程:
初始化条件 —> 判断条件 —> 语句体 —> 控制条件
—> 判断条件 —> 语句体 —> 控制条件
—> 判断条件 —> 语句体 —> 控制条件
… …
直到判断条件不满足,循环结束
练习:
需求:在控制台上打印出10个1
int i = 1;while(i <= 10) {System.out.println(1);i++;}
需求:在控制台上打印出1-10的数字
int i = 1;while(i <= 10) {System.out.println(i);i++;}
需求:在控制台上打印出1-10的和(累加和思想)?
int sum = 0;int i = 0;while(i <= 10) {sum = sum + i;//sum += i;i++;}System.out.println(sum);
需求:在控制台上打印出1-10之间的偶数?
int i = 1;while(i <= 10) {//判断是否为偶数if(i % 2 == 0) {System.out.println(i);}i++;}
需求:在控制台上打印出1-10之间奇数的个数?(统计思想)
int count = 0;int i = 1;while(i <= 10) {if(i % 2 == 1) {count++;}i++;}System.out.println(count);
🦇do…while循环
格式:初始化条件;do {语句体;控制条件;} while(判断条件);
执行流程:
初始化条件 —> 语句体 —> 控制条件 —> 判断条件
—> 语句体 —> 控制条件 —> 判断条件
—> 语句体 —> 控制条件 —> 判断条件
… …
—> 语句体 —> 控制条件 —> 直到判断条件不满足的时候,循环结束
练习:
需求:在控制台上打印出1-10的数字
int i = 1;do {System.out.println(i);i++;} while(i <= 10);
🐜while和for和do…while循环的区别
do…while 和 for和while
do…while:
语句体和控制条件至少会执行一次
语句体和控制条件和判断条件执行的次数是一样多的
for和while:
语句体和控制条件可以一次都不执行
语句体和控制条件比判断条件少执行一次
while和for
while:初始化条件在while循环结束之后,依然可以继续使用
int i = 1;while(i <= 10) {}System.out.println(i);
for:初始化条件,一旦for循环结束,就用不了了
for(int i = 1; i <= 10; i++) {}System.out.println(i);//编译报错,因为找不到变量i变形写法:int i;for(i = 1; i <= 10; i++) {}System.out.println(i);
什么时候使用for循环?什么时候使用while循环?
明确循环次数建议使用for
不明确循环次数建议使用while
🙈死循环
最简单的两种死循环的写法:
for(;;) {}
*while(true) {}
死循环通常会结合break和continue使用。
🐽break和continue
- break:
它可以使用在switch中,用来结束switch的
也可以使用在循环中,用来结束循环的(跳出循环)
- continue:
它用在循环中,用来结束本次循环,继续下一次循环
- 注意事项
上面的程序是编译报错,为什么呢?for(int i = 1; i <= 10; i++) {if(i == 5) {//break;continue;System.out.println("约吗");//编译报错}}
因为System.out.println(“约吗”)永远都执行不到
在同一对花括号内,break和continue关键字的下面,不能有任何语句,因为永远都执行不到,会编译报错的
🐤循环嵌套
指将一个循环放入到另外一个循环的里面
需求:在控制台上打印出由组成的矩形
*
版本一:
System.out.println("****");System.out.println("****");System.out.println("****");System.out.println("****");
版本二:
for(int i = 1; i <= 4; i++) {System.out.println("****");}
版本三:
for(int i = 1; i <= 4; i++) {for(int j = 1; j <= 4; j++) {System.out.print("*");}System.out.println();//加In是为了换行}
需求:在控制台上打印出由组成的三角形
*
*
版本一:
System.out.println("*");System.out.println("**");System.out.println("***");System.out.println("****");System.out.println("*****");
版本二:
for(int i = 1; i <= 5; i++) {/*外层循环第一次的时候,里面打印1个*外层循环第二次的时候,里面打印2个*外层循环第三次的时候,里面打印3个*外层循环第四次的时候,里面打印4个*外层循环第五次的时候,里面打印5个**///System.out.println("*****");for(int j = 1; j <= i; j++) {System.out.print("*");}System.out.println();//换行}
记住:外层循环控制行数,内层循环控制列数
