上次介绍了Java的运算符,今天来介绍下运算符的优先级,以及Java的关键字、保留字。
一、运算符优先级
序号 | 运算符 | 名称 | 目数 | 结合性 | 说明 |
1 | [ ] | 方括号 |
| 从左向右 | 优先级最高 |
. | 点号 | 双目 | |||
( ) | 圆括号 |
| |||
2 | ! | 逻辑非运算 | 单目 | 从右向左 |
|
~ | 按位非运算 | 单目 |
| ||
++ | 自增 | 单目 |
| ||
-- | 自减 | 单目 |
| ||
+ | 正号 | 单目 |
| ||
- | 负号 | 单目 |
| ||
( ) | 强制类型转换 |
|
| ||
new | new关键字 |
|
| ||
3 | * | 乘号 | 双目 | 从左向右 | 算术运算符 |
/ | 除号 | ||||
% | 取余 | ||||
4 | + | 加号 | 双目 | 从左向右 | 算术运算符 |
- | 减号 | ||||
5 | << | 带符号左移位运算 | 双目 | 从左向右 | 位运算符 |
>> | 带符号右移位运算 | ||||
>>> | 无符号右移运算 | ||||
6 | < | 小于 | 双目 | 从左向右 | 关系运算符 |
<= | 小于等于 | 双目 | |||
> | 大于 | 双目 | |||
>= | 大于等于 | 双目 | |||
instanceof | 对象是否为特定类的实例 | 双目 |
| ||
7 | == | 关系等于运算 | 双目 | 从左向右 | 关系运算符 |
!= | 关系不等于运算 | 双目 | 从左向右 | ||
8 | & | 按位与运算 | 双目 | 从左向右 | 位运算符 |
9 | ^ | 按位异或运算 | 双目 | 从左向右 | |
10 | | | 按位或运算 | 双目 | 从左向右 | |
11 | && | 逻辑与运算 | 双目 | 从左向右 | 逻辑运算符 |
12 | || | 逻辑或运算 | 双目 | 从左向右 | |
13 | ? : | 三目运算 | 三目 | 从右向左 |
|
14 | = | 赋值运算 | 双目 | 从右向左 | 优先级最低 |
+= | 混合赋值运算符 | ||||
-= | |||||
*= | |||||
/= | |||||
%= | |||||
&= | |||||
|= | |||||
^= | |||||
<<= | |||||
>>= | |||||
>>>= |
下面用代码来介绍下从右向左计算。
package javalearningday03;/** * * @author 小川94 * @date 2018年1月28日 */public class JavaOperationPriority { public static void main(String[] args) { testMethod(); } /** * 由右向左计算,在进行运算代码编写时,建议加上括号区分层级性,增加可读性,同时方便后期维护 */ public static void testMethod() { // 右结合运算:运算符右边是否连接变量 // -n++,-号右边连接变量n,++右边没有连接变量,先算-号,再算++ int n = 5; int m = -n++; //后加加是先算整体,(-n)++为-5 System.out.println(m); // m = -5 System.out.println(n); // n = 6 // ++右边连接变量i,先计算++i,再计算-(++i) int i = 5; int k = -++i; System.out.println(i); // i = 6 System.out.println(k); // k = -6 int a = 5; int b = -8-++a; System.out.println(a); // 6 System.out.println(b); // -14 int c = 5; int d = c<<=2; //c=c<<2; d = c System.out.println(c); // 20 System.out.println(d); // 20 }}
二、Java关键字和保留字
序号 | 关键字 | 含义 |
1 | abstract | 修饰类、方法,成为抽象类、抽象方法 |
2 | assert | 用来查找内部程序错误 |
3 | boolean | 基本数据类型之一,布尔类型 |
4 | break | 跳出一个switch或结束一个循环 |
5 | byte | 基本数据类型之一,8位整型 |
6 | case | switch语句的一个分支 |
7 | catch | 捕获异常的try块子句 |
8 | char | 基本数据类型之一,字符型 |
9 | class | 定义一个类 |
10 | const | 未使用 |
11 | continue | 跳过continue语句后面的循环部分,进入下一次循环 |
12 | default | switch的缺省子句 |
13 | do | do/while循环最前面的语句 |
14 | double | 基本数据类型之一,双精度浮点数 |
15 | else | if语句的else子句 |
16 | enum | 枚举类型 |
17 | extends | 表明一个类型是另一个类型的子类型 |
18 | final | 一个常量,或不能覆盖的一个类或非法 |
19 | finally | try语句块中总会执行的部分 |
20 | float | 基本数据类型之一,单精度浮点数 |
21 | for | 一种循环类型 |
22 | goto | 未使用 |
23 | if | 一个条件语句 |
24 | implements | 定义一个类实现的接口 |
25 | import | 导入一个包 |
26 | instanceof | 判断一个对象是否为一个类的实例 |
27 | int | 基本数据类型之一,32位整型 |
28 | interface | 一种抽象类型,其中包含可以由类实现的方法 |
29 | long | 基本数据类型之一,64位长整型 |
30 | native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
31 | new | 用来创建新的实例对象 |
32 | null | 一个空引用 |
33 | package | 包含类的一个包 |
34 | private | 一种访问控制方式,私有模式,只能由该类的方法访问 |
35 | protected | 一种访问控制方式,保护模式,只能由该类、其子类和同包类的方法访问 |
36 | public | 一种访问控制方式,共有模式,所有类的方法都可以访问 |
37 | return | 从一个方法返回 |
38 | short | 基本数据类型之一,16位短整型 |
39 | static | 表明具有静态属性,属于类,不属于类的对象 |
40 | strictfp | 对浮点数计算使用严格的规则 |
41 | super | 超类对象或构造函数 |
42 | switch | 一个选择语句 |
43 | synchronized | 对线程而言是原子的方法或代码块 |
44 | this | 当前类的一个方法或构造函数的隐含参数 |
45 | throw | 抛出一个异常 |
46 | throws | 一个方法可能抛出的异常 |
47 | transient | 标志非永久的数据 |
48 | try | 捕获异常的代码块 |
49 | void | 修饰方法,表示无返回值 |
50 | volatile | 确保一个字段可以由多个线程访问 |
51 | while | 一种循环 |
|
|
|
52 | true | 不是关键字,是字面量,但是依旧不能当做变量名使用,属于保留字 |
53 | false |
文章首发于我的个人公众号:悦乐书。喜欢分享一路上听过的歌,看过的电影,读过的书,敲过的代码,深夜的沉思。期待你的关注!
公众号后台输入关键字“Java学习电子书”,即可获得12本Java学习相关的电子书资源,如果经济能力允许,还请支持图书作者的纸质正版书籍,创作不易。