03 Java 的运算符 及 表达式

Java语言主要由 5 类元素组成

  1. 标识符:
  • 就是变量、常量、方法、枚举、类、接口等由程序员指定的名字。
  • 数字、字母、美元符、下划线(注意不能数字开头)
  • 关键字不能作为标识符。

注意 Java 语言中字母采用的是双字节 Unicode 编码。Unicode 叫作统一编码制,它包含了亚洲文字编码,如中文、日文、韩文等字符。

  1. 关键字(keyword):
  • 被 Java 赋予特殊意义的单词, 所有关键字都是小写
  • Java语言中的保留字只有两个 goto 和 const, 既不能当作标识符使用,也不是关键字,也不能在程序中使用,这些字符序列称为保留字。
  • main 不是关键字,但是被虚拟机识别的一个名称
  1. 运算符
  • 注意运算符优先级(注意左结合和右结合)
  1. 分隔符: 有一些字符被用作分隔,称为分隔符。分隔符主要有分号;、左右大括号{}和空白。

  2. 注释:

  • 单行、多行、文本(共3种)
  • 注意写代码时必须添加必要的注释

关键字详解

常用关键字
Java 所有关键字

关键字: final 的用法

  1. final 作为类修饰符: 这种类成为最终类,特点是不允许继承.例如 API 中的Math,String, Integer 类都是 final 类.
  2. final修饰方法: 是功能和内部语句不能被更改的最终方法,在子类中不能再对父类的 final 方法重定义.所有 private 修饰的为私有方法和 final 类中的方法都默认为是 final。
  3. final定义常量:只能被赋值一次
    例如 final double PI=3.14159;
  4. 内部类只能访问被 final 修饰的局部变量。

关键字: 访问控制修饰符的说明

  1. 公共访问控制符public
  • 作为类的修饰符,将类声明为公共类, 表明它可以被所有的其它类所访问和引用
  • 作为类的成员的访问修饰符,表明在其他类中可以无限制地访问该成员。
  1. 默认访问控制符(默认)
    没有给出访问控制符情形,该类只能被同一个包中的类访问和引用,不能被其他包中的类使用.

  2. 保护访问控制符protected

  3. 私有访问控制符private
    用来声明类的私有成员,它提供了最高级的保护。用 private 修饰的域和方法只能被该类自身访问和修改,不能被任何其他类(包括该类的子类)来获取和引用.
    通常,出于系统设计的安全考虑,将类的成员属性定义为 private 保护起来,而类的成员方法 public 对外公开, 这是类封装特性的一个体现.

运算符详解

Java语言中的运算符(也称操作符)在风格和功能上都与 C 和 C++ 极为相似。

  • 按操作数分为一元,二元和三元
  • 按照功能: 包含算术,关系,逻辑,位,赋值组合等几种运算符.
运算符优先级从高到低

总结 运算符优先级大体顺序,从高到低是:算术运算符→位运算符→关系运算符→逻辑运算符→赋值运算符。

  • ++, --运算, 建议单独成行, 提高阅读性.
  • == 和 != 可以应用于基本数据类型和引用数据类型。当用于引用数据类型比较时,比较的是两个引用是否指向同一个对象,但在当时实际开发过程中多数情况下,只是比较对象的内容是否相当,不需要比较是否为同一个对象。
  • 提示 短路与(&&)和短路或(||)能够采用最优化的计算方式,从而提高效率。在实际编程时,应该优先考虑使用短路运算符
  • 有符号右移n位,相当于操作数除以 2 的 n 次方。另外,左位移 n 位,相当于操作数乘以2的n次方。
  • 比较运算符得到的结果是 true or false, 为布尔常量
  • 位运算符注意 异或 ^是不同为真,相同为假。10为1 11为0; 若一个数异或2次或2次的倍数有还原的效果
  • 三元运算符格式: (条件表达式) ? 表达式1 : 表达式2;, 他的结合性是从右至左. 不建议嵌套使用三元运算符, 这样可读性极差.
int i = 0;
int a = true ? false ? i+=3 : ++i : ++i;  //相当于 int a = (true ? (false ? i+=3 : ++i) : ++i);
System.out.println(a); // 结果为 1

