03 Java的运算符 及 表达式

本文涉及的产品
访问控制,不限时长
简介: Java语言主要由 5 类元素组成标识符:就是变量、常量、方法、枚举、类、接口等由程序员指定的名字。数字、字母、美元符、下划线(注意不能数字开头)关键字不能作为标识符。注意 Java 语言中字母采用的是双字节 Unicode 编码。Unicode 叫作统一编码制,它包含了亚洲文字编码,如中文、日文、韩文等字符。关键字(keyword):被 Java 赋予特殊意义的单词, 所有关键字都是小写Java语言中的保留字只有两个 goto 和 const, 既不能当作标识符使用,也不是关键字,也不能在程序中使用,这些字符序列称为保留字。main 不是关键字,但是被虚拟机识别的一个名称

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



  1. 标识符:


  • 就是变量、常量、方法、枚举、类、接口等由程序员指定的名字。


  • 数字、字母、美元符、下划线(注意不能数字开头)


  • 关键字不能作为标识符。


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


  1. 关键字(keyword):


  • 被 Java 赋予特殊意义的单词, 所有关键字都是小写


  • Java语言中的保留字只有两个 goto 和 const, 既不能当作标识符使用,也不是关键字,也不能在程序中使用,这些字符序列称为保留字。


  • main 不是关键字,但是被虚拟机识别的一个名称


  1. 运算符


  • 注意运算符优先级(注意左结合和右结合)


  1. 分隔符: 有一些字符被用作分隔,称为分隔符。分隔符主要有分号;、左右大括号{}和空白。


  1. 注释:


  • 单行、多行、文本(共3种)


  • 注意写代码时必须添加必要的注释


关键字详解



image.png


常用关键字


image.png


Java 所有关键字


关键字: final 的用法


  1. final 作为类修饰符: 这种类成为最终类,特点是不允许继承.例如 API 中的Math,String, Integer 类都是 final 类.


  1. final修饰方法: 是功能和内部语句不能被更改的最终方法,在子类中不能再对父类的 final 方法重定义.所有 private 修饰的为私有方法和 final 类中的方法都默认为是 final。


  1. final定义常量:只能被赋值一次
    例如 final double PI=3.14159;


  1. 内部类只能访问被 final 修饰的局部变量。


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


  1. 公共访问控制符public


  • 作为类的修饰符,将类声明为公共类, 表明它可以被所有的其它类所访问和引用


  • 作为类的成员的访问修饰符,表明在其他类中可以无限制地访问该成员。


  1. 默认访问控制符(默认)
    没有给出访问控制符情形,该类只能被同一个包中的类访问和引用,不能被其他包中的类使用.


  1. 保护访问控制符protected


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


image.png


运算符详解


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


  • 按操作数分为一元,二元和三元


  • 按照功能: 包含算术,关系,逻辑,位,赋值组合等几种运算符.


image.png

image.png


运算符优先级从高到低


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


  • ++, --运算, 建议单独成行, 提高阅读性.


  • == 和 != 可以应用于基本数据类型和引用数据类型。当用于引用数据类型比较时,比较的是两个引用是否指向同一个对象,但在当时实际开发过程中多数情况下,只是比较对象的内容是否相当,不需要比较是否为同一个对象。


  • 提示 短路与(&&)和短路或(||)能够采用最优化的计算方式,从而提高效率。在实际编程时,应该优先考虑使用短路运算符


  • 有符号右移n位,相当于操作数除以 2 的 n 次方。另外,左位移 n 位,相当于操作数乘以2的n次方。


  • 比较运算符得到的结果是 true or false, 为布尔常量


  • 位运算符注意 异或^是不同为真,相同为假。10为111为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


image.png


位运算符


