Java基础系列--02_运算符和程序的语句
运算符:
(1)算术运算符:
+,-,*,/,%,++,--(加、减、乘、除、取余、自增,自减)
++和--的注意事项:
a:他们的作用是自增或者自减
b:使用
1.单独使用
放在操作数据的前面和后面效果一样。
a++或者++a效果一样。
2.参与操作使用
放在操作数的前面:先自增或者自减,再参与操作
放在操作数的后面:先参与操作,再自增或者自减
int a = 10;
int b = ++a; //b=11,a=11
int a = 10;
int b = a++; //b=10,a=11
(2)赋值运算符
A:=,+=,-=,*=,/=,%=(等于,加等于,减等于,乘等于,除等于,取摸等于)
B:=叫做赋值运算符,也是最基本的赋值运算符
举例:int x = 10; 把10赋值给int类型的变量x。
C:扩展的赋值运算符的特点
隐含了自动强制转换。
举例代码:
short s = 1;//声明变量s,并将常量1赋值给变量s
s = s + 1; //Type mismatch: cannot convert from int to short short ss = 1;
short ss += 1; //ss变量加上常量值1
/*s = s + 1; s转换为int型,在参与运算,得到的结果仍然是int型,
*而ss是short型无法将int转换为short,所以报错。
*/
(3)比较运算符
A:==,!=,>,>=,<,<=
B:无论运算符两端简单还是复杂最终结果是boolean类型。
C:千万不要把==写成了=(==表示比较,=是赋值)
(4)逻辑运算符
A:常用的:!,&&,|| 不常用:&,|,^,
B:逻辑运算符用于连接boolean类型的式子,得到的结果也是boolean类型
C:结论
!:非true则false,非false则true
&&:结果和&是一样的,都表示与运算,只不过有短路效果,即判断左边的表达式可以确定整个表达式的值,就不再运算其他部分表达式,而&要运算全部的表达式。
举例:(1 !=1 && a > b)左边是false,右边不执行。
||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。
&:有false则false
|:有true则true
^:相同则false,不同则true。(异或)
(5)位运算符
^的特殊用法
一个数据针对另一个数据位异或两次,该数不变
举例:
1.实现两个变量的交换:
A:采用第三方变量
B:用位异或运算符
1 /*实现两个变量的交换*/
2 //方式一:采用第三方变量
3 //方式二:巧用位异或运算符
4 int a=0; //
5 int b=10; //
6 //方式一:
7 int temp = 0;
8 temp = a;
9 a = b;
10 b = temp;
11 //方式二:
12 a = a^b; //a=1010->10 使用异或操作符不仅节省了代码量,还可以让程序更加快速,更加专业,因为异或的底层是二进制的运算
2.最有效率的方式计算出256乘以8和256除以16的结果
256<<3 = 2048(二进制码右移3位补0),256>>4 = 16(二进制码左移4位补0)
<<,>>是移位操作符,一个是右移,一个是左移。每向右移动一位都相当于是乘2,每向左移动一位都相当于是除2
(6)三元运算符
A:格式
比较表达式?表达式1:表达式2;
B:执行流程:
首先计算比较表达式的值,看是true还是false。
如果是true,表达式1就是结果。
如果是false,表达式2就是结果。
举例:c = a>b?a:b; //如果 a > b ,则 c = a;否则 c = b;
(7)运算符的优先级
优先级 描述 运算符
1 括号 ()、[]
2 正负号 +、-
3 自增自减,非 ++、--、!
4 乘,除,取余 *、/、%
5 加、减 +、-
6 移位运算 <<、>>
7 大小关系 >、>=、<、<=
8 相等关系 ==、!=
9 按位与 &
10 按位异或 ^
11 按位或 |
12 逻辑与 &&
13 逻辑或 ||
14 条件运算 ? :
15 赋值运算 =、+=、-=、*=、/=、%=
16 位赋值运算 &=、|=、<<=、>>=、>>>=
备注:如果在程序中,要改变运算顺序,可以使用()。在一些比较复杂的运算中,使用括号,能够提高程序的可读性。
2:键盘录入(后面再详细解释)
(1)目的从键盘上灵活的录入我们的数据。
使用步骤:A:导包
import java.util.Scanner;
位置:在默认包名的下方,class的上方
B:创建对象
Scanner sc = new Scanner(System.in);
C:获取数据
int x = sc.nextInt();
3:流程控制语句
(1)顺序结构 从上往下,依次执行
(2)选择结构 按照不同的选择,执行不同的代码
(3)循环结构 做一些重复的代码
4:if语句
(1)三种格式
A:格式1
if(比较表达式) {
语句体;
}
执行流程:
判断比较表达式的值,看是true还是false
如果是true,就执行语句体
如果是false,就不执行语句体
B:格式2
if(比较表达式) {
语句体1;
}else {
语句体2;
}
执行流程:
判断比较表达式的值,看是true还是false
如果是true,就执行语句体1
如果是false,就执行语句体2
C:格式3
if(比较表达式1) {
语句体1;
}else if(比较表达式2){
语句体2;
}
... //这里表示可以嵌套多个else if语句
else {
语句体n+1;
}
执行流程:
判断比较表达式1的值,看是true还是false
如果是true,就执行语句体1
如果是false,就继续判断比较表达式2的值,看是true还是false
如果是true,就执行语句体2
如果是false,就继续判断比较表达式3的值,看是true还是false
...
如果都不满足,就执行语句体n+1
(2)注意事项
A:比较表达式无论简单还是复杂,结果是boolean类型
B:if语句控制的语句体如果是一条语句,是可以省略大括号的;如果是多条,不能省略。
建议:一般不要省略。
C:一般来说,有左大括号,就没有分号,有分号,就没有左大括号(成对出现)。
D:else后面如果没有if,是不会出现比较表达式的。
E:三种if语句其实都是一个语句,只要有一个执行,其他的就不再执行。
(3)三元运算符和if语句第二种格式的关系
所有的三元运算符能够实现的,if语句的第二种格式都能实现。
if (a > b ){
c = a;
}else{
c = b;
}
//等价的三元表达式
c = a>b?a:b; //如果 a > b ,则 c = a;否则 c = b;
5.switch语句
(1)格式:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
格式解释说明:
switch:说明这是switch语句。
表达式:可以是byte,short,int,char(都可以强转为int)
JDK5以后可以是枚举
JDK7以后可以是字符串
case:后面的值就是要和表达式进行比较的值
break:表示程序到这里中断,跳出switch语句
default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else
(2)应注意的问题
switch语句的表达式可以是byte,不可以是long,JDK7之后可以是String。
(3)执行流程:
A:首先计算表达式的值
B:和每一个case进行匹配,如果有就执行对应的语句体,执行到break就结束。
C:如果没有匹配,就执行default的语句体n+1。
(4)注意事项:
A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
B:default可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
特殊情况:
执行到switch语句之前,case就可以把值确定。
C:break可以省略,但是如果break省略了,程序就不会跳出switch,会按照原来的顺序继续执行,直到跳出。这个现象叫做case穿透。
D:default的位置不一定要在最后,但是它一定是在最后执行。
E:switch语句的结束条件
a:遇到break就结束了
b:执行到末尾就结束了
(5)if语句和switch语句各自的场景
A:if
针对boolean类型的判断
针对一个范围的判断
针对几个常量的判断
B:switch
针对几个常量的判断
6.循环语句
(1)有三种:for,while,do...while,foreach(增强for)
(2)for循环语句
A:格式
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
A.执行流程:
a:执行初始化语句
b:执行判断条件语句
如果这里是true,就继续
如果这里是false,循环就结束
c:执行循环体语句
d:执行控制条件语句
e:回到b
B.注意事项
a:判断条件语句无论简单还是复杂,结果是boolean类型
b:循环体语句如果是一条,可以省略大括号,但是不建议
c:有分号就没有左大括号,有左大括号就没有分号
(3)while循环
A:基本格式
while(判断条件语句) {
循环体语句;
}
扩展格式:
初始化语句;
while(判断条件语句){
循环体语句;
控制条件语句;
}
通过查看这个格式,说明while循环可以和for循环等价转换。
B:for和while的区别
a:使用上的区别
for语句的控制条件变量,在循环结束后不能在使用(作用域)。
而while的可以继续使用。
b:理解上的区别
for适合于一个范围的判断
while适合次数不明确的
(4)do...while循环
A:基本格式
do {
循环体语句;
}while(判断条件语句);
扩展格式:
初始化语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
通过查看格式,说明三种循环的格式可以相互替换的。
B:三种循环的区别
a:do...while循环至少执行一次循环体
b:for和while必须先判断条件是否是true,然后后才能决定是否执行循环体
(5)foreach循环(其实叫做:增强for)
格式:for (int[] arr : array) {
//遍历数组
}
注意:Java中没有foreach循环,foreach循环其他的语言中的名称,但是Java中的增强for的本质是跟foreach循环一样的,这个循环一般是用来实现遍历操作。
(6)循环使用的注意事项(死循环)
A:一定要注意修改控制条件,否则容易出现死循环。
B:最简单的死循环格式
a:while( true ) { ... }
b:for( ; ; ) { ... }
7.控制跳转语句
(1)break:中断的意思
A:用在循环和switch语句中,离开此应用场景无意义。
B:作用
a:跳出单层循环
b:跳出多层循环,需要标签语句的配合
(2)continue:继续
A:用在循环中,离开此应用场景无意义。
B:作用
a:跳出单层循环的一次,可以继续下一次
//控制台输出7次:Hello Java
1 for(int x=1; x <= 10; x++) {
if(x%3 == 0) {
continue;
}
System.out.println("Hello Java");
}
(3)return:返回
A:用于结束方法的,并返回某个值。
B:一旦遇到return,程序就不会在继续往后执行。
Java基础系列--02_运算符和程序的语句的更多相关文章
- java基础59 JavaScript运算符与控制流程语句(网页知识)
1.JavaScript运算符 1.1.加减乘除法 加法:+(加法,连接符,正数) true是1,false是0 减法:- 乘法:* 除法:/ 1.2.比较运算符 ...
- 夯实Java基础系列1:Java面向对象三大特性(基础篇)
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 [https://github.com/h2pl/Java-Tutorial](https: ...
- 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!
目录 目录 string基础 Java String 类 创建字符串 StringDemo.java 文件代码: String基本用法 创建String对象的常用方法 String中常用的方法,用法如 ...
- Java基础系列-二进制操作
原创文章,转载请标注出处:<Java基础系列-二进制操作> 概述 Java源码中涉及到大量的二进制操作,非常的复杂,但非常的快速. Java二进制表示法 首先了解下二进制,二进制是相对十进 ...
- 夯实Java基础系列4:一文了解final关键字的特性、使用方法,以及实现原理
目录 final使用 final变量 final修饰基本数据类型变量和引用 final类 final关键字的知识点 final关键字的最佳实践 final的用法 关于空白final final内存分配 ...
- 夯实Java基础系列5:Java文件和Java包结构
目录 Java中的包概念 包的作用 package 的目录结构 设置 CLASSPATH 系统变量 常用jar包 java软件包的类型 dt.jar rt.jar *.java文件的奥秘 *.Java ...
- 夯实Java基础系列6:一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别!
目录 抽象类介绍 为什么要用抽象类 一个抽象类小故事 一个抽象类小游戏 接口介绍 接口与类相似点: 接口与类的区别: 接口特性 抽象类和接口的区别 接口的使用: 接口最佳实践:设计模式中的工厂模式 接 ...
- 夯实Java基础系列7:一文读懂Java 代码块和执行顺序
目录 Java中的构造方法 构造方法简介 构造方法实例 例 1 例 2 Java中的几种构造方法详解 普通构造方法 默认构造方法 重载构造方法 java子类构造方法调用父类构造方法 Java中的代码块 ...
- 夯实Java基础系列9:深入理解Class类和Object类
目录 Java中Class类及用法 Class类原理 如何获得一个Class类对象 使用Class类的对象来生成目标类的实例 Object类 类构造器public Object(); register ...
随机推荐
- Git 学习总结
概况 CVS 及 SVN 都是集中式的版本控制系统,而 Git 是分布式版本控制系统. 集中式版本控制系统最大的毛病就是必须联网才能工作: 分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是 ...
- apache kafka & CDH kafka源码编译
Apache kafka编译 前言 github网站kafka项目的README.md有关于kafka源码编译的说明 github地址:https://github.com/apache/kafka ...
- Ambari安装及自定义service初步实现
Ambari安装 1 Ambari简介 Apache Ambari项目的目的是通过开发软件来配置.监控和管理hadoop集群,以使hadoop的管理更加简单.同时,ambari也提供了一个基于它自身R ...
- C#常见金额优选类型及其三种常用的取整方式
这两天一直在做一个商城后台的对账方面的工作,忽然发现C#真的有很多值的学习的东西: 一.C#常用的三种取整方式(主要适用于double.decimal.float这一类型的数据): Math.Roun ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十三║Vue实战:Vuex 其实很简单
前言 哈喽大家周五好,马上又是一个周末了,下周就是中秋了,下下周就是国庆啦,这里先祝福大家一个比一个假日嗨皮啦~~转眼我们的专题已经写了第 23 篇了,好几次都坚持不下去想要中断,不过每当看到群里的交 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十四║ Vuex + JWT 实现授权验证登录
壹周回顾 哈喽,又是元气满满的一个周一,又与大家见面了,周末就是团圆节了,正好咱们的前后端也要团圆了,为什么这么说呢,因为以后的开发可能就需要前后端一起了,两边也终于会师了,还有几天Vue系列就基本告 ...
- jdk切换小工具
今天无意之中看到一个小工具,就是可以自由切换jdk版本!以前每次切换jdk还要去找环境变量找半天,emmm.... 现在我们只需要双击一个xxx.bat的一个批处理文件,就可以自由切换jdk版本,很方 ...
- 使用 ASP.NET Core MVC 创建 Web API(三)
使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) 十 ...
- word中如何只修改英文的颜色
替换->更多->使用通配符,查找[a-zA-Z],替换为^&,字体选红色
- java并发多线程显式锁Condition条件简介分析与监视器 多线程下篇(四)
Lock接口提供了方法Condition newCondition();用于获取对应锁的条件,可以在这个条件对象上调用监视器方法 可以理解为,原本借助于synchronized关键字以及锁对象,配备了 ...