Java复习笔记-03
运算符&流程控制语句
变量案例补充
// 编译这一行时,由于'b'没有超出c的范围,所以编译成功char c = 'b';// 编译这一行时,系统只知道c是char类型,而不知道c具体的值。// c是char类型,范围是0-65535// s是short类型,范围是-32768 - 32767// 由于c的正整数范围比s的正整数范围大,所以系统认为有可能放不下,报错。short s = (short) c;System.out.println(c);System.out.println(s);
1 运算符
1.1 运算符介绍
运算符概述
- 对常量或者变量进行操作的符号称之为运算符 +
表达式概述
- 用运算符把常量或者变量连接起来,符合java语法的式子叫做表达式。
- a + b
运算符分类
- 算术运算符
- 赋值运算符
- 关系运算符
- 逻辑运算符
- 三元运算符
- 位运算
1.2 算术运算符
1.2.1 常规算术
+ - * / %
public static void main(String[] args) {// 重命名 shift + f6// 加 +// 减 -// 乘 *// 除 /// 取余 % 不看商,只看余数int a = 10;int b = 20;System.out.println(a + b);// 30System.out.println(a - b);// -10System.out.println(a * b);// 200// 在java中,对于整数来说,除法用的是小学一年级的算法// / 只看商,舍弃余数System.out.println(a / b);// 0// 只要算数运算中出现了小数,那么结果肯定是小数System.out.println(1 / 2.0);int i = (int) (4350.0 / 1000 * 1000);System.out.println(i);System.out.println(1 % 2);int num = 34324334;System.out.println(num % 2);}
1.2.2 扩展
// 负数取余 就是看表达式左边值的符号 如果左边是正数,那么结果就是正数。如果左边是负数,结果就是负数System.out.println(-5 % 3);// 小数取余System.out.println(3.6 % 2);//1.6System.out.println(3 % 1.4);//0.2System.out.println(3 - 2.09);// ArithmeticException:数学异常
// System.out.println(1 / 0);// NaN not a number 不是一个数字System.out.println(0.0 / 0);// +可以用于字符相加char zifu1 = '我';System.out.println(zifu1 + 1);// + 可以用于字符串连接 任何数据类型和字符串进行相加,结果肯定是一个字符串System.out.println("Hello" + 1);// "Hello" + 3System.out.println("Hello" + (1 + 2));System.out.println("最大值是" + a);
1.2.3 自增自减运算符
自增运算符 ++
自减运算符 - -
格式:可以放在变量前面,也可以放在变量后面
区别:
- 对于单独使用,自增自减运算符放在变量前面和后面没有任何区别。
- 对于混合使用
- 如果++(–)符号在变量前面,那么会先将变量自身立刻加1(减1),然后根据加1(减1)之后的结果进行其他操作
- 如果++(–)符号在变量后面,那么会先进行其他操作,然后在进行加1(减1)
int a = 10;a++;System.out.println(a);int b = 10;++b;System.out.println(b);int num1 = 10;// 以下代码干了2件事// 1.输出变量结果// 2.给num1加1
// 1. 如果++(--)符号在变量前面,那么会先将变量自身立刻加1(减1),然后根据加1(减1)之后的结果进行其他操作
// 2. 如果++(--)符号在变量后面,那么会先进行其他操作,然后在进行加1(减1)System.out.println(num1++);// 10System.out.println(num1);// 11int num2 = 10;System.out.println(++num2);//11System.out.println(num2);//11int num3 = 10;int result = num3++ + 1;System.out.println(result);// 11System.out.println(num3);// 11int x = 30;int y = 40;// 30 + 39int z = x++ + --y;System.out.println(x);// 31System.out.println(y);// 39System.out.println(z);// 69// 以下代码在运算完成之后,Java在底层会对结果做一个强制类型转换byte b1 = 3;b1++;System.out.println(b1);
拓展:
public static void main(String[] args) {int a = 10;int b;//理解为 a 被赋值时开辟了新的内存,之后老的 a 再自加 1 但与新的 a 已经无关a = a++;System.out.println(a);// 10b = a++;System.out.println(a);// 11}
1.3 赋值运算符
1.3 赋值运算符
赋值运算符代表一个动作,将右边的值交给符号左边的内容
分类:
- =
- +=
- -=
- *=
- /=
- %=
// = 赋值运算符int num1 = 10;int num2 = num1;System.out.println(num1);System.out.println(num2);// 复合运算符// +=int a = 10;a += 20; // 相当于 a = a + 20;System.out.println("a的值是" +a);// -=a -= 5;// 相当于 a = a - 5;System.out.println("a的值是" + a);// *=a *= 10;// 相当于 a = a * 10;System.out.println("a的值是" + a);// /=a /= 5;// 相当于 a = a / 5;System.out.println("a的值是" + a);int b = 4;// d = 4 += 4 -= 4 *= 4;// d = 4 += 4 -= 16;// d = 8 -= 16// d = -8int d = b += b -= b *= b;System.out.println(d);// -8// 复合运算符默认底层有一个强制类型转换byte b1 = 10;
// b1 = (byte) (b1 + 10);b1 += 10;// b1 = b1 + 10;
1.4 关系(比较)运算符
- ==(相等) !=(不相等) > (大于) < (小于) >= (大于等于) <= (小于等于)
- 关系运算符的结果都是boolean类型,要么是true,要么是false
public static void main(String[] args) {int a = 10;int b = 20;// 等于System.out.println(a == b);// 不等于System.out.println(a != b);// 大于System.out.println(a > b);// 小于System.out.println(a < b);// 大于等于System.out.println(a >= b);// 小于等于System.out.println(a <= b);}
- 注意:关系运算符中的 == 不要误写成 =
1.5 逻辑运算符
- 作用:逻辑运算符用于连接布尔类型的表达式。
- 在java中不能写 3 < x < 6
- 分类
- 与: & 有false则false
- 或: | 有true则true
- 异或: ^ 相同则false,不同则true
- 非: ! 取反 true则false,false则true
public static void main(String[] args) {int a = 10;int b = 20;int c = 30;// 与 & 有false则false 并且// true & trueSystem.out.println(a < b & a < c & b > c);// 或 | 有true则true 或者// true | falseSystem.out.println(a < c | a > b | a > c);// 异或 ^ 相同就是false,不同就是true// false ^ trueSystem.out.println(a > b ^ a > c ^ b > c);// 非 ! 取反 true则false,false则trueSystem.out.println(!(a > b));}
- & | ^ 可以连接多个表达式 !只能连接一个表达式
补充:
1. & 和| 哪个优先级更高?
&的优先级高于 |
// & 比 | 优先级高// trueSystem.out.println(false & true | true);// trueSystem.out.println(true | true & false);
2. && 和 &的区别(面试题)?
&&和&在结果上是完全一样的。只是&&的效率更高.
&&有短路效果:如果左边的表达式已经可以判断出最终的结果,那么右边的代码就不会执行.
// 如果左边的表达式已经可以判断出最终的结果,那么右边的代码就不会执行.// false & trueSystem.out.println(a > b && a < c);int num = 100;System.out.println(3 > 4 && ++num < 1000);System.out.println(num); // 100 因为 && 左边的结果是false,右边的代码就不需要执行了 ++num根本没有执行
注意: || 和| 也是一样的效果,||也有短路效果
1.6 三元(三目)运算符
三元运算就是有三个元素参与的运算。
格式: 数据类型 变量名 = 判断条件 ? 表达式A : 表达式B;
判断条件必须是一个布尔值
如果条件结果是true,那么将表达式A赋值给变量。
如果条件结果是false,那么将表达式B赋值给变量。
// 获取两个变量的最大值int a = 30;int b = 20;int max = a > b ? a : b;System.out.println("最大值是" + max);
1.7 练习
输入3个整数,获取这3个整数的最大值.
public static void main(String[] args) {// 练习:在控制台输入3个整数,获取3个整数的最大值Scanner scanner = new Scanner(System.in);System.out.println("请您输入三个整数:");int a = scanner.nextInt();int b = scanner.nextInt();int c = scanner.nextInt();// 先获取 a b 的最大值int max1 = a > b ? a : b;// 用c和ab的最大值进行比较int max = max1 > c ? max1 : c;System.out.println("最大值是" + max);}
2 键盘录入
获取用户通过键盘输入的整数。
格式
Scanner 变量名 = new Scanner(System.in);
int a = 变量名.nextInt();
3 package
package是java语言中的包机制,包本质上就是一个文件夹。package用来声明当前文件所在的包。
目的是为了方便程序的管理。
包名全部使用小写,中间用.隔开。一般包名都是公司域名的反写。
package声明包的代码必须在java文件的有效代码的第一行。
import是java中的关键字,用来导入其他地方的包的文件。
4 流程控制语句
4.1 概述
在一个程序执行的过程中,各条语句的执行顺序对于程序的结果是有直接影响的。也就是说程序执行的流程对于结果有影响。
所以我们必须清楚每条语句的执行流程,而且我们可以通过流程控制语句来控制程序的执行顺序。
- 分类
- 顺序结构
- 选择结构
- 循环结构
4.2 顺序结构
是程序中最基本最简单的流程控制,没有特点的语法结构,按照代码编写的先后顺序,依次执行。程序中大部分代码都是这样执行的。
public static void main(String[] args) {System.out.println("一天晚上");System.out.println("两个和尚");System.out.println("三更半夜");System.out.println("四处流浪");System.out.println("误入洞房");}
4.3 选择结构
4.3.1 概述
选择结构也称之为分支结构。
选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,可以根据结果执行不同的代码。
Java语言中提供了两种选择结构的语句
- if语句
- switch语句
4.3.2 if语句
if语句分为三种格式
- 格式一
if (关系表达式){语句体;
}
执行流程:
首先判断关系表达式的结果是true还是false
如果是true就执行语句体中的代码
如果是false就不执行语句体中的代码
注意点:如果{}中只有一条代码,{}可以省略
public static void main(String[] args) {// 格式一System.out.println("晚上闲的没事在大街游荡");System.out.println("发现一个成人娱乐场所");int age = 19;if (age >= 18) //判断是否成年System.out.println("刷身份证");System.out.println("回家睡觉...");}
- 格式二
if (关系表达式){语句体1;
}else{语句体2;
}
执行流程:
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体1
如果是false就执行语句体2
public static void main(String[] args) {// true:男 false:女boolean sex = false;if (sex){System.out.println("去男老八快乐屋");}else {System.out.println("去女老八快乐屋");}}
- 格式三
if (关系表达式1){执行语句1;
}else if (关系表达式2){执行语句2;
}else if (关系表达式3){执行语句3;
}
...
else{执行语句n;
}
执行流程:
首先判断关系表达式1,看其结果是true还是false。
如果是true,就执行语句1;然后if语句结束
如果是false,继续判断关系表达式2是true还是false。
如果是true,就执行语句2;然后if语句结束
如果是false,就继续判断关系表达式3是true还是false。
如果是true,就执行语句3;然后if语句结束
如果是false,继续判断
…
如果没有任何关系表达式为true,就执行else中的语句n
public static void main(String[] args) {// 结构三Scanner scanner = new Scanner(System.in);System.out.println("请输入您的年龄:");int age = scanner.nextInt();if (age >= 3 && age <= 7){System.out.println("爸爸妈妈去上班,我去幼儿园");}else if (age > 7 && age < 13){System.out.println("上小学,带红领巾");}else if (age >= 13 && age < 16){System.out.println("上初中,开始早恋");}else if (age >= 16 && age < 19){System.out.println("上高中,开始苦读");}else if (age >= 19 && age < 25){System.out.println("上大学,公开谈恋爱");}else {System.out.println("开始挣钱...");}}
4.4 练习
- 用户输入一个整数,判断是奇数还是偶数
public static void main(String[] args) {// 用户输入一个整数,判断是奇数还是偶数/*** 获取用户输入的整数 Scanner* 偶数:如果对2取余,结果是0,就是偶数,否则就是奇数*/Scanner scanner = new Scanner(System.in);int i = scanner.nextInt();if (i % 2 == 0){System.out.println("您输入的是一个偶数");}else {System.out.println("您输入的是一个奇数");}}
- x和y的关系满足如下:
x >= 3 y= 2x +1
-1<x<3 y=2x;
x<=-1 y=2x - 1;
根据给定的x的值,计算出y的值并输出到控制台。
public static void main(String[] args) {// x >= 3 y= 2x +1// -1<x<3 y=2x;// x<=-1 y=2x - 1;// 创建ScannerScanner scanner = new Scanner(System.in);System.out.println("请输入x的值");int x = scanner.nextInt();int y;if (x >= 3){y = 2 * x + 1;}else if(x > -1 && x < 3){y = 2 * x;}else{y = 2 * x - 1;}System.out.println("y = " + y);}
Java复习笔记-03相关推荐
- Java复习笔记(8)——网络
一:网络的结构 物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由 1.0 转化为电流强弱来进行传输,到达目的地后转化为1.0, ...
- 大四Java复习笔记之Java基础
2019独角兽企业重金招聘Python工程师标准>>> 一.static和final 学习Java那么久,好像自己就没有怎么用过final,所以对fianl的理解不够.final不但 ...
- 【Java】Java复习笔记-第三部分
修饰符abstract 抽象的,定义框架不去实现,可以修饰类和方法 abstract修饰类: 会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型 抽象类 ...
- Java 复习笔记 线程Thread
1概念: 进程:运行中的应用程序 线程:进程中的一个执行流程 2区别 进程有独立的进程空间,进程中的数据存放空间(堆空间和栈空间)是独立的. 线程的堆空间是共享的,栈空间是独立的,线程消耗的资源也比 ...
- Java 复习笔记 异常Exception
1定义 程序在运行过程中发生由于硬件设备问题.软件设计错误等导致的程序异常事件.异常本身是一个对象,产生异常就是产生了一个异常对象.如果不捕获异常,程序将在发生异常代码的地方中断,导致应用退出,而捕获 ...
- mybatis 复习笔记03
参考:http://www.mybatis.org/mybatis-3/zh/configuration.html 入门 1. 从 XML 中构建 SqlSessionFactory 每个基于 MyB ...
- 校招刷题---java选择题笔记03
1 数据项 1双字=2字=4字节=32位 2 抽象类与最终类 1)抽象类(被abstract修饰的类):可以没有抽象方法 最终类(被final修饰的类):可以没有最终方法(被final修饰的方法 ...
- JAVA学习笔记 03 - JAVA语言程序结构
本文是Java基础课程的第三课.计算机语言的程序结构无外乎顺序结构.分支结构.循环结构,本文主要介绍Java语言中这些程序结构是如何实现的 文章目录 一.程序结构 二.分支结构 1.单分支if语句 2 ...
- Java复习笔记入门阶段06:方法
目录 1.方法概述 2.方法定义格式 2.1 方法常见问题 2.2 求和 2.3 判断奇数偶数 2.4 求最值 3.方法的内存原理 3.1 方法的调用流程,内存图解 4.方法的参数传递机制 4.1基本 ...
- java复习笔记4--SpringCloud系列二:五大神兽之Eureka
前面两天介绍了SpringCloud的基础知识,以及窥探了一下加载流程,整个代码还是很长并且晦涩的,一定要多debug去跟进,看每个对象何时创建和赋值,一步步跟着走,这样才能对整个流程有一个很好的了解 ...
最新文章
- 屈才了!当程序员会写诗后...... | 每日趣闻
- c++常见操作的模板
- sklearn特征的提取(上)
- php防止报错,php报错:Cannot redeclare class 提示的解决方法
- 如何理解Java的类变量、成员变量、常量、类属性、实例属性、字段(field)、成员方法、类方法
- Mac 设置 NDK
- 中专学历就该被拒之门外?做Java开发改变命运难吗?
- k近邻分类器的使用:简单例子
- centos安装docker详细步骤,如何配置阿里云镜像加速
- button执行onclick函数_【JavaScript】函数
- Windows server 2003-2016镜像下载
- MAC安装linux双系统
- python爬图mzitu_小白学 Python 爬虫(16):urllib 实战之爬取妹子图
- Oracle中国区大裁员:昔日辉煌不再,退出中国市场?
- jQuery源码中的“new jQuery.fn.init()”什么意思?
- 未分配虚拟网络-清理注册表
- 福建省漳州市谷歌卫星地图下载
- python自动读取excel文件邮箱列表,自动批量发送邮件项目(附使用方法+代码)
- 椭圆一般方程(ABCDEF)转椭圆参数方程(长短轴,几何中心)
- vue刷新当前页面--provide / inject 用法
热门文章
- windosws2008NTFS夺权
- 图书管理系统功能实现界面概览
- nextcloud为用户配置容量配额后,在网页左下角并未生效的解决办法
- Automattic收购MailPoet - WP站长
- to_timestamp()时区讲解
- 专访乔梁:“持续交付”本身并不是目标,而是手段。...
- 四元数系列之一:基本认知
- 安卓开发笔记——关于java.lang.RuntimeException: Unable to start activity ComponentInfo{......}问题的解决方案
- 无人机执法:高效之外也需注意规范管理
- ROS SMACH中级教程(二)