1. javase基础3
1.1流程控制语句
流程控制语句
顺序结构: 默认顺序从上到下,从左到右
选择结构: 根据条件决定是否执行一段语句
if…
switch
循环结构: 控制一段代码执行多次 (执行的次数可以有条件控制)
for
while
do…while
选择结构:
单选|单分支:
if(选择判断){
执行的语句体;
}
满足()条件就执行语句体,不满足就不执行
选择判断 : 是一个结果为boolean类型的表达式 true满足|false不满足
双选|双分支:
if(选择判断){
满足条件执行的语句体1;
}else{
不满足条件执行的语句体2;
}
根据条件的结果,决定执行那种语句体
如果结果为true,执行语句体1,结果为false执行语句体2
多选|多分支:
if(条件1){
满足条件执行的语句体1;
} else if(条件2){
不满足条件执行的语句体2;
} else if(条件3){
不满足条件执行的语句体3;
}
…
else{
以上条件都不满足就执行语句体n; --接盘侠,可以存在可以不存在
}
注意: 多选择的多个判断 从上到下一次进行,只要执行了一个对应的语句体,后面的语句体不会再次执行
一个if结构只能执行一个语句体
如果语句体中的语句只有一条,前后的{}可以省略
public class Demo02{
public static void main(String[] args){
//单选泽
System.out.println("if语句开始");
if(false){
System.out.println("if语句体中");
}
System.out.println("if语句结束");
//双选择
int i =-1;
if(i>0){
System.out.println("dayu");
}else{
System.out.println("budayu");
}
//多选择
if(i==0){
System.out.println("=0");
}else if(i>0){
System.out.println(">0");
}else if(i<0){
System.out.println("<0");
}
if(i==0)
System.out.println("=0");
else if(i>0)
System.out.println(">0");
else
System.out.println("<0");
}
}
1.1.2 小练习
问:
三个条件 : 身高>180 银行卡余额>1000000 颜色: 90
满足一个条件: 屌丝
满足两个条件: 潜力股
满足三个条件: 高富帅
都不满足: 辣鸡
分析: 键盘输入 if
import java.util.Scanner;
public class Demo03{
public static void main(String[] args){
//创建Scanner类型的引用
Scanner sc = new Scanner(System.in);
System.out.println("请输入身高:");
int height = sc.nextInt();
System.out.println("请输入银行卡余额:");
double money = sc.nextDouble();
System.out.println("请输入颜色分数:");
int face = sc.nextInt();
//计数器
int count = 0; //满足条件的个数
if(height>180){
//count = count+1;
count++; //count变量的值自身+1
}
if(money>1000000){
count++;
}
if(face>90){
count++;
}
//多选择
//通过判断得到 一共满足了几个条件
if(count==3){
System.out.println("高富帅");
}else if(count==2){
System.out.println("潜力股");
}else if(count==1){
System.out.println("屌丝");
}else{
System.out.println("辣鸡!!!");
}
}
}
1.2 判断语句
switch 定制判断
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
…
default:
语句体n;
break;
}
执行流程:
1.计算表达式,得到一个结果
2.从上到下与每一个case后的值进行判断是否相等,相等执行对应的语句体,不相等继续向下判断
3.break;代表结束当前switch语句结构,没有break会发生case穿透
4.如果所有的case都不满足,就执行default后面的语句体n,相当于else,可以不写
表达式: 一般为变量名,可以为表达式,可以为常量(没意义)
类型: byte,short,int,char,枚举(jdk1.5),字符串(jdk1.7)
switch 与 if的区别:
if: 区间判断,定值判断
switch: 定值判断
能用switch都能用if,但是能用if不一定能用switch
public class Demo04{
public static void main(String[] args){
//判断 年龄: 18~20岁之间的员工,根据年龄决定工资 18-》18万 19-》19万 20-》20万
int age = 30;
int sal = 0; //年薪
//根据年龄判定 ,决定年薪的值
switch(age){
case 18:
sal = 180000;
System.out.println("年薪的值为:"+sal);
break;
case 19:
sal = 190000;
System.out.println("年薪的值为:"+sal);
break;
case 20:
sal = 200000;
System.out.println("年薪的值为:"+sal);
break;
default:
System.out.println("年龄不符合要求!!!");
}
//判断用户是否为管理员 admin --> 使用if尝试判断
String name = "admin";
switch(name){
case "admin":
System.out.println("管理员");
break;
default:
System.out.println("普通用户");
}
}
}
1.3 算术运算符
算术运算符: +,-,,/,%,++,–
a+b
a-b
ab
a/b
+:
正号(省略)
加法运算 a+b
字符串的连接符 : 当+左右两边一旦出现字符串,+都作为字符串的连接符使用,把两边的数据最终连接成为一整个字符串
%: 求余数
3%5
规律: 当第一个操作数小于第二个操作数的时候,结果就为第一个操作数
++: 自增,自身+1
--: 自减,自身-1
只影响自己:
++放在操作数的前面还是后面,都是自身+1
--放在操作数的前面还是后面,都是自身-1
影响其他值: (++|–赋值运算,输出语句,表达式)
++|–放在操作数的前面,先自身+1|-1,然后再去参与运算(赋值,输出,计算表达式)
++|–放在操作数的后面,然后再去参与运算(赋值,输出,计算表达式),先自身+1|-1
public class Demo05{
public static void main(String[] args){
int a = 1;
int b = 2;
System.out.println(a+","+b);
//影响自己(操作数)的值
a++; //a=a+1;
++a; //a=a+1;
System.out.println(a);
--b; //b=b-1;
b--; //b=b-1;
System.out.println(b); //0
//影响别人
System.out.println(b++); //0
System.out.println(b); //1
int c = ++a + 10;
System.out.println(c); //
System.out.println(a);
}
}
1.4 关系运算符|比较运算符
关系运算符|比较运算符
< >= <= == !=
< >= <=
操作数只能为为基础数据类型的数据 byte,short,int,long,float,double,char
== !=
任意类型都能判断
注意: 所有的比较运算符结果为boolean值
boolean 类型不参与类型转换
!=就是==取反
public class Demo07{
public static void main(String[] args){
int a = 7;
int b = 5;
boolean flag = a+b> 10;
System.out.println(flag);
String name = "zhangsan";
String name2 = "zhangsanfeng";
System.out.println(name==name2);
System.out.println('a'>=97);
System.out.println(true!=false);
System.out.println(true!=a>b);
}
}
1.5 逻辑运算符
逻辑运算符
两边的操作数必须值为boolean类型(值,表达式)
一般用来用来连接两个条件
& 与
两边都满足才是满足,一个为false就是false
|
一个为true就是true,两个都为false才是false
! 取反 !true=>false !false->true
^ 异或
两边的操作数相等为false,不等为true
短路: 如果操作操作数能够决定整个结果,右边的操作数将不会执行
&&
||
注意: 逻辑运算符两边操作数结果必须为boolean
逻辑运算符最终的结果boolean类型的值
建议使用短路运算符
public class Demo09{
public static void main(String[] args){
System.out.println("----------&---------------");
System.out.println(true & false); //false
System.out.println(true & true); //true
System.out.println(false & true); //false
System.out.println(false & false); //false
System.out.println("zhangsan"!="zhangsan" & "lisi".equals("lisi")); //false
System.out.println("----------|---------------");
System.out.println(true | false); //true
System.out.println(true | true); //true
System.out.println(false | true); //true
System.out.println(false | false); //false
System.out.println("zhangsan"!="zhangsan" | "lisi".equals("lisi")); //true
System.out.println("----------!---------------");
System.out.println(!false); //true
System.out.println(!true); //false
System.out.println("----------^---------------");
System.out.println(true ^ false); //true
System.out.println(true ^ true); //false
System.out.println(false ^ true); //true
System.out.println(false ^ false); //false
System.out.println("zhangsan"!="zhangsan" | "lisi".equals("lisi")); //true
System.out.println("----------&&---------------");
System.out.println(true && false); //false
System.out.println(true && true); //true
System.out.println(false && true); //false
System.out.println(false && false); //false
System.out.println("zhangsan"!="zhangsan" & "lisi".equals("lisi")); //false
//System.out.println("zhangsan"!="zhangsan" & 5/0==0); //java.lang.ArithmeticException: / by zero
System.out.println("zhangsan"!="zhangsan" && 5/0==0); //false,因为第二个操作数不会执行,发生短路
String name = "张三";
int pwd = 1234;
//用户名与张三相等,同时必须是否为123相等,相等登录成功,不等登录失败
if(name.equals("张三") && pwd==123 ){
System.out.println("登录成功");
}else{
System.out.println("登录失败");
}
}
}
1.6 位运算符
位运算符: (了解)
先把操作数转为二进制,然后运算,结果转为十进制
十进制整数转为二进制:
使用十进制的整数不停的除以2,最终的结果为0的时候,从下晚上看余数
0b开头标识二进制的整数
二进制转为十进制:
从最后一位数开始,不停的通过这一位置的数据*当前进制数^0,次方每次+1,最终的和就是十进制的表现形式
& : 同一个位置的两个数,一个为0就是0,两个都为1才是1
| : 同一个位置的两个数,一个为1就是1,连个都为0才是0
^ : 同一个位置的两个数,相等为0,不等为1
以上三个运算符,当两边的操作数为boolean,最为逻辑运算符,当两边的操作数为数字,作为位运算符存在
注意: 一个数据如果对另一个数据异或两次,结果是元数据本身
右移运算符
操作数1>>操作数2 :
操作数1先转为二进制,然后对二进制的操作数1向右移动操作数2个位数,移出的数据不看,保留的数据转为十进制
规律: 变小 操作数1>>操作数2 ==> 操作数1/2^操作数2
<< 左移运算符
操作数1<<操作数2 :
操作数1先转为二进制,然后对二进制的操作数1向左移动操作数2个位数,空位补0,保留的数据转为十进制
规律: 变大 操作数1<<操作数2 ==> 操作数12^操作数2
注意: 位运算符执行效率更高,如果位移比|/效率高,所以很多源码中会常常见到
public class Demo10{
public static void main(String[] args){
System.out.println(10);
System.out.println(0b10);
System.out.println(0b1110);
System.out.println(2&3); //2
System.out.println(2|3); //3
System.out.println(2^3); //1
System.out.println(2^3);
System.out.println(16>>2); //3
System.out.println(2<<2); //8
System.out.println(14<<3); //112
}
}
1.7 运算符优先级
运算符的优先级:
优先级: 优先执行谁
口诀: 单目算数位关系,逻辑三目后赋值
默认从左向右运算,()|. 优先级最高
运算符分类:
根据操作数的个数进行根类
单目: 操作数只有一个 ++ – +正号 -负号 !
双目: 操作数有2个 + - * / % > < …
三目: 条件运算符
public class Demo12{
public static void main(String[] args){
//&& 与 || 之间的优先级: &&优先级高于||
System.out.println(true && true || false); //true
System.out.println(true || true && false); //true
}
}