1.Java中的运算符
在程序中经常出现一些特殊符号,如+,-,*,=,>等。这下写特殊符号被称作运算符。运算符用于对数据进行算术运算,赋值和比较操作。在Java中,运算符可分别为算术运算符,赋值运算符,比较运算符,逻辑运算符和位运算符
1.1算数运算符
在数学运算中最常见的就是加减成熟,被称之为四则运算。Java中算术运算符就是用来处理四则运算的符号。Java中算数运算符就是用来处理四则运算的符号,这是最简单,最常用的运算符号。
运算符 | 运算 | 范例 | 结果 |
+ - + - * / % ++ -- | 正号 负号 加号 减号 乘 除 取余 自增 自减 | +3 -4 5+5 6-3 3*4 5/5 7%5 a=2;a++/++a b=3;b--/--b | 3 4 10 3 12 1 2 3 4 |
++/--
其中自增自减运算符要与变量一起使用。
情况1: 即与变量在一起,不与其他任何符号连用时 (单独使用),变量一定会+1或-1;
情况2:自增/自减运算与其他符号连用时需要考虑表达式的值。 ++a/a++/--a/a--整体看成表达式
口诀:符号在前,先运算再赋值。符号在后,先赋值在运算
解析:符号在前时,变量先自增/自减,新值赋值给表达式。 符号在后时,先把变量的值赋值给表达式,然后变量再自增/自减
/:
情况1:参与的类型都是整型时,做取整运算,即 商n余m, 结果为n
情况2:只要有一个浮点数参与,就会做类似精确运算。
%:取余运算符号,也叫取模运算符号,做除法运算时,商n余m,结果为m.
情况1:参与运算都是整数时,余数是精确值
情况2: 有浮点数参与时,余数不一定是精确值。
1.2 赋值运算符
作用是将常量、变量或表达式的值赋给某一个变量。
=,+=,-=,/=,*=,%=,
1.3 关系运算符
用于对两个数值或变量进行比较,其结果是一个布尔值。
> < >= <= != ==
1.4 逻辑运算符
&&(与):用于判断两个条件是否同时成立 ||(或):用于判断是否有条件成立。 !:用于条件的否定
逻辑运算符又称之为短路运算符:
对布尔类型的数据进行操作,用来判断条件是否成立,一般都用于分支结构中
“&&”与“&” &&表示短路与 对于“与”来说,要求所有的条件都判断,而如果使用“短路与”如果第一个条件为false,则后面的条件将不再判断。 “||”与“|” ||表示短路或 对于“或”来说,要求所有的条件都判断,而如果使用“短路或”如果第一个条件为true,则后面的条件将不再判断。
No. | 条件1 | 条件2 | 结果 | |
&&(与) | ||(或) | |||
1 | true | true | true | true |
2 | true | false | false | true |
3 | false | true | false | true |
4 | false | false | false | false |
1.5字符串拼接符号
+
当+前后,只要有一个是字符串类型,就做拼接操作, 拼接后的结果是字符串类型。
1.6三目运算符(三元运算符)
变量类型 变量= 条件表达式?值1:值2;
变量类型:需要与值1或值2的类型相同。而值1与值2的类型要么相同,要么就可以自动转换。
1.7 位运算符
No. | 逻辑运算符 | 描述 |
1 | & | 按位与 |
2 | | | 按位或 |
3 | ^ | 异或(相同为0,不同为1) |
4 | ~ | 取反 |
5 | << | 左移位 |
6 | >> | 右移位 |
7 | >>> | 无符号右移位 |
public class OperatorDemo15 {
public static void main(String[] args) {
int x = 3 ;
// 3的二进制数据:00000000 00000000 00000000 00000011
int y = 6 ;
// 6的二进制数据:00000000 00000000 00000000 00000110
System.out.println(x & y);
// 与操作的结果: 00000000 00000000 00000000 00000010
System.out.println(x | y);
// 或操作的结果: 00000000 00000000 00000000 00000111
System.out.println(x ^ y);
// 异或操作结果: 00000000 00000000 00000000 00000101
}
}
求出负数的反码
public class OperatorDemo16 {
public static void main(String[] args) {
int x = -3 ; // -3的二进制数据:11111111 11111111 11111111 11111101
System.out.println(x + "的反码是:" + ~x);
}
}
右移操作
public class OperatorDemo18 {
public static void main(String[] args) {
int x = 3 ;
// 3的二进制数据:00000000 00000000 00000000 00000011
int y = -3 ;
// -3的二进制数据:11111111 11111111 11111111 11111101
System.out.println(x + "右移2位之后的内容:" + (x >> 2));
System.out.println(y + "右移2位之后的内容:" + (y >> 2));
}
}
以上的右移操作属于带符号位的右移操作,在Java中也提供了无符号的右移操作符“>>>”,使用此操作将以“0”填充空出来的位。
1.7 运算符的优先级
优先级 | 运算符 | 类 | 结合性 |
1 | () | 括号运算符 | 由左至右 |
1 | [] | 方括号运算符 | 由左至右 |
2 | !、+(正号)、-(负号) | 一元运算符 | 由右至左 |
2 | ~ | 位逻辑运算符 | 由右至左 |
2 | ++、-- | 递增与递减运算符 | 由右至左 |
3 | *、/、% | 算术运算符 | 由左至右 |
4 | +、- | 算术运算符 | 由左至右 |
5 | <<、>> | 位左移、右移运算符 | 由左至右 |
6 | >、>=、<、<= | 关系运算符 | 由左至右 |
7 | ==、!= | 关系运算符 | 由左至右 |
8 | &(位运算符AND) | 位逻辑运算符 | 由左至右 |
9 | ^(位运算符号XOR) | 位逻辑运算符 | 由左至右 |
10 | |(位运算符号OR) | 位逻辑运算符 | 由左至右 |
11 | && | 逻辑运算符 | 由左至右 |
12 | || | 逻辑运算符 | 由左至右 |
13 | ?: | 三目运算符 | 由右至左 |
14 | = | 赋值运算符 | 由右至左 |
2.结构语句
程序的运行顺序:
顺序结构:从程序开始,到程序结束
分支结构:在顺序结构基础上,根据条件进行(成立于否)选择执行方向。
循环结构:在顺序结构基础上,根据条件进行多次执行相同的或相似的代码
2.1 分支结构
2.1.1 if 语句
if语句里面会包含条件,后边跟一个语句或一组语句,仅当给定条件为真时才执行语句。
如果条件为false,那么if语句体内的语句将被完全忽略。
2.1.2 if...else语句
if (判断条件){
语句主体1 ;
}else{
语句主体2;
}
2.1.3 if...else if...else语句
2.1.4 switch 语句
要在许多的选择条件中找到并执行其中一个符合判断条件的语句时,除了可以使用if..else不断地判断之外,也可以使用另一种更方便的方式即多重选择——switch语句,
语法格式:
switch (表达式){
case 选择值1 : 语句主体 1 ; [break];
case 选择值2 : 语句主体 2 ; [break ];
…….
case 选择值n : 语句主体 n ; [break] ;
default: 语句主体 ;
}
break:有打断,毁掉,跳出,结束的含义
case后面选择性添加break;如果后面没有break会一直运行下去直到遇到break或default或全部执行完后续的所有分支。
2.2 循环结构
循环结构:重复执行相同或相似代码
循环三要素:
循环变量的声明,循环条件,循环变量的改变方向
break关键字:用在循环结构中时,表示结束/打断循环
continue关键字:用在循环结构中,表示结束当次循环体,继续下一次循环
2.2.1 while语句
格式:
while(boolean表达式){
循环体:重复的或者是相似的代码
}
执行逻辑:当jvm执行到while关键字时,会执行boolean表达式,
如果表达式的值为true,就会执行循环体代码一次,然后会继续执行boolean表达式
如果表达式的值为false时,就会跳过循环执行后续代码。
死循环中经常会使用break关键字
public class Study01{
public static void main(String[] args){
int n=0;
int sum=0;//定义一个变量sum。存前n项的和
while(n<100){
n++;
sum+=n;
}
System.out.println("sum:"+sum);
2.2.2 do...while语句
do{
循环体
}while(循环条件);
执行逻辑:jvm先碰到do,然后执行一次循环体,再判断循环条件,
如果循环条件为true,会继续执行循环体,如果循环条件为false,会结束循环,执行后续代码。
while和do-while的区别
while 先执行循环条件,条件成立再执行循环体。
do-while先执行循环体,再执行循环条件
do-while一定会执行一次循环体。
做一件事时,如果可以翻译成这样:
当什么什么时,就做重复一件事,就可以使用while
重复做一件事,知道什么什么时候结束。就可以使用do-while
public class Study01{
public static void main(String[] args){
int n=0;
int sum=0;//定义一个变量sum。存前n项的和
do{
sum+=n;
n++;
}while(n<101);
System.out.println("sum:"+sum);
一个球从100米高的地方向下落,每次反弹的距离是落下的距离的二分之一,求第五次下落后球总共行走的路程。
public class Study04{
public static void main(String[] args){
double h =100;
double x =0;
double s =0;
int m =1;
while(m<5){
h/=2;
s+=h*2;
m++;
}
x=100+s;
System.out.println("总路程为:"+x);
}
}
2.2.3 for循环语句
for 循环:经典循环结构
for(循环变量的声明;循环条件;循环变量的改变){
//循环体
}
执行逻辑:碰到for时,会只执行一次循环变量的声明,然后执行循环条件,
如果条件成立执行循环体,然后再执行循环变量的改变,然后再执行循环条件,......,
如果条件不成立,跳出循环,执行后续代码
随机生成一个100以内的整数 判断此整数是否是素数 ,素数:也是质数,就是只能被1和本身整除的数 1不是质数
public class ForDemo02{
public static void main(String[] args){
int a =(int)(Math.random()*101);
boolean flag = false;//定义一个变量充当开关
for (int i=2;i<Math.sqrt(a);i++ ){//开根号
if(a%i==0){
flag = true;
break;
}
}
//检查完毕后,才能判断这个数是不是素数。
if (flag){
System.out.println("不是素数");
}else{
System.out.println("是素数");
}
2.2.4.foreach循环语句
foreach的语句格式:
for(元素类型t 元素变量x : 遍历对象obj){
引用了x的java语句;
}
foreach比for的好处和弊端
好处:相对于for来说方便了对容器的遍历
弊端:没有索引,不能操作元素中的元素
foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。
foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本。
foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。从英文字面意思理解foreach也就是“for 每一个”的意思。实际上也就是这个意思。