1.运算符
分类
1:算数运算符
2.赋值运算符
3.比较|关系运算符
4.逻辑运算符
5.条件运算符
6.位运算符
操作数: 运算符左右两边的操作数
表达式: 运算符连接左右两边的操作数整体成为表达式
语句: ; 表示 语句的结束
单目|一元运算符:
操作数只有一个的 ++ --
++i;i--;
操作自己|影响自己:
++放在操作数的前面还是后面,都是自身+1
--放在操作数的前面还是后面,都是自身-1
操作别人|影响别人(操作数的值是多少影响其他的结果)|参与运算符:
++|-- 放在操作数的前面,先自身+1|-1,再去参与运算
++|-- 放在操作数的后面,先去参与运算,再自身+1|-1
int a=5;
int b=3;
a++; //a=6--a;
System.out.println(a); //a=5
//操作别人|影响别人 -->影响打印的结果System.out.println(a++); //5 先操作System.out.println(a); //6 再自增
b=--a;
System.out.println(a); //5先自增再操作System.out.println(b); //5//两道习题int c= 2+ ++a + b--;
System.out.println(a); //6System.out.println(b); //4System.out.println(c); //13
c = a++ + ++a + a++ + a++ + ++a;
System.out.println(a); // 11System.out.println(c); // 42
双目|二元运算符: 操作数有的 + / .. > < +=
+= a+=b ==> a=a+b;
-= a-=b ==> a=a-b;
*=
/= a/=b ==> a=a/b;
%=取余数
int a=5;
int b=3;
a=a+b; //编译器会自动帮我们优化成+= ->看反编译工具System.out.println(a+=b); //8//System.out.println(a=a/b); //报错,Int到double出错System.out.println(a/=b); //2/*推荐使用扩展赋值运算符;1.提高执行效率2.自动做强制类型转换*/
//注意下方代码,操作运算时在有字符串的时候才+表示连接符,否则会为二进制加法a = 97;
System.out.println("hello" + 'a' + 1); // "helloa1"System.out.println('a' + 1 + "hello"); // 98+"hello" -> "98hello"
测试java中的比较运算符|关系运算符
> < > >= <=
只能比较基本数据类型 byte short char int long float double
== !=
基本数据类型的数据,引用数据类型的数据都可以比较是否相等
最终的运算结果,都为boolean类型的值
int a=5;
int b=3;
System.out.println(a>=b); //true
System.out.println(a+3 != b-1); //true
System.out.println("因为" == ""+'因'+'为');
//如果比较字符串中的内容是否相等时候,不推荐使用== 字符串1.equals(字符串2)->结果为true相等,false不相等
System.out.println("因为".equals(""+'因'+'为'));
测试java中的逻辑运算符
操作数值为boolean类型的表达式
& 两边的操作数 都是true才是true,一个为false,结果就为false
| 两边的操作数 一个为true就是true,两个都为false才是false
! 取反
^ 相同为false,不同为true
短路 :如果第一个操作数已经能够决定最终的结果,第二个操作数不再执行 ==&& 两边的操作数 都是true才是true,一个为false,结果就为false || 两边的操作数 一个为true就是true,两个都为false才是false==
推荐使用&& 或者 ||,提议提高效率
System.out.println("--------------&-----------------");
//两都为真才为真 System.out.println(true & false); //false System.out.println(false & false); //false System.out.println(false & true); //false System.out.println(true & true); //true
System.out.println("--------------|-----------------");
//只要有一个为真则为真 System.out.println(true | false); //true System.out.println(false | false); //false System.out.println(false | true); //true System.out.println(true | true); //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(false ^ false); //false System.out.println(false ^ true); //true System.out.println(true ^ true); //false
//测试短路&&只要判断左边为假直接为假 //System.out.println(5/0==0); //报错0不能做除数 //System.out.println(false & 5/0==0); //false 报错0不能做除数 System.out.println(false && 5/0==0); //false 不报错 只判断左边右边不判断
三目|三元|条件运算符:操作数只有三个的
条件表达式 ? 值1 : 值2 ; ===>最终的结果不是值1就是值2
条件表达式是一个值为boolean类型的表达式
条件表达式 ? 值1 : 值2 ; ===>最终的结果不是值1就是值2
执行流程:
1.计算条件表达式
2.如果结果为true,整个条件运算符的结果为值1
3.如果结果为false,整个条件运算符的结果为值2
//1.比较3个数的大小,取最大的那个值int m=a>b? a : b;
m=m>c? m :c;
System.out.println(m);
m=a>b && a>c ? a : b>c? b: c; //System.out.println(m);
测试java中的位运算符(了解)
先把操作数转为2进制,再去运算,得到结果转为十进制
& 同一位置的两个数如果两个都为1才是1,一个为0就是0
| 同一位置的两个数如果一个为1就是1,两个都为0才是0
^ 同一位置的两个数如果一相同为0,不同为1
位移运算符
右移
先把第一个操作数转为2进制,向右移动第二个操作数个位数,想象原数据右侧有分水线,最终看左侧保留的二进制数据转为十进制 ==可以转换为二进制,
右移n位就除以2的n次方== /2 8>>3 --> 8/2^3 ==1
<< 左移
先把第一个操作数转为2进制,向左移动第二个操作数个位数,空位补0,转为十进制 ==可以转换为二进制,
左移n位就乘以2的n次方== *2 8<<3 --> 8*2^3
System.out.println(2&3); //2 System.out.println(2|3); //3 System.out.println(2^3); //1
System.out.println(8>>3); //1 System.out.println(8>>2); //2 System.out.println(8<<3); //64 System.out.println(8<<1); //16 System.out.println(9>>2); //2
运算符优先级:
单目算数位关系,逻辑三目后赋值
Scanner和Random的使用
Scanner
测试java中的Scanner
基本数据类型: int a=5;
引用数据类型的使用:
1).创建一个该类型的引用|变量 引用数据类型 变量名 = new 引用数据类型();
2) 使用功能 :
变量名.功能名字();
Scanner : 接收键盘输入
1.导包
告诉 编译器Scanner类的位置 import 报名+类名;
位置: 类的上面导包
2.创建一个Scanner类型的引用|变量
Scanner sc=new Scanner(http://System.in);
3.使用功能
sc.nextInt(); 接收用户输入的int类型的数据
sc.nextByte() 接收用户输入的byte类型的数据
sc.nextShort() 接收用户输入的short类型的数据
sc.nextLong() 接收用户输入的long类型的数据
sc.nextDouble() 接收用户输入的double类型的数据
sc.nextFloat()接收用户输入的float类型的数据
sc.next() 接收用户输入的字符串类型的数据
从有效字符开始,遇到空格就无法接收,遇到enter结束功能
==sc.nextLine() 接收String类型数据,以行为单位接收==
4.关闭
sc.close(); 关闭资源
必须要等待全部使用完毕Scanner的功能才能关闭
import java.util.Scanner;//1.导包public class Scanner08{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);//2.创建一个Scanner类型的引用|变量 int i=sc.nextInt();//3.使用功能 //int i=sc.nextByte();//byte型 System.out.println(i);
/*//小数double d=sc.nextDouble();System.out.println(d);//字符串System.out.println("请输入用户名");String str=sc.next();System.out.println(str);*/
//处理遗留enter问题 sc.nextLine();
System.out.println("接收字符串类型数据");
String s=sc.nextLine();
System.out.println("s="+s);
//键盘输入用户名和密码 与指定的用户比较,看是否登录成功 laopei 1234 System.out.println("请输入用户名");
String name=sc.next();
int pwd =sc.nextInt();
System.out.println("laopei".equals(name)&& pwd == 1234 ? "登录成功" : "用户名或密码错误");
System.out.println( );
//关闭 sc.close();
}
}
Random
1.导包
2.创建该类型的引用或者变量
3.使用功能
nextInt() 随机产生一个int范围内的整数
nextInt(整数n) 产生一个 [0,n) 随机整数
nextDouble() 随机产生[0,1)之间的随机小数
公式:
[0,max] ran.nextInt(max+1);
[min,max] ran.nextInt(max-min+1)+min;*
[min,max) ran.nextInt(max-min)+min;*
import java.util.Random;//1.导包public class Random09{
public static void main(String[] args){
Random ran = new Random();//2.创建该类型的引用或者变量 int i=ran.nextInt();//3.使用功能 System.out.println(i);
//[0,19) -->[0,18] int i2=ran.nextInt(20);
System.out.println(i2);
//[1,19] i2=ran.nextInt(19)+1; //[0,18] + 1 --> [1,19] System.out.println(i2);
//[5,10] i2=ran.nextInt(10-5+1)+5;
System.out.println(i2);
//随机小数 double d=ran.nextDouble();
System.out.println(d);
}
}
循环
流程控制语句:
顺序结构: 默认执行顺序 从上倒下,从左到右
选择结构: 满足条件执行对应的语句体
循环结构: 重复执行某些代码
if..else
/*单选泽|单分支:if(条件){语句体;}条件:是一个值为boolean类型的表达式满足条件,就执行{}中的语句体,不满足条件,跳过整个if结构*/
if(false)
System.out.println("if结构中1....");
System.out.println("if结构中2....");
System.out.println("if结束");
/*双选择|双分支:if(条件){语句体1;}else{语句体2;}满足条件执行语句体1,不满足条件,执行语句体2*/
String name="zhangsan1";
if("zhangsan".equals(name)){
System.out.println("用户名正确");
}else{
System.out.println("用户名错误");
}
/*多选择|多分支:if(条件1){语句体1;}else if(条件2){语句体2;}else if(){....}...else{如果以上条件都不满足,执行语句体n;}*/
int a=-5;
if(a>0){
System.out.println("a>0");
}else if(a==0){
System.out.println("a=0");
}else if(a<0){
System.out.println("a<0");
}
/*只要{}中的语句体只有一句的时候,前后的{}可以省略if与条件运算符之间的区别:if可以没有结果,条件运算符肯定有一个结果if可以同时对多个条件进行判断结果复杂推荐使用if,如果结构简单,推荐使用条件运算符*/
switch
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n;
break;
}
//执行流程: //1.计算表达式,得到一个结果,值 //2.第一步算出的结果值与case后的值进行判断,如果相等,就执行对应的语句体,如果不相等,就继续向下判断 long i=100;
char ch='a';
switch(ch){
case 1:
System.out.println("1");
break;
case 10:
System.out.println("10");
break;
case 100:
System.out.println("100");
break;
case 'a':
System.out.println("a");
break;
}//100 //3.如果执行了语句体,后如果有break,结束整个switch语句,如果没有break会发生case穿透 String flag="绿灯";
switch(flag){
case "红灯":
System.out.println("红灯停");
break;
case "黄灯":
System.out.println("黄灯等一等");
break;
case "绿灯":
System.out.println("绿灯行");
default:
System.out.println("傻了吧!!!!!!");
break;
}//绿灯行 傻了吧!!!!!!
/*4.如果以上所有case后的值都不满足条件,执行default(接盘侠 else)表达式: 只能为byte,short,char,int,String(jdk1.7之后),枚举(jdk1.5) seo 搜索引擎优化case穿透: 满足条件的语句体执行之后,如果没有break,下面的case无论是否满足条件,都会执行他们的语句体,直到遇到下一个break或switch的结果而结束default:位置可以任意改变,break可以省略,但是如果写在switch最后,省略break没有影响,其他位置会发生case穿透if和switch区别:1.if可以做区间判断,可以做定定值判断2.switch只能做定值判断能使用switch地方都能使用if*/