其他运算符


  • 除了前面介绍的主要运算符,Java还有一些其他运算符。
    三元运算符(? :)。例如x ? y : z;,其中x、y和z都为表达式。


  • 小括号。起到改变表达式运算顺序的作用,它的优先级最高。
    中括号。数组下标。


  • 引用号(.)。对象调用实例变量或实例方法的操作符,也是类调用静态变量或静态方法的操作符。


  • 赋值号(=)。赋值是用等号运算符(=)进行的。


  • instanceof。判断某个对象是否为属于该类型。


  • new。对象内存分配运算符。


  • 箭头(->)。Java 8新增加的,用来声明Lambda表达式。


  • 双冒号(::)。Java 8新增加的,用于Lambda表达式中方法的引用。


重点说说位运算


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


image.png


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


image.png


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


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


image.png

image.png


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


注释详解


三种基本注释 和 地标注释


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.


参考


  • 丁振凡编著,《Java语言程序设计(第2版)》华东交大版,2014.9





相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
目录
相关文章
|
19天前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
21天前
|
Java API 开发者
Java中的Lambda表达式:简洁代码的利器####
本文探讨了Java中Lambda表达式的概念、用途及其在简化代码和提高开发效率方面的显著作用。通过具体实例,展示了Lambda表达式如何在Java 8及更高版本中替代传统的匿名内部类,使代码更加简洁易读。文章还简要介绍了Lambda表达式的语法和常见用法,帮助开发者更好地理解和应用这一强大的工具。 ####
|
23天前
|
并行计算 Java 编译器
深入理解Java中的Lambda表达式
在Java 8中引入的Lambda表达式,不仅简化了代码编写,还提升了代码可读性。本文将带你探索Lambda表达式背后的逻辑与原理,通过实例展示如何高效利用这一特性优化你的程序。
|
28天前
|
搜索推荐 Java API
探索Java中的Lambda表达式
本文将深入探讨Java 8引入的Lambda表达式,这一特性极大地简化了代码编写,提高了程序的可读性。通过实例分析,我们将了解Lambda表达式的基本概念、使用场景以及如何优雅地重构传统代码。文章不仅适合初学者,也能帮助有经验的开发者加深对Lambda表达式的理解。
|
1月前
|
Java
探索Java中的Lambda表达式
【10月更文挑战第37天】本文将带你深入理解Java的Lambda表达式,从基础语法到高级特性,通过实例讲解其在函数式编程中的应用。我们还将探讨Lambda表达式如何简化代码、提高开发效率,并讨论其在实际项目中的应用。
|
1月前
|
Java API
Java中的Lambda表达式与函数式编程####
【10月更文挑战第29天】 本文将深入探讨Java中Lambda表达式的实现及其在函数式编程中的应用。通过对比传统方法,我们将揭示Lambda如何简化代码、提高可读性和维护性。文章还将展示一些实际案例,帮助读者更好地理解和应用Lambda表达式。 ####
|
1月前
|
JSON 自然语言处理 Java
这款轻量级 Java 表达式引擎,真不错!
AviatorScript 是一个高性能、轻量级的脚本语言,基于 JVM(包括 Android 平台)。它支持数字、字符串、正则表达式、布尔值等基本类型,以及所有 Java 运算符。主要特性包括函数式编程、大整数和高精度运算、完整的脚本语法、丰富的内置函数和自定义函数支持。适用于规则判断、公式计算、动态脚本控制等场景。
|
18天前
|
安全 Java API
Java中的Lambda表达式:简化代码的现代魔法
在Java 8的发布中,Lambda表达式的引入无疑是一场编程范式的革命。它不仅让代码变得更加简洁,还使得函数式编程在Java中成为可能。本文将深入探讨Lambda表达式如何改变我们编写和维护Java代码的方式,以及它是如何提升我们编码效率的。
|
21天前
|
安全 Java API
Java中的Lambda表达式与Stream API的高效结合####
探索Java编程中Lambda表达式与Stream API如何携手并进,提升数据处理效率,实现代码简洁性与功能性的双重飞跃。 ####
24 0
|
28天前
|
Java 开发者
探索Java中的Lambda表达式
【10月更文挑战第43天】本文将深入浅出地介绍Java中的Lambda表达式,通过实际代码示例,带领读者理解其背后的原理及应用场景。Lambda表达式不仅简化了代码,还提高了开发效率,是Java开发者必备的技能之一。