int i = 0;
a = true ? false ? i+=3 : i++ : i++;  // a = true ? (false ? i+=3 : i++) : i++;  
System.out.println(a); // 结果为 0
位运算符

其他运算符

  • 除了前面介绍的主要运算符,Java还有一些其他运算符。
    三元运算符(? :)。例如x ? y : z;,其中x、y和z都为表达式。
  • 小括号。起到改变表达式运算顺序的作用,它的优先级最高。
    中括号。数组下标。
  • 引用号(.)。对象调用实例变量或实例方法的操作符,也是类调用静态变量或静态方法的操作符。
  • 赋值号(=)。赋值是用等号运算符(=)进行的。
  • instanceof。判断某个对象是否为属于该类型。
  • new。对象内存分配运算符。
  • 箭头(->)。Java 8新增加的,用来声明Lambda表达式。
  • 双冒号(::)。Java 8新增加的,用于Lambda表达式中方法的引用。

重点说说位运算

位与运算符&: 参与运算的两个位都为1,则结果为1,否则为0


位或运算符|: 参与运算的两个位只要有一位为1,则结果为1,否则为0

异或运算符^:参与运算的两个位不同(0和1,或1和0)的则结果为1,相同位为0.

异或不好记, 我是根据" 11 -> 0 我报警了" 才记住的


运算符的优先级不需要特别地去记忆它,比较复杂的表达式一般使用圆括号 () 分开,提高可读性。

注释详解

三种基本注释 和 地标注释
Java中注释的语法有三种:单行注释(//)、多行注释(/.../)和文档注释(/*.../)。

Eclipse 等 IDE 工具都为 Java 源代码提供了一些特殊的注释,就是在代码中加一些标识,便于IDE工具快速定位代码,称为“地标注释”。这种注释虽然不是 Java 官方所提供的,但是主流语言和主流的IDE工具也都支持“地标注释”。

Eclipse 支持如下三种地标注释:

  • TODO:说明此处有待处理的任务,或代码没有编写完成。
  • FIXME:说明此处代码是错误的,需要修正。
  • XXX:说明此处代码虽然实现了功能,但是实现的方法有待商榷,希望将来能改进。

IDEA 目前只支持 TODO 和 FIXME, 不支持 XXX.

一些补充的知识点

Java的一些数值运算
取整(int)num
四舍五入Math.floor(num)

关于instance of关键字的说明

  • (Integer)null编译和运行完美通过, 结果为null
  • null instanceof 任意类 都为false

一些考题

考题1: "6+6"+6+6 的输出结果
A: 是 6+666, 这是"+"字符连接符导致.

考题2: -2%5
A: 为-2(算术运算符中除法符号看左边就行。)

考题3: 假设有如下程序:

int num = 50 ; 
num = num ++ * 2 ; 
System.out.println(num) ; 

A: 最终的执行结果是什么?
注意这里为数值++, 所以++后做. 结果为100

小知识 异或运算实现两个数的交换

采用下面的方法,对于给定两个整数a,b,下面的异或运算可以实现a,b的交换,而无需借助第3个临时变量:

a = a ^ b;
b = a ^ b;
a = a ^ b;

这个交换两个变量而无需借助第3个临时变量过程,其实现主要是基于异或运算的如下性质:

1.任意一个变量X与其自身进行异或运算,结果为0,即X^X=0
2.任意一个变量X与0进行异或运算,结果不变,即X^0=X
3.异或运算具有可结合性,即abc=(ab)c=a(bc)
4.异或运算具有可交换性,即ab=ba

分析:
第一步: a = a ^ b;
完成后 a变量的结果为a ^ b

第二步: b = a ^ b;
得到 b = (原a ^ 原b)^ 原b = 原a ^ (原b ^ 原b) = 原a ^0= 原a,

即经过第二步运算后 b 中的值为 a,即 b=原a,将a换到了b里

第二步: a = a ^ b
得到a = (原a ^ 原b)^ b = (原a ^ 原b)^ 原a = 原a ^ 原a ^ 原b = 0 ^ 原b= 原b. 即a=原b.

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容