目录
关键知识点:
- = 是java中唯一一个自右向左运算的符号,优先级最低
- 优先使用扩展赋值运算符!执行效率高,反注释工具看源码优化后的代码也是使用扩展运算符
- && || 短路与 短路或
- double i = 10/3; //i的值是3.0 double ii = 10/3.0; //i的值是3.333333333333333
- 条件运算符最终肯定会得到一个结果,所以有时候用if(){}
能用条件运算符的就不要用if,简单快捷
- ^异或位运算符,相同为0,不同为1
- >> << 的运算效率比乘除效率高
- 运算符的顺序关系:单目乘除位关系,逻辑三目后赋值
- sc.next( ) 从有效字符开始接受,空格不算,遇到空格不接受了,但是功能还在,直到遇到回车结束.
sc.nextLine() 接受的是一整行数据, .nextLine()可以作为上面的.next()接盘侠,继续接受.next( )没有接受的东西,处理没有接受到的东西
- sc.close() 表示关闭了Scanner 就算重新new一个都不好使!!!
- 对象.nextlnt(max-min+1)+min; [min,max]
对象.nextDouble() [0.0,1.0)之间的随机小数 对象.nextDouble()*(max-min+1)+min
- 如果if语句的语句体只有一句话,就可省略{}
- 当case找到自己想要的值时才开始向下执行代码,穿透直到遇到第一个break;
case有穿透效果,没有遇到break;就会一直向下执行,
如果所有case都没有符合的,就执行default,依旧有穿透效果
switch语句的结束要么是},要么是break;
- default :
这个语句如果后面有break; 放在哪里都一样,
如果没有break; 放在前面的话有case就按照case的来,没有相应的case,从default穿透
运算符:
分类:
算数运算符
赋值运算符
比较运算符|关系运算符
逻辑运算符
条件运算符
位运算符
操作数: 运算符左右两边的数
表达式: 运算符连接操作数整体叫做表达式
语句: 分号代表语句的结束
单目|一元运算符: 操作数为1个 +号 ++ --
双目|二元运算符: 操作数为2个 + - * /
三目|三元运算符: 条件运算符
算数运算符:
+
正号(可省略)
加法运算
字符串的连接符
如果+左右两边有字符串的出现"",+就是作为字符串的连接符使用,把两边的内容拼接成为一整个字符串使用
-
负号
减法运算
*
/
% 模以 取模 求余数
如果第一个操作数小于第二个操作数,结果就为第一个操作数
++ --
自增自减少运算符:
++ --
++ 自增 a++ ==> a=a+1;
-- 自减 a-- ==> a=a-1;
分析:
++,--操作自己
++放在操作数的前面还是后面,都是自身+1
--放在操作数的前面还是后面,都是自身-1
++,--操作别人
++--放在操作数的前面,先自身+1|-1,再去参与运算
++--放在操作数的后面,先去参与运算,在自身+1-1
赋值运算符:
基础赋值运算符
= 是java中唯一一个自右向左运算的符号
优先级最低
扩展赋值运算符(算数运算符+基础赋值运算符)
+= a+=b; ==> a=a+b;
-=
*= a*=b; ==> a=a*b;
/=
%=
推荐使用扩展赋值运算符
优点:
执行效率高
缺点:
不直观
java中的条件运算符:
条件表达式 ? 值1 : 值2;
条件表达式:值为boolean类型的表达式
执行流程:
1.条件表达式 ,最终会得到一个boolean结果
2.如果结果为true,整个条件表达式最终的结果为值1
3.如果结果为flase,最终结果为值2
条件运算符最终肯定会得到一个结果
java中的位运算符 (了解)
先把操作数转为二进制,根据运算符的逻辑进行操作,最终得到的结果再转为十进制
& : 同一位置的两个数,如果一个为0就是0,两个都为1才是1
| : 同一位置的两个数,如果一个为1就是1,两个都为0才是0
^ : 同一位置的两个数,相同为0,不同为1
位移运算符
<< 左移 第一个操作数转为2进制,第二个操作数是移动位数 ,向左移动指定的位数,空位补零
8<<2 1000左移2位 1000 00 -> 转为十进制 32
>> 右移 第一个操作数转为2进制,第二个操作数是移动位数 ,向右移动指定的位数,想象数据的右边有一条分水线,右侧的内容砍掉,只保留左侧的数据,转为十进制
8>>2 1000 右移2位 10->转为十进制 2
右移相当于/2 8>>3 8/2^3
左移相当于*2 8<<3 8*2^3
位运算符比直接使用* /效率高
运算符的优先级:
(),.优先级是最高的
单目乘除位关系,逻辑三目后赋值
java中的Scanner:
注意:不要让你的类名与java中已有的类名一致
基本数据类型:
int a=5;
引用数据类型:
引用数据类型 变量名|引用 = new 引用数据类型();
使用功能:
变量名|引用.功能名字();
Scanner : 接收键盘输入的内容
1.导包 import 导入 + 权限命名(报名+类名);
位置: 类的上面导包
2.创建这个类型的引用
Scanner sc=new Scanner(System.in);
3.使用功能:
引用.功能名字();
sc.nextInt(); 接收用户键盘输入的整数类型的数据
sc.nextLong(); 接收用户键盘输入的整数类型的数据
sc.nextByte(); 接收用户键盘输入的整数类型的数据
sc.nextShort(); 接收用户键盘输入的整数类型的数据
sc.nextFloat(); 接收用户键盘输入的整数类型的数据
sc.nextDouble(); 接收用户键盘输入的整数类型的数据
sc.next() 从有效字符开始接收,空格不算,接收用户输入的字符串内容,知道遇到空格,tab,就接收不到数据,但是功能没有停止,遇到enter功能结束
sc.nextLine() 接收一整行的数据
从第一个字符开始接收,知道遇到enter结束
系列next功能不能接收enter,遇到enter结束,nextLine可以接收enter
4.关闭
引用.close()
关闭了之后就不能再次使用,就算是重新打开也不好用
java中的Random:
产生随机数
1.导包 import java.util.Random;
2.创建类型的引用 Random ran=new Random();
3.使用功能:
引用.nextInt(); 产生一个int范围内的随机整数
引用.nextInt(整数n); 产生一个 [0,n) 随机整数
[0,max) ran.nextInt(max);
[0,max] ran.nextInt(max+1);
[min,max] ran.nextInt(max-min+1)+min;
[min,max) ran.nextInt(max-min)+min;
引用.nextDouble() [0.0,1.0)之间的随机小数
java中流程控制语句:
顺序结构: 从上到下从左到右
选择结构: 满足条件才能执行
循环结构: 重复执行某些代码
选择结构:
if ...else
switch
if结构:
单选择|单分支:
if(条件表达式){
满足条件才执行的语句体;
}
条件表达式:值为boolean类型的表达式
执行流程:
1.执行条件表达式,如果结果为true,就执行语句体
2.如果结果为false,就跳过if结构
双选择|双分支:
if(条件表达式){
语句体1;
}else{
语句体2;
}
执行流程:
1.执行条件表达式,如果结果为true,就执行语句体1
2.如果结果为false,就执行语句体2
多选择|多分支:
if(条件表达式1){
语句体1;
}else if(条件表达式2){
语句体2;
}
.....
else{
以上条件都不满足,就执行else中的内容 语句体n
}
执行流程:
1.计算条件表达式1,如果结果为true,执行语句体1,如果结果为false
2.执行条件表达式2,如果结果为true,执行语句体2,如果结果为false
....
如果以上条件都不满足,执行else中的语句体n
注意:如果语句体只有一句,前后的{}可以省略
如果一个if语句中如果存在接盘侠else,肯定有结果
if与条件运算符之间的区别:
条件运算符肯定有结果,if不一定
能使用条件运算符的就推荐使用条件运算符,结构简单,效率较高
java中的switch语句:
定值判断 switch
区间判断 if
能用switch肯定能用if,能用if的不一定能用switch
switch(表达式){
case 值1 :
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
......
default:
以上值都不满足,执行default中的内容
break;
}
表达式: 只能为byte,short,int,char,字符串(1.7),枚举(1.5)
一般使用变量
case: case后的定值与表达式的结果进行判断是否相等,对应执行不同的语句体
break: 结束switch语句,如果没有break,会发生case穿透,从现在执行完的语句体开始,如果没有break,下面的case无论是否相等,都会执行对应的语句体,直到遇到下一个break或者switch语句的结束而结束
default: 接盘侠,相当于else,以上值都不满足,执行default中的内容
可写可不写,default位置可以改变
执行流程:
1.计算表达式
2.那值与case后的值比较是否相等,如果相等就执行对应的语句体,如果不相等就向下继续比较