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 ...
随机推荐
- css 选择器基础
有时在看别人代码时,看到一长串的选择器经常有点懵,今天来夯实一下基础 选择器有: 1.标签选择器 :就是HTML 中的标签 如<p> <h1> <body>等 2. ...
- django中出现 错误 Errno 10053
django中出现 错误 Errno 10053 pycharm里出现下面错误File "C:\Python27\lib\socket.py", line 307, in flus ...
- JS-JSON知识点总结
一.JSON的2个重要方法:JSON.stringify(),JSON.parse() //json转字符串:JSON.stringify() let myJson = { name: 'lizhao ...
- NodePort,LoadBalancer还是Ingress?我该如何选择 - kubernetes
原文:http://mp.weixin.qq.com/s/dHaiX3H421jBhnzgCCsktg 当我们使用k8s集群部署好应用的Service时,默认的Service类型是ClusterIP, ...
- 微信小程序中转义字符的处理
在微信小程序开发过程中,有时候会用到常用的一些特殊字符如:‘<’.‘>’.‘&’.‘空格’等,微信小程序同样支持对转义字符的处理,下面提供两种方法用来处理微信小程序中转义字符的处理 ...
- 服务端渲染和nuxt简单介绍
概述 最近研究了一下服务端渲染,有一些心得,记录下来供以后开发时参考,相信对其他人也有用. 参考资料: Vue SSR指南 nuxt.js官网 服务端渲染介绍 服务端渲染简单来说,就是分别对项目用we ...
- 我们为什么要搞长沙.NET技术社区(4)
我们为什么要搞长沙.NET技术社区(4) 邹溪源,2019年3月7日 Ps:文中的.NET 包括且不限定于传统.NET Framework技术和.NET Core技术. 1. 楔子 昨天(201 ...
- Nginx安装与代理
1.第一步 - 添加Nginx存储库 要添加CentOS 7 EPEL存储库,请打开终端并使用以下命令: sudo yum install epel-release 2.第二步 - 安装Nginx 现 ...
- 解读 kubernetes client-go 官方 examples - Part Ⅰ
目录 1. 介绍 2. 运行测试 2.1 测试环境 2.2 运行结果 3. 原理解析 3.1 获取 kubeconfig 信息,并构造 rest#Config 实例 3.1.1 tools/clien ...
- Centos7+LVS-DR+keepalived实验(包含sorry-server、日志、及HTTP-GET的健康检测)
目录检索 一.简介 1.lvs-dr原理请参考原理篇 2.keepalived原理请参考原理篇 3.基于lvs-dr+keepalived故障切换架构图如下: 二.部署 1.环境 2.准备RS的web ...