该部分主要了解Java语言中的运算符及其表达式的定义、用法等并以这个为基础进行程序控制语句的学习。
运算符负责对数据进行计算和处理。运算符一般由一个或多个符号构成,如+、>=、<、<=。少数运算符由两种含义,应根据上下文理解,如-3中的-是作为一元运算符(负号)使用,而a-6中的-是作为二元运算符(减号)使用。运算符由优先级。先计算优先级较高的,再计算优先级较低的。运算符也有结核性。
算数运算符主要用于整型或浮点型数据的运算。
二元运算符:
运算符 | 用法 | 含义 | 结合性 |
---|---|---|---|
+ | a+b | 加法 | 左 |
- | a-b | 减法 | 左 |
* | a*b | 乘法 | 左 |
/ | a/b | 除法 | 左 |
% | a%b | 模运算(求余) | 左 |
注意:整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN的结果。
一元运算符:
运算符 | 用法 | 含义 | 结合性 |
---|---|---|---|
+ | +a | 正数 | 右 |
- | -a | 负数 | 右 |
++ | ++a,a++ | 自增 | 右,左 |
– | –a,a– | 自减 | 右,左 |
算数运算符举例:
public class JavaOperator { public static void main(String args[]){ int i=7; int j=14; float a=7.14f; double b=7.0; System.out.println("i+a="+(i+a));//整数与浮点数相加 System.out.println("i*j="+(i*j));//两个整数相乘 System.out.println("i/j="+(i/j));//连个整数相除,其结果还是整数(舍去小数点后的所有 System.out.println("i%j="+(i%j));//两个整数求余,注意求余必须是两个整型 System.out.println("a*b="+(a*b));//两个浮点数相乘 System.out.println("a/b="+(a/b));//两个浮点数相除 System.out.println("i++="+(i++));//先使用,后自增 System.out.println("++i="+(++i));//先自增,再使用 System.out.println("j--="+(j--));//先使用,后自减 System.out.println("--j="+(--j));//先自减,再使用 } }
运行结果截图:
赋值运算符是二元运算符,左边的操作数必须是变量,右边的操作数为表达式,左右两边的类型如果一致,则直接将右边的值赋给左边的变量;如果不一致,则将表达式的值需要转换为左边变量的类型,再赋值。常见的扩展赋值运算符如下表所示:
运算符 | 示例 | 含义 |
---|---|---|
+= | count+=3 | count=count+3 |
-= | count-=3 | count=count-3 |
*= | count*=3 | count=count*3 |
/= | count/=3 | count=count/3 |
%= | count%=3 | count=count%3 |
条件运算符由?和:组成格式如下
3==7?false_0:true_1;//返回false_0 3==7//返回false 3!=7?true_1:false_0;//返回true_1 3!=7//返回true
条件运算符可以代替简单的if-else语句
Java提供位操作运算符。所有的数在Java虚拟机中都会转换为补码二进制表示。位运算符不是对整个数进行运算,而是对该数二进制位上的0或1进行运算。位运算符如下表所示:
运算符 | 示例 | 含义 |
---|---|---|
& | a&b | 使a和b按位相与 |
| | a|b | 使a和b按位相或 |
~ | ~a | 对a按位取反 |
^ | a^b | 使a和b按位异或 |
<< | a<<b | 使a左移b位,右补零 |
>> | a>>b | 使a右移b位,左边补充符号位 |
>>> | a>>>b | 使a无符号右移b位,左边始终补填0 |
在Java中没有一个数的幂运算、三角函数运算、反函数运算等运算,这时就会引用Java中的Math类,在运用Math类前需要在源文件引用如下代码:
import static java.lang.Math.*;
表达式式程序设计语言的基本组成部分,表示一种求值的规则,是由运算符和操作数组成的符号序列。表达式根据运算符的优先级别和结合性,首先执行指定的计算,再返回某个值。
在对表达式进行运算时,遵循一定的规则,要按运算符的优先级别从高到低进行,同级的运算符则按从左到右的方向进行。Java运算符的优先级按照从高大到低的顺序展示在下表:
1 | . [ ] ( ) ++ – ! ~ instanceof |
---|---|
2 | new(type) |
3 | * / % |
4 | + - |
5 | >> >>> << |
6 | <> <= >= |
7 | == != |
8 | & |
9 | ^ |
10 | | |
11 | && |
12 | | | |
13 | ?: |
14 | = += -= *= /= %= ^= |
15 | &= != <<= >>= >>>= |
Java程序控制语句分为3类:选择、循环和跳转语句。其中,①选择语句根据条件表达式计算结果,并使程序可以选择不同的执行路径;②循环语句式程序能够重复执行一个或多个语句;③跳转语句允许程序以非线性的方式执行。
if语句的执行过程如下:如果条件为真(true),则执行if后面的语句(statement);否则,执行else后面的语句(statement2)。任何时候两条语句都不可能同时执行。
通过使用if-else if阶梯确定某个月是什么季节
public class Season { public static void main(String args[]){ int month=7;//初始化月份 String season;//声明字符串类型变量season if(month==12||month==1||month==2) season="Winter"; else if(month==3||month==4||month==5) season="Spring"; else if (month==6||month==7||month==8) season="Summer"; else if (month==9||month==10||month==11) season="Autumn"; else season="It is a wrong number!";//初始化的月份超出范围报错 System.out.println(month+" is in the "+season+".");//输出结果 } }
运行结果截图:
该题目除了可以用if-else if语句执行,还可用switch语句执行。其中switch语句的执行过成为:表达式的值首先与每个case语句中的常量进行比较。如果发现了一个与之相匹配的,则执行该case语句后的代码,不在匹配后面的case语句。如果 没有发现一个case常量与表达式的值相匹配,则执行default语句。若没有default语句则什么也不执行。
public class Season { public static void main(String args[]){ int month=7;//初始化月份 String season;//声明字符串类型变量season switch (month){ case 12: case 1: case 2:season="Winter";break; case 3: case 4: case 5:season="Spring";break; case 6: case 7: case 8:season="Summer";break; case 9: case 10: case 11:season="Autumn";break; default:season="It is a wrong number!"; } System.out.println(month+" is in the "+season+".");//输出结果 } }
while语句是Java最基本的循环语句,当它的条件表达式是true时,while语句重复执行循环体,循环体可以是一个语句或者语句块。
计算10!
public class Math { public static void main(String args[]){ int mul=1;//初始化阶乘量 int i=1;//从1开始进行阶乘 while(i<=10){ mul*=i; i++; } System.out.println("10!= "+mul); } }
运行结果截图:
该程序还可以使用for语句进行编写:
public class Math { public static void main(String args[]){ int mul=1;//初始化阶乘量 for(int i=1;i<=10;i++){ mul*=i; } System.out.println("10!= "+mul); } }
该程序也可以用do-while进行编写:
public class Math { public static void main(String args[]){ int mul=1;//初始化阶乘量 int i=1; do{ mul*=i; i++; }while(i<=10); System.out.println("10!= "+mul); } }
有时需要强迫一次循环提前结束从而进行下一次循环。也就是说,可以继续运行循环,但是要忽略这次循环剩余的循环体的语句,这时就需要使用continue语句。
使用continue语句在每行打印5个数字
public class Continue { public static void main(String args[]){ for(int i=1;i<=20;i++){ System.out.print(i+" "); if(i%5!=0)//当i不能被5整除时继续打印数字不换行 continue; System.out.println("");//当i不为5时需要换行后继续打印数字 } } }
运行结果截图:
【1】Java此程序设计(第2版)清华大学出版社
【2】开源资料