一.运算符
1.算术运算符
1.1.基本算术运算符:+,-,*,/(默认取整),%(求余数)
1.2扩展的算术运算符:++,--
使用方式:
a.单独使用:无论在数据前还是数据后,都是对当前变量自增1或自减1
b.参与运算时:
在数据前:先将当前变量本身的值自增1或自减1,然后在参与运算。
在数据后:先参与运算,然后变量本身的值进行自增1或自减1
2.赋值运算符
2.1基本的赋值运算符:=(将等号后面的值赋给等前面的变量)
2.2扩展的赋值运算符:+=,-=,*=,/=,%=
将符号变量的值和右边的数据相+(-,*,/,%),然后再将结果赋给左边的变量
例如:
a += 1 类似于 a = a+1
short a += 1 等价于 short a = (short )(a+1)//特点:隐藏了强制转换
3.关系(比较)运算符
3.1关系(比较)运算符:<,>,<=,>=,==,!=(最终结果都是boolean(true/false))
3.2注意事项:==不能写成=,=也不能写成==;==是比较连接的两个基本数据类型,比较数据值是否相同。
4.逻辑运算符
4.1基本逻辑运算符:
逻辑单与&:有false则false,不具有短路效果,左边为false右边依旧要执行。
逻辑单或|:有true则true,不具有短路效果,左边为true右边依旧要执行。
逻辑异或^:相同为true,不同为false
逻辑非!:非true则false,非false则true
4.2扩展的逻辑运算符:
逻辑双与&&:有false则false,当表达式左边为false则右边不在执行,具有短路效果。
逻辑双或||:有true则true,当表达式左边为true则右边不在执行,
5.位运算符
5.1位运算符:针对多个数据进行操作(用补码计算结果),计算的结果是具体的数据值
5.2基本的位运算符:
位与&:有0则0
位或|:有1则1
位异或^:相同则为0,不同则为1
特点:一个数据被另一个数据位异或两次,其值还是他本身。
反码~:全部按位取反,0—>1,1—>0
5.3位移符号:
<<:左移:将<<左边的数据乘以2的移动次幂
将这个数据的补码向左移动指定的位数,右边不够的补0,左边多余的丢掉。
>>:右移:将>>左边的数据除以2的移动次幂
将这个数据的补码向右移动指定的位数,如果最高符号位为0,则左边不够的补0;如果最高符号位为1,则左边不够的补1,右边多余的丢掉。
>>>:无符号右移
将这个数据的补码向右移动指定的位数,无论最高符号位为0还是1,左边始终补0
6.三目(三元)运算符
6.1格式:
(表达式)?执行语句1(具体的结果):执行语句2(具体的结果)
// 执行流程:判断表达式的结果,成立则执行语句1,不成立则执行语句2
6.2三目(三元)运算符的嵌套格式:
(表达式1)?((表达式2)?(执行语句1):(执行语句2)):((表达式3)?(执行语句3):(执行语句4))
二.键盘录入数据
Jdk提供的Scanner类:文本扫描器类,可以用Scanner来使用键盘录入我们定义的变量用来可以提高程序的灵活性。
1.使用步骤
//(1)导包
import java.util.Scanner;
//(2)创建文本扫描器
Scanner sc = new Scanner(System.in);//sc:对象名
//(3)提示并录入数据,默认录入int类型
System.out.println("请输入一个数据:");
int sc1 = sc.nestInt();//sc1:变量名
//(4)使用变量进行操作
2.键盘录入数据的细节
先录入int类型,在录入String类型时,字符串数据没有值。
原因:"enter"(回车键)本来就是一个字符数据,按下之后就会导致字符串数据并没有录入,而是空行。
解决方案:
(1)使用next()录入
(2)在使用nextLine()录入时,重新创建文本扫描器。
3.键盘录入字符时,并不能录入字符类型。
解决方案:
(1)使用强制类型转换,将char类型转换为int类型,再在ASCLL码表中找到相应的数值录入。
(2)使用String类型录入。
三.流程控制语句
1.分类:
a.顺序结构语句
b.选择结构语句
c.循环结构语句
2.顺序结构语句:
当进入到类里面后,由JVM调动main方法,代码由上到下依次加载。
特例:当JVM退出时不会在执行了,即System类中的一个功能:exit(int status),参数为0时,表示正常终止JVM。
3.选择结构语句
3.1分类
a.if语句
b.switch语句
3.2if语句
格式1:针对一种情况进行判断
if(表达式){
语句;
}
/*
执行流程:首先判断表达式是否成立,成立则执行语句,不成立,则不会进入if语句中
*/
格式2:针对两种情况进行判断
if(表达式){
语句1;
}else{
语句2;
}
/*
执行流程:首先判断表达式是否成立,成立则执行语句1,不成立则执行语句2。
if格式2与三元运算符的区别:
if是一个流程控制语句:不仅能够表示具体的结果,还可以用一个输出语句来体现
三元运算符:只能够表示具体到结果
三元运算符能实现的,if格式2一定可以体现;反之,则不行。
*/
格式3:针对多种情况进行判断
if(表达式1){
语句1;
}else if(表达式2){
语句2;
}else if(表达式3){
语句3;
...
}else{
语句n+1;
}
/*
执行流程:首先判断表达式1,成立则执行语句1;不成立则判断表达式2,
成立则执行语句2;不成立则判断语句3,成立则执行语句3....
如果上方表达式都不成立,则执行语句n+1
*/
3.3switch语句
3.3.1switch语句格式
switch(表达式){
case 值1:
语句1;
break;
case 值2:
语句2;
break;
default:
语句n+1;
break;
}
/*
执行流程:当表达式的结果值遇见case语句中等值1时,
匹配,则执行语句1,遇见break,流程结束;不匹配时,
继续判断是否与值2匹配,匹配,则执行语句2,遇见break,
流程结束...如果与case中的值都不匹配,
程序则执行default语句,执行语句n+1,程序执行到末尾结束。
*/
3.3.2.break:结束,中断;属于跳转语句的一种,不能单独使用,只能在switch和循环语句中使用。
3.3.4.switch的表达式可以使用的数据类型
a.可以使用的基本数据类型:int,short,byte,char
b.Jdk5以后可以使用:枚举
c.Jdk7以后可以使用String类型
3.3.5.switch的注意事项
a.case语句后面的值只能是常量
b.case穿透:当某个case语句中没有携带break时,此时与case语句的值匹配时程序就会继续执行下去,不会在判断case
c.default语句可以在switch语句的任何位置,可以不带break,但是如果在语句中不带break则会造成case穿透
d.switch语句的结束条件:遇见break结束,程序默认执行到末尾
3.3.6.switch模拟单项选择题
因为键盘录入数据无法录入字符,所以有两种方式:
方式1:录入int数据,强制转换为char类型
方式2:录入字符串(String)类型
4.循环结构语句
4.1.for循环语句
4.1.1for循环语句格式
for(初始化语句;条件表达式;步长语句/控制体语句){
循环体语句;
}
/*
执行流程:初始化语句对变量进行赋值,接着判断条件表达式是否成立,
成立则执行循环体语句;接着执行控制体语句,
继续会到条件表达式判断是否成立,成立则继续执行循环语句体;
接着执行控制体语句...一直执行到语句不成立结束
*/
4.1.2.求和思想
a.定义一个最终的结果变量
b.使用循环语句,明确循环次数
c.循环体语句:最终结果变量+=变量;
4.1.3阶乘思想:类似于求和思想
2.1.4.水仙花数:个位数的3次方+十位数的3次方+百位数的3次方=水仙花数
//取值范围:100~999
//变量的定义:
int geWei = i%10;
int shiWei = i/10%10;
int baiWei = i/10/10%10;
//加入判断
if((geWei*geWei*geWei+baiWei*baiWei*baiWei+shiWei*baiWei*baiWei)===i){
//输出语句
}
4.2.while语句
4.2.1 while语句格式:
初始化语句;
while(条件表达式){
循环体语句;
控制体语句;
}
/*执行流程:首先初始化赋值;接着判断条件表达式,
成立则执行循环体语句;接着执行控制体语句,
继续判断条件表达式,成立则继续执行循环体语句....
一直执行到条件表达式不成立while语句结束。
*/
4.2.2while语句与for语句的不同:
共同点:都能够实现循环效果。
不同点:
a.格式不同
b.for语句运行结束之后,局部变量被释放,节省了内存,访问不到局部变量。
while语句实在main方法结束之后才释放内存,在使用过程中依旧可以访问到局部变量。
c.明确循环次数时使用for语句,不明确时使用while语句。
4.2.3死循环:
a. for循环的死循环:
for(初始化语句;条件表达式;控制体语句){
判断条件,当满足某个条件时结束循环,即break;
循环体语句;
}
b.while循环的死循环(开发中使用居多):
while(true){
判断条件,当满足某个条件时结束循环,break;
循环体语句;
}
4.3.do_while语句
do_while语句格式:
初始化语句;
do{
循环体语句;
控制体语句;
}while(条件表达式);
/*
执行流程:首先对初始化语句赋值;然后执行循环体语句;
接着执行控制体语句;接着判断条件表达式,
成立则继续执行循环体....一直到条件表达式不成立,
do_while语句结束。
*/
与for,while循环语句的最大区别:当条件表达式不成立时,循环体语句最少执行一次。
4.4.for循环的嵌套
for循环嵌套:将一个for循环语句作为循环体语句去执行
for(初始化语句;条件表达式;控制体语句){//外层循环
for(初始化语句1;条件表达式1;控制体语句1){//内层循环
循环体语句;
}
}
5.跳转控制语句
5.1break(中断,结束):不能单独使用,只能在switch语句和循环语句中使用。
for循环中使用
for(int i = 0 ; i < 10 ; i++){
if(i==2){
break;//结束循环,最终打印结果为0,1
}
}
在for循环嵌套中使用:break 标签语句;
wc:for(初始化语句;条件表达式;控制体语句){//外层循环
nc:for(初始化语句1;条件表达式1;控制体语句1){//内层循环
循环体语句(判断条件);
//break wc; 结束外层循环
//break nc; 结束内层循环
}
}
5.2.continue(结束当前循环,立即进入下次循环):不能单独使用,只能在循环中使用
for(int i = 0 ; i <= 5 ; i++){
if(i==2){
continue;//结束循环,最终打印结果为0,1,3,4,5
}
}