运算符&流程控制语句

变量案例补充

     // 编译这一行时,由于'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. 对于单独使用,自增自减运算符放在变量前面和后面没有任何区别。
  2. 对于混合使用
    1. 如果++(–)符号在变量前面,那么会先将变量自身立刻加1(减1),然后根据加1(减1)之后的结果进行其他操作
    2. 如果++(–)符号在变量后面,那么会先进行其他操作,然后在进行加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相关推荐

  1. Java复习笔记(8)——网络

    一:网络的结构 物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由 1.0 转化为电流强弱来进行传输,到达目的地后转化为1.0, ...

  2. 大四Java复习笔记之Java基础

    2019独角兽企业重金招聘Python工程师标准>>> 一.static和final 学习Java那么久,好像自己就没有怎么用过final,所以对fianl的理解不够.final不但 ...

  3. 【Java】Java复习笔记-第三部分

    修饰符abstract 抽象的,定义框架不去实现,可以修饰类和方法 abstract修饰类: 会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型 抽象类 ...

  4. Java 复习笔记 线程Thread

    1概念: 进程:运行中的应用程序  线程:进程中的一个执行流程 2区别 进程有独立的进程空间,进程中的数据存放空间(堆空间和栈空间)是独立的. 线程的堆空间是共享的,栈空间是独立的,线程消耗的资源也比 ...

  5. Java 复习笔记 异常Exception

    1定义 程序在运行过程中发生由于硬件设备问题.软件设计错误等导致的程序异常事件.异常本身是一个对象,产生异常就是产生了一个异常对象.如果不捕获异常,程序将在发生异常代码的地方中断,导致应用退出,而捕获 ...

  6. mybatis 复习笔记03

    参考:http://www.mybatis.org/mybatis-3/zh/configuration.html 入门 1. 从 XML 中构建 SqlSessionFactory 每个基于 MyB ...

  7. 校招刷题---java选择题笔记03

    1 数据项 1双字=2字=4字节=32位 2 抽象类与最终类 1)抽象类(被abstract修饰的类):可以没有抽象方法    最终类(被final修饰的类):可以没有最终方法(被final修饰的方法 ...

  8. JAVA学习笔记 03 - JAVA语言程序结构

    本文是Java基础课程的第三课.计算机语言的程序结构无外乎顺序结构.分支结构.循环结构,本文主要介绍Java语言中这些程序结构是如何实现的 文章目录 一.程序结构 二.分支结构 1.单分支if语句 2 ...

  9. Java复习笔记入门阶段06:方法

    目录 1.方法概述 2.方法定义格式 2.1 方法常见问题 2.2 求和 2.3 判断奇数偶数 2.4 求最值 3.方法的内存原理 3.1 方法的调用流程,内存图解 4.方法的参数传递机制 4.1基本 ...

  10. java复习笔记4--SpringCloud系列二:五大神兽之Eureka

    前面两天介绍了SpringCloud的基础知识,以及窥探了一下加载流程,整个代码还是很长并且晦涩的,一定要多debug去跟进,看每个对象何时创建和赋值,一步步跟着走,这样才能对整个流程有一个很好的了解 ...

最新文章

  1. 屈才了!当程序员会写诗后...... | 每日趣闻
  2. c++常见操作的模板
  3. sklearn特征的提取(上)
  4. php防止报错,php报错:Cannot redeclare class 提示的解决方法
  5. 如何理解Java的类变量、成员变量、常量、类属性、实例属性、字段(field)、成员方法、类方法
  6. Mac 设置 NDK
  7. 中专学历就该被拒之门外?做Java开发改变命运难吗?
  8. k近邻分类器的使用:简单例子
  9. centos安装docker详细步骤,如何配置阿里云镜像加速
  10. button执行onclick函数_【JavaScript】函数
  11. Windows server 2003-2016镜像下载
  12. MAC安装linux双系统
  13. python爬图mzitu_小白学 Python 爬虫(16):urllib 实战之爬取妹子图
  14. Oracle中国区大裁员:昔日辉煌不再,退出中国市场?
  15. jQuery源码中的“new jQuery.fn.init()”什么意思?
  16. 未分配虚拟网络-清理注册表
  17. 福建省漳州市谷歌卫星地图下载
  18. python自动读取excel文件邮箱列表,自动批量发送邮件项目(附使用方法+代码)
  19. 椭圆一般方程(ABCDEF)转椭圆参数方程(长短轴,几何中心)
  20. vue刷新当前页面--provide / inject 用法

热门文章

  1. windosws2008NTFS夺权
  2. 图书管理系统功能实现界面概览
  3. nextcloud为用户配置容量配额后,在网页左下角并未生效的解决办法
  4. Automattic收购MailPoet - WP站长
  5. to_timestamp()时区讲解
  6. 专访乔梁:“持续交付”本身并不是目标,而是手段。...
  7. 四元数系列之一:基本认知
  8. 安卓开发笔记——关于java.lang.RuntimeException: Unable to start activity ComponentInfo{......}问题的解决方案
  9. 无人机执法:高效之外也需注意规范管理
  10. ROS SMACH中级教程(二)