Java基础系列--02_运算符和程序的语句
运算符:
(1)算术运算符:
+,-,*,/,%,++,--(加、减、乘、除、取余、自增,自减)
++和--的注意事项:
a:他们的作用是自增或者自减
b:使用
1.单独使用
放在操作数据的前面和后面效果一样。
a++或者++a效果一样。
2.参与操作使用
放在操作数的前面:先自增或者自减,再参与操作
放在操作数的后面:先参与操作,再自增或者自减
1 int a = 10;
2 int b = ++a; //b=11,a=11
3 int a = 10;
4 int b = a++; //b=10,a=11
(2)赋值运算符
A:=,+=,-=,*=,/=,%=(等于,加等于,减等于,乘等于,除等于,取摸等于)
B:=叫做赋值运算符,也是最基本的赋值运算符
举例:int x = 10; 把10赋值给int类型的变量x。
C:扩展的赋值运算符的特点
隐含了自动强制转换。
举例代码:
1 short s = 1;//声明变量s,并将常量1赋值给变量s
2 s = s + 1; //Type mismatch: cannot convert from int to short short ss = 1;
3 short ss += 1; //ss变量加上常量值1
4 /*s = s + 1; s转换为int型,在参与运算,得到的结果仍然是int型,
5 *而ss是short型无法将int转换为short,所以报错。
6 */
(3)比较运算符
A:==,!=,>,>=,<,<=
B:无论运算符两端简单还是复杂最终结果是boolean类型。
C:千万不要把==写成了=(==表示比较,=是赋值)
(4)逻辑运算符
A:常用的:!,&&,|| 不常用:&,|,^,
B:逻辑运算符用于连接boolean类型的式子,得到的结果也是boolean类型
C:结论
!:非true则false,非false则true
&&:结果和&是一样的,都表示与运算,只不过有短路效果,即判断左边的表达式可以确定整个表达式的值,就不再运算其他部分表达式,而&要运算全部的表达式。
举例:(1 !=1 && a > b)左边是false,右边不执行。
||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。
&:有false则false
|:有true则true
^:相同则false,不同则true。(异或)
(5)位运算符
^的特殊用法
一个数据针对另一个数据位异或两次,该数不变
举例:
1.实现两个变量的交换:
A:采用第三方变量
B:用位异或运算符
1 /*实现两个变量的交换*/ 2 //方式一:采用第三方变量 3 //方式二:巧用位异或运算符 4 int a=0; //0000 5 int b=10; //1010 6 //方式一: 7 int temp = 0; 8 temp = a; 9 a = b; 10 b = temp; 11 //方式二: 12 a = a^b; //a=1010->10 使用异或操作符不仅节省了代码量,还可以让程序更加快速,更加专业,因为异或的底层是二进制的运算
2.最有效率的方式计算出256乘以8和256除以16的结果
256<<3 = 2048(二进制码右移3位补0),256>>4 = 16(二进制码左移4位补0)
<<,>>是移位操作符,一个是右移,一个是左移。每向右移动一位都相当于是乘2,每向左移动一位都相当于是除2
(6)三元运算符
A:格式
比较表达式?表达式1:表达式2;
B:执行流程:
首先计算比较表达式的值,看是true还是false。
如果是true,表达式1就是结果。
如果是false,表达式2就是结果。
举例:c = a>b?a:b; //如果 a > b ,则 c = a;否则 c = b;
(7)运算符的优先级
优先级 描述 运算符
1 括号 ()、[]
2 正负号 +、-
3 自增自减,非 ++、--、!
4 乘,除,取余 *、/、%
5 加、减 +、-
6 移位运算 <<、>>
7 大小关系 >、>=、<、<=
8 相等关系 ==、!=
9 按位与 &
10 按位异或 ^
11 按位或 |
12 逻辑与 &&
13 逻辑或 ||
14 条件运算 ? :
15 赋值运算 =、+=、-=、*=、/=、%=
16 位赋值运算 &=、|=、<<=、>>=、>>>=
备注:如果在程序中,要改变运算顺序,可以使用()。在一些比较复杂的运算中,使用括号,能够提高程序的可读性。
2:键盘录入(后面再详细解释)
(1)目的从键盘上灵活的录入我们的数据。
使用步骤:A:导包
import java.util.Scanner;
位置:在默认包名的下方,class的上方
B:创建对象
Scanner sc = new Scanner(System.in);
C:获取数据
int x = sc.nextInt();
3:流程控制语句
(1)顺序结构 从上往下,依次执行
(2)选择结构 按照不同的选择,执行不同的代码
(3)循环结构 做一些重复的代码
4:if语句
(1)三种格式
A:格式1
if(比较表达式) {
语句体;
}
执行流程:
判断比较表达式的值,看是true还是false
如果是true,就执行语句体
如果是false,就不执行语句体
B:格式2
if(比较表达式) {
语句体1;
}else {
语句体2;
}
执行流程:
判断比较表达式的值,看是true还是false
如果是true,就执行语句体1
如果是false,就执行语句体2
C:格式3
if(比较表达式1) {
语句体1;
}else if(比较表达式2){
语句体2;
}
... //这里表示可以嵌套多个else if语句
else {
语句体n+1;
}
执行流程:
判断比较表达式1的值,看是true还是false
如果是true,就执行语句体1
如果是false,就继续判断比较表达式2的值,看是true还是false
如果是true,就执行语句体2
如果是false,就继续判断比较表达式3的值,看是true还是false
...
如果都不满足,就执行语句体n+1
(2)注意事项
A:比较表达式无论简单还是复杂,结果是boolean类型
B:if语句控制的语句体如果是一条语句,是可以省略大括号的;如果是多条,不能省略。
建议:一般不要省略。
C:一般来说,有左大括号,就没有分号,有分号,就没有左大括号(成对出现)。
D:else后面如果没有if,是不会出现比较表达式的。
E:三种if语句其实都是一个语句,只要有一个执行,其他的就不再执行。
(3)三元运算符和if语句第二种格式的关系
所有的三元运算符能够实现的,if语句的第二种格式都能实现。
if (a > b ){ c = a; }else{ c = b; } //等价的三元表达式 c = a>b?a:b; //如果 a > b ,则 c = a;否则 c = b;
5.switch语句
(1)格式:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
格式解释说明:
switch:说明这是switch语句。
表达式:可以是byte,short,int,char(都可以强转为int)
JDK5以后可以是枚举
JDK7以后可以是字符串
case:后面的值就是要和表达式进行比较的值
break:表示程序到这里中断,跳出switch语句
default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else
(2)应注意的问题
switch语句的表达式可以是byte,不可以是long,JDK7之后可以是String。
(3)执行流程:
A:首先计算表达式的值
B:和每一个case进行匹配,如果有就执行对应的语句体,执行到break就结束。
C:如果没有匹配,就执行default的语句体n+1。
(4)注意事项:
A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
B:default可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
特殊情况:
执行到switch语句之前,case就可以把值确定。
C:break可以省略,但是如果break省略了,程序就不会跳出switch,会按照原来的顺序继续执行,直到跳出。这个现象叫做case穿透。
D:default的位置不一定要在最后,但是它一定是在最后执行。
E:switch语句的结束条件
a:遇到break就结束了
b:执行到末尾就结束了
(5)if语句和switch语句各自的场景
A:if
针对boolean类型的判断
针对一个范围的判断
针对几个常量的判断
B:switch
针对几个常量的判断
6.循环语句
(1)有三种:for,while,do...while,foreach(增强for)
(2)for循环语句
A:格式
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
A.执行流程:
a:执行初始化语句
b:执行判断条件语句
如果这里是true,就继续
如果这里是false,循环就结束
c:执行循环体语句
d:执行控制条件语句
e:回到b
B.注意事项
a:判断条件语句无论简单还是复杂,结果是boolean类型
b:循环体语句如果是一条,可以省略大括号,但是不建议
c:有分号就没有左大括号,有左大括号就没有分号
(3)while循环
A:基本格式
while(判断条件语句) {
循环体语句;
}
扩展格式:
初始化语句;
while(判断条件语句){
循环体语句;
控制条件语句;
}
通过查看这个格式,说明while循环可以和for循环等价转换。
B:for和while的区别
a:使用上的区别
for语句的控制条件变量,在循环结束后不能在使用(作用域)。
而while的可以继续使用。
b:理解上的区别
for适合于一个范围的判断
while适合次数不明确的
(4)do...while循环
A:基本格式
do {
循环体语句;
}while(判断条件语句);
扩展格式:
初始化语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
通过查看格式,说明三种循环的格式可以相互替换的。
B:三种循环的区别
a:do...while循环至少执行一次循环体
b:for和while必须先判断条件是否是true,然后后才能决定是否执行循环体
(5)foreach循环(其实叫做:增强for)
格式:for (int[] arr : array) {
//遍历数组
}
注意:Java中没有foreach循环,foreach循环其他的语言中的名称,但是Java中的增强for的本质是跟foreach循环一样的,这个循环一般是用来实现遍历操作。
(6)循环使用的注意事项(死循环)
A:一定要注意修改控制条件,否则容易出现死循环。
B:最简单的死循环格式
a:while( true ) { ... }
b:for( ; ; ) { ... }
7.控制跳转语句
(1)break:中断的意思
A:用在循环和switch语句中,离开此应用场景无意义。
B:作用
a:跳出单层循环
b:跳出多层循环,需要标签语句的配合
(2)continue:继续
A:用在循环中,离开此应用场景无意义。
B:作用
a:跳出单层循环的一次,可以继续下一次
//控制台输出7次:Hello Java
1 for(int x=1; x <= 10; x++) { 2 if(x%3 == 0) { 3 continue; 4 } 5 System.out.println("Hello Java"); 6 }
(3)return:返回
A:用于结束方法的,并返回某个值。
B:一旦遇到return,程序就不会在继续往后执行。