1.1 数据类型转换的原因
Java程序中要求参与计算的数据,必须要保证数据类型统一成一致,才可以参与运算,如果数据类型不一致将发生类型的转换。所以数据类型之间的转换是有必要的。
1.2 自动类型转换
1.2.1 常量赋值给变量
1.2.2 自动类型转换
取值范围小的类型 可以自动转换为取值范围大的类型 。也就是小范围变量到大范围变量是自动转换的。
满足byte->short->int->long->float->double,其中char类型的变量可以直接自动转换给int类型的变量。
1.3 强制类型转换
1.3.1 引入
将 200 赋值到 byte 类型变量会发生什么?产生编译失败,肯定无法赋值。
byte类型的范围是-127到128之间,200已经超过了byte类型变量可以存储的数据范围大小。想要赋值成功,只有通过强制类型转换,将int类型的200进行强制转换成 byte 类型才能赋值。
强制转换:将取值范围大的类型强制转换成取值范围小的类型 。也就是把大范围类型的数据或者大范围的类型变量赋值给小范围的类型变量必须要强制类型转换否则代码报错。比较而言,自动转换是Java自动执行的,而强制转换需要我们自己手动执行。
1.3.2 强制转换格式
将 200 赋值到 byte类型,代码修改为:
同样道理,大范围类型的变量赋值给一个小范围类型的变量也需要强制类型转换。
1.3.3 注意事项与小结
浮点型转成整型,直接截断小数点,保留整数部分,可能造成数据损失精度。 大范围类型的变量 强制转成小范围类型的变量,可能造成数据丢失。
1.4 表达式的自动类型提升
数据类型在表达式中参与运算时将满足一定的转换规则。
1.4.1 转换规则
1.范围小的类型向范围大的类型提升, byte、short、char 运算时是直接提升为 int的。
2.表达式的最终类型由表达式中的最高类型决定。
1.4.2 练习
下面代码存在什么问题?
1.4.3 小结
1.表达式的最终结果类型由表达式中的最高类型决定。
2.byte,short,char类型的变量在参与运算的时候会直接升级成int类型参与运算(针对于表达式)。
1.5 ASCII编码表
在计算机的内部都是二进制的0、1数据,如何让计算机可以直接识别人类文字的问题呢?十进制和二进制转换很方便,将现实生活中的字符和数字对应。就产生出了编码表的概念。
编码表 :就是将人类的文字和一个十进制数进行对应起来组成一张表格。
人们就规定:
将所有的英文字母,数字,符号都和十进制进(就是整数编号)行了对应,因此产生了世界上第一张编码表ASCII( American Standard Code for InformationInterchange 美国标准信息交换码)。
第二章 运算符
什么是运算符: 对变量或者常量进行操作的符号。
运算符的分类: 算数运算符 , 赋值运算符 , 比较运算符 , 逻辑运算符 , 三元运算符
2.1 算数运算符
2.1.1 基本的算数运算符
算数运算符练习
注意:Java中,整数相除结果是整数
%取余练习题:
2.1.2 自增++与自减--
++运算,变量自己增长1。反之--运算,变量自己减少1。
独立运算:
变量在独立运算时, 前++ 和 后++ 没有区别。就是++ , -- 单独使用的时候在变量的 前后是没有区别的。都是+1或者减1。
变量 前++:例如 ++i 。
变量 后++ :例如 i++ 。
表达式中运算:
++,--在表达式运算中,变量前++ 和变量后++ 的计算方式是不同的。
++ , --,如果在表达式中进行运算的时候,在变量的前后是有区别的。 ++ , -- 如果在变量的后面,先使用变量的值运算,然后再对变量进行自增或者自减。 ++ , -- 如果在变量的前面,先对变量进行自增或者自减,然后参与运算
2.1.3 +符号在字符串中的操作
+符号在遇到字符串的时候,表示连接、拼接的含义。
"a"+"b"的结果是“ab”,连接含义
案例演示
2.2 赋值运算符
2.2.1 基本赋值运算符=
=是用来给左边的变量进行赋值的,通常是先计算=右边的表达式,然后把结果赋值给左边的变量。
2.2.2 扩展的赋值运算符
扩展的赋值运算符包括了,+=,-=,*=,/= , %= 等等。都是基本运算符加上“=”的形式。扩展运算符的关键是把握住他们隐含的公式,如下所示:
从以上公式可以看出,扩展赋值运算符是简化了两个变量的运算,是把运算的结果直接交给前一个变量,而且自带了强制类型转换。
2.2.3 小结
扩展的赋值运算符自带了强制类型转换。
2.3 比较运算符
比较运算符又叫关系运算符,是两个数据之间进行比较的运算,运算结果都是布尔值 true 或者 false 。
2.3.1 小结
注意“=”与“==”的区别。
2.4 逻辑运算符
逻辑运算符,是用来对两个布尔类型进行运算的,运算结果都是布尔值 true 或者 false
逻辑运算符包括
2.4.5 &&,||,!,^
逻辑运算符是用来连接两个条件的,判两个断两个条件是否满足某种逻辑,最终的结果也是布尔类型。
1.&& :短路与必须前后两个条件的结果都是true的时候,最终的结果才是true. 只要有一个条 件是false,最终的结果一定是false.
2.|| :短路或只要有一个条件是true,最终的结果一定是true. 必须前后两个条件的结果都是false的时候,最终的结果才是false
3.!:非 取反 !true false !false true
4. ^ : 异或必须两个条件是相反的,结果才是true,如果两个条件相同结果一定是false
案例演示:
2.4.5 && 与 &,|| 与 |的区别
&& :短路与必须前后两个条件的结果都是true的时候,最终的结果才是true。 只要有一个条件是false,最终的结果一定是false。
|| :短路或只要有一个条件是true,最终的结果一定是true。 必须前后两个条件的结果都是false的时候,最终的结果才是false。
& : 与 与短路与的结果是完全一样的。 短路与&&如果发现第一个条件已经是false,根本不会执行第二个条件,短路与比较聪明。与是很傻的,无论第一个条件是true还是false,它依然会去执行第二个条件。
| :或 与短路或的结果是完全一样的。 短路或||如果发现第一个条件已经是true,根本不会执行第二个条件,短路或比较聪明。或是很傻的,无论第一个条件是true还是false,它依然会去执行第二个条件。
案例代码
2.4.6 小结
1、设计到多个条件判断的时候应该选择逻辑运算符。
2、实际开发中短路与和短路或用的较多。
2.5 三元(目)运算符
2.5.1 格式
数据类型变量名 = 布尔类型表达式?结果1:结果2;
2.5.2 三元运算符计算方式
布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。
布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量。
2.5.3 三元运算符练习
获取两个数的较大值
2.6 案例
随便给你一个三位数,计算出它的各位,十位,和百位并输出显示。
第三章流程控制
3.1 概述
软件是为了模拟现实世界的,流程控制语句是模拟现实世界的各种行为活动。在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流 程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。
现实世界中的活动有: 顺序活动(按部就班一步一步的完成某件事情),选择活动(达到什么条件我才去做这个时间),重复活动(反复的去干一件事情,比如我们反复的去背一首诗,直到背熟为止)。
所以Java的流程控制语句也有三种,依次是:顺序结构、分支结构、循环结构(重复执行一段代码)。
3.2 顺序结构
顺序执行,根据编写的顺序,从上到下运行
3.3分支结构
分支结构就是满足某个条件,才执行对应的代码。分支结构包含了if语句和switch分支,实际上if相比 switch要强大很多,当然switch也有它独特的优势,我们先学习if语句。
3.3.1 if分支结构格式1--if
if语句第一种格式: if
执行流程
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体
如果是false就不执行语句体
3.2.2 if分支结构格式2--if...else
if语句第二种格式:if...else
执行流程
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体1
如果是false就执行语句体2
3.2.3 if分支结构格式3--if...else if...else
if语句第三种格式: if...else if ...else
执行流程
首先判断关系表达式1看其结果是true还是false
如果是true就执行语句体1
如果是false就继续判断关系表达式2看其结果是true还是false
如果是true就执行语句体2
如果是false就继续判断关系表达式…看其结果是true还是false
…
如果没有任何关系表达式为true,就执行语句体n+1。
3.3 if语句注意事项
1.不要在if()后面加; if();{}
2. 如果if语句体的代码"只有一行"是可以省略大括号的。如果语句体代码有多行是不要省略大括号。
if语句只能控制后面的第一行语句。