-
位运算符
位运算符 含义 示例 << 左移 5<<2 = 20----》 5*2^2=20 >> 右移 5>>1=2 >>> 无符号右移 对于正数来说,空出来的最高位拿0补位,负数拿1补 3>>>1=1 & 与位运算 只要出现一个位为0,结果位就位0,否则为1 6&3=2 | 或运算 只要有一个为1,运算结果就为1 6|3=7 ^ 异或运算 如果两个数值一样,运算结果为0, 否则为1 5^3=6 ~ 取反运算 ~6 ------> 0110 = -7 备注:位运算计算机底层采用的对整数进行二进制运算。
【没有无符号左移位运算符】
二进制在计算机中都是补码形式呈现L:<()
-
三目运算符
? :
格式:
布尔类型表达式 ?真的结果:假的结果值
数据类型 变量名 = 布尔类型表达式 ?真的结果:假的结果值
计算方式:
如果布尔类型表达式结果是true,三木运算符运算的结果为紧邻?后面的值
如果布尔类型表达式结果是false,三木运算符运算的结果为紧邻:后面的值
备注:当三目运算符运算参与有其他的运算(赋值运算),要求三目运算符中的?和后面的值的【数据类型保持一致】。
流程控制: 顺序 、选择、循环
顺序结构
程序是从上往下进行加载,按照代码的编写顺序进行执行。
选择结构(分支结构)
if else 语句
1. if 单支情况
if语句的格式:
if(布尔类型表达式/布尔类型值){
// 语句体。。。。
}
if语句(单支)的执行流程:
首先判断布尔类型表达式,看他的结果是false还是true。
如果是true就执行{}里面的方法体内容。
如果是false就不执行{}立案的方法体内容,程序往后加载。
- if else 多支情形
格式:
if(布尔类型表达式){
// 语句体内容1:
} else{
// 语句体内容2:
}
if else 多支的执行流程
首先判断布尔类型表达式,看他的结果是false还是true。
如果是true就执行语句体内容1
如果是false就执行语句体内容2
-
if。。。。else if。。。else语句
格式:
if(布尔类型表达式1){
//方法体内容1.。。。。
}else if(布尔类型表达式2){
//方法体内容2.。。。。
}else if(布尔类型表达式n){
//方法体内容n。。。。
}
执行流程:
首先判断布尔类型表达式1,看他的结果是false还是true。
如果是true 就执行语句体内容1
如果是false 就执行布尔类型表达式2,看他的结果是false还是true
如果是true 就执行语句体内容2
如果是false 就执行布尔类型表达式.。。。。。看起结果是true还是false
...........
如果以上所有的布尔类型表达式都为false,最后执行else()里面的方法体内容n+1
-
if.....if.....else.......else语句 嵌套情形
格式:
if(布尔类型表达式1){
//方法体内容1
................
if(布尔类型表达式2){
// 方法体内容2
。。。。。。。。。。。。。
}else{
//方法体内容3
.。。。。。。。。
}
}else{
//方法体内容4
.。。。。。。
}
执行流程:
首先判断布尔类型表达式1,看他的结果是false还是true。
如果是true 就执行语句体内容1,在继续判断布尔类型表达式2,看其结果是true还是false。如果true,就执行方法体内容2
如果false,就执行方法体内容3.。。。。。
如果是false,就执行方法体内容4,之后加载后面的程序
switch case 语句
格式:
switch(表达式){
case 常量值1:
// 语句体内容1
break;
case 常量值2:
// 语句体内容1
break;
...........
default:
// 语句体内容n
break;
}
执行流程:
首先计算出表达式中的值
其次,依次和case后面的常量值作比较,一旦有对应的 值,就会执行相应的语句体内容。
在执行的过程中,遇到break就会结束 switch case语句
最后,如果所有的case都和表达式的值不匹配,就会执行default中的语句体内容,然后switch case语句结束,
注意:在switch语句中,表达式的数据类型,可以是byte/short/int/char/enmu(枚举)JDK1。7之后可以接收字符串类型
case穿透性
在switch语句中,如果case后面的break省略,将会出现穿透现象,不会判断case的情形值,直接向后加载运行,直到遇见break结束。
循环结构
三种基本循环: for 、 while 、do while
循环结构组成部分:一般可以分成4部分
-
初始化语句 :在循环最初开始时,需要定义一个初始化的变量,而且只会定义一次。
-
条件判断 (结束条件):如果条件成立满足,进入循环,如果田间不满足,则退出循环
-
循环体内容:重复要做的事情内容,可能包含很多条语句(事情是有规律的)
-
迭代语句 (步进语句):每次循环结束之后需要执行步进语句(迭代语句),对初始化的变量做步进(迭代)。
for循环语句结构
格式:****
for(1.初始化语句;2.条件判断表达式;4.迭代语句){
// 3.循环体内容
}
执行流程:
执行顺序:1----》2----》3-----》4-----》2-----》3----》4。。。。直到2不满足为止。
1.负责循环变量的初始化
2.负责判断是否满足循环条
不满足退出循环
3.负责执行具体的语句(逻辑功能)
4.负责变量的迭代
Scanner类 和Random类的使用
API(Application Programming Interface) 应用程序编程接口,javaAPI 就是程序员的一本字典。
是JDK中提供给我们使用的类的说明文档,只需要查阅API搜索自己需要的类。
Scanner类
它是一个可以解析基本数据类型和字符串的文本扫描器。主要作用就是把外部的数据录入到系统中。
Scanner sc = new Scanner(System.in);
// 让系统能够从外部录入一个整数 nextInt()
int num = sc.nextInt();
// 备注:System.in 可以实现通过键盘往系统中录入一个数据。
// 让系统能够实现从外部录入一个浮点数(小数) nextDouble()
double num02 = sc.nextDouble();
// 让系统能够实现从外部录入一个字符串数据 next()
String str = sc.next();
While循环语句
格式:
// 1.初始化语句
while(2.判断条件){
// 3.循环体内容
// 4.步进语句;
}
执行流程:
执行顺序:1----》2-----》3-----》4-----》2------》3------》4------》2------》3-------》4------》.....2不满足为止
1负责循环变量初始化
2负责判断是否满足循环条件,不满足退出
3负责执行具体语句,实现某个功能
4迭代循环变量
do-while循环
格式:
//1.初始化语句
do{
//3.循环体内容
//4.迭代语句
}while(2.判断条件);
执行流程:
执行顺序:1-----》3---->4----->2----->3------>4------>2----->3----->4----->........2不满足为止
1.负责定义循环变量,并且进行初始化
2.负责判断是否满足循环条件,不满足则跳出循环
3.负责执行具体语句,实现某个功能
4.迭代循环变量
备注:无条件执行一次循环体内容,即使判断条件是不满足也依然循环一次,这样的循环时有风险的,不建议使用。
循环语句的区别
for和while的区别:
控制语句中所涉及到的循环变量,当for循环结束后,定义的循环变量不能再被访问到,而while循环结束后依然可以被访问到。如果不能继续使用循环变量,建议使用for循环,因为for循环结束后,循环变量就会从内存中消失,能够提高内存的使用效率。
在已知循环次数的情况下,建议使用for循环,当循环次数不确定时使用while循环。
跳出语句
break、continue两个语句
break
使用情形:终止switch语句或者循环语句
备注:离开了使用场景对于break来说没有意义
public static void main(String[] args){
// 使用break语句
// 跳出循环语句
// 10以内的偶数和
int sum = 0;
for(int i = 0;i<=100;i++){
// 跳出情形 i》 10
if(i >10){
break;
}
if(i % 2 == 0){
sum += i;
}
}
//跳出switch case语句
//季节 四个季节
String season = "春季";
switch(season){
case "春季":
System.out.println("万物复苏的时候");
break;
case "夏季":
System.out.println("烈日炎炎的时候");
break;
case "秋季":
System.out.println("丰收的季节");
break;
case "冬季":
System.out.println("寒冷下雪的时候");
break;
default:
System.out.println("跳出三界外,不在五行中");
break;
}
}
continue
使用情形:结束本次循环,继续下一次循环
public static void main(String[] args){
// continue
// 求一下100以内的偶数和 2+4+6+8+.......
int sum = 0;
for(int i = 1; i<=100; i++){
//使用场景 奇数跳过去 不参数累加和
if(i % 2 != 0){
continue;
}
sun += i;
}
}
扩展知识点
1. 死循环
概念:循环条件永远都是true,死循环是永不结束的循环。例如:while(true){}
死循环一般要和跳出语句结合
-
循环嵌套
概念:是指一个循环的循环体是另一个循环。比如说for循环内置了一个for循环。就是嵌套循环。
循环的次数 = 外部循环的次数 * 内部循环的次数
格式: for(1.初始化语句1; 2.判断语句1;4.迭代语句1){ // 3.循环体内容 for(1.初始化语句2;2.判断语句;4.迭代语句2){ // 3.循环体内容2 ...... for(5.初始化语句;6.判断语句;8.迭代语句){ // 7.循环体内容2 } } }
执行流程
执行流程:1---2---3---5---6---7---8---6---7---8---》....6不满足为止(跳出循环)
----4---2----3---5---6----7---8---6----7----8---》----6不满足为止(跳出循环)
------>.......2不满足为止(结束整个循环)