java基础复习(三)
一、运算符
1.算术运算符
1) 加法(+) 加法 正号 字符串拼接
2) 减法(-) 减法 负号
3) 乘法 (*) 乘法
4) 除法(/) 除法
-
-
- 整数(小数)相除的例子
-
10/3 =3; 10.0/3=3.33333…
-
-
- 0/0
- 0.0/0.0
-
结果是NaN ,任何的NaN都不等于自己(面试题)
-
-
- 1.0/0.0
-
Infinity,表示无穷大
5) 取模(%)
2.自增自减
++(自增) --(自减)
自增自减只能够用于 变量,不能用于常量
自增自减运算的优先级 比 算术运算符 高
1)基本的使用
1)
int i=3; // 表示把3赋值给变量i i++; //表示变量i的值加1,i的值变成4 ++i; //表示变量i的值加 1,i的值变成5 |
2)
int i=3; int j = i++; i等于多少,j等于多少? |
3)
int i=3; int j = ++i; i等于多少,j等于多少? |
区别:
把整个表达式看成是一个整体。
如果变量名在前面,那么整个表达式的值就是原来值不变。
如果变量名在后面,那么整个表达式的值就是原来的值加
2)常见的面试题
1.
2.
3.
3)练习
1.
int i=5; i++; System.out.println("i="+i);//6 ++i; System.out.println("i="+i);//7 int a=++i; System.out.println("a="+a);//8 i=8 a = a++; System.out.println("a="+a);//8 a = ++a; System.out.println("a="+a);//9
|
2.
4)总结
不要把单独的 自增自减 和 有表达式的自增自减搞混淆了
i++;
int j =i++;
|
一定要弄清楚计算规则,表达式的值 和 具体计数器的值的变化是什么
3.赋值运算
= += -= *= /= %=
1) 赋值符号的运算顺序?
从右到左,把符号右边的值赋值到左边的变量中
2) 上面 后五个分别看成是一个整体: 例如 += 看成是一个符号,不要看成两个;
int i=3; i +=2;// 表示把2 累加到变量 i 中 i -=1; i *=3; i /=3; i%=3; |
特例:
short s = 3; s += 2; ----》OK
short s = 3; s = s+2;//结果值是int,int不能自动转换为short
|
4.比较运算符
== != > < >= <= instanceof
规律:比较运算的结果是一个布尔类型的值(true 或false);
- 举例:
定义一个布尔表达式,打印输出
- 特别说明:instanceof 是判断一个对象是否属于某种类型
是否可以用于我们之前学习的基本数据类型(回忆一下我们之前学习的数据类型除了基本数据类型 还有什么?)
5.逻辑运算
& | && || ^ !
是应用于多个条件的组合判断。
-
- 示例说明:
例如小明参加2个学科的考试 java php
1) java 和 php 同时考100分,奖励 欧洲十日游
伪代码描述:java==100 并且 php==100
2) java 和php,只要有一门考100分,奖励 源代码优惠券2000元一张
伪代码描述:java==100 或者 php==100
- 逻辑运算的两边结果值都必须是什么类型? 布尔
& :两边都为true ,结果为true
| : 只要有一边为true,结果为true
&& : 两边都为true ,结果为true
|| : 只要有一边为true,结果为true
^ : 两边不一样,结果为true ,否则为false,举个例子打印一下
! : 逻辑非,举个例子打印一下
&& || 和 & | 区别?
1) & | 既可以充当逻辑运算,也可以是位运算符,怎么区分是逻辑运算还是位运算?
根据表达式的结果是否为 布尔类型 来判断
2) 双与 双或 具有短路行为 什么意思?
举个例子 上面小明的考试的成绩 要求是两科都为100分,看到第一科低于100分之后没有必要再看第二科成绩
代码表示:Java = 100 && php = 100 (java只考了5分)
如果逻辑运算左边的值能够确定整个逻辑运算表达式的值,那么右边就不执行了,短路了。
&& 何时短路 ? 左边表达式结果为false
|| 何时短路 ? 左边表达式结果为true
- 思考:如何验证短路行为?
提示:
右边表达式用 自增自减,例如 ++i = 5
或者使用一个编译正常,运行报错的表达式,例如 1/0
常见错误:
例如:判断一个整数的变量 a里面的数据 在0-100之间
正确写法: a>0 && a<100
错误写法: 0< a < 100 (java没有这种语法,不支持)
6.位运算符
& | ^ ~ << >> >>>
位运算就是 二进制的位进行运算。
- 示例:比如计算 125+176 ,从数学的角度是怎么计算的?
- 同理,位运算也类似,比如 3&4
可以把1看成是true,把0看成是false
& :与 位运算,两边为1,结果为1
| :或 位运算,有一个为1,结果为1
^ : 异或,两边不一样,就为1,否则为0
~ : 取反,1变成0 ,0 变成1
<< : 向左位移动,例如1<<3
>> : 向右位移动,例如8>>2
>>>: 无符号向右移动
注意:正数的补码,反码,原码 都一样;
负数的反码:符号为不变,其他位取反;
负数的补码:它的反码+1;
7.三目运算符
语法格式: X ? Y : Z
1) 上面的三目运算整体看成是一个表达式,应该有一个结果值
2) X ? 布尔类型的值或者结果为布尔类型的表达式
3) Y Z ? 一般来说数据类型相同的值或者表达式
4) 运算的规则?
X 为true,就是 Y 的结果值 ( 冒号前面的表达式的值)
X为false,就是Z的结果值 ( 冒号后面的表达式的值)
x ? y : z
注意: 不要受 ? 和 : 的干扰,它们只是一个固定语法格式而已
示例1: 找出两个整型变量中的最大值
示例2:判断一个数是 奇数 还是 偶数
示例3: 例如小明学习java 考试成绩 >=60 显示 非常优秀 否则输出 还有很大的提升空间。
二、条件选择结构
- 举例: 加个条件 打印一句话。
if(1==2){
System.out.println(“今晚请大家吃大餐!”);
}
- 示例
智能机器人,开发一套软件,负责智能上厕所(应该获取硬件设备上的性别标识)。
1.
if(判断条件){ 满足 判断条件(true),就执行此大括号里面的内容 } |
2.
if(判断条件A){ 满足 判断条件A(true),就执行此大括号里面的内容,后面的else不会执行 }else{ 前面的 判断条件A(false),执行else大括号里面的内容 } |
3.
if(判断条件A){ 满足 判断条件A(true),就执行此大括号里面的内容,后面的else-if不执行 }else if(判断条件B){ 满足 判断条件B(true),就执行此大括号里面的内容 }
|
4.
if(判断条件A){ 满足 判断条件A(true),就执行此大括号里面的内容,后面的else-if不执行 }else if(判断条件B){ 满足 判断条件B(true),就执行此大括号里面的内容 }else{ 前面的if esle-if 都不满足条件(false),执行此大括号里面的内容 } |
5
else if 可以有多个
if(判断条件A){ 满足 判断条件A(true),就执行此大括号里面的内容,后面的else-if不执行 }else if(判断条件B){ 满足 判断条件B(true),就执行此大括号里面的内容,后面的else-if else 不执行 } else if(判断条件C){ 满足 判断条件C(true),就执行此大括号里面的内容,后面的 else 不执行 }else{ 前面的if esle-if 都不满足条件(false),执行此大括号里面的内容 }
|
- 总结
- if 后面的大括号如果不写,表示执行是后面的第一行代码(不建议这样写)
- 练习
- 求出2个变量中的最大值
- 判断一个数是否是3的倍数
① int a = 10;
a %3 == 0 ?”就是3的倍数”:”不是”
②if(a %3 == 0 ){
System.out.println(”就是3的倍数”)
}else{
System.out.println(”不是3的倍数”);
}
3.小明java 考试成绩 按等级分 A B C D ,判断变量值在不同的范围的,打印输出不同的等级
90~100 A等。 80-89 B等。 70-79 C等。 60-69 D等。 60以下E等。
|
int score = 99;
if(score>=90 && score <=100){
}else if(score>=80 && scorce <90 ){
}else if(score>=70 && scorce <80 ){
}else if(score>=60 && scorce <70){
}else{
}
三、条件选择结构-switch
作用和if差不多,只是语法结构不一致而已。
语法 :
switch(变量或者一个表达式){ case 变量的可能值1: 功能语句;break; case 变量的可能值2: 功能语句;break; case 变量的可能值3: 功能语句;break; ........ default:功能语句;break; }
|
示例 : 假设定义一个变量表示星期,然后使用switch结构,根据不同星期打印做不同的事情。
---------------------------------
特殊的一些情况:
1) case的顺序(包括default) 可以是任意的, 但是建议先按照case的值的大小顺序排列,default放最后
2) 执行顺序,是先依次找完所有的case,如果都不匹配才会执行default
3) break的作用,结束当前的这个switch结构
-
- 从第一个匹配的条件开始,到第一个break之间的所有case判断失效
- 在执行功能语句时,如果到末尾都没有break,自动结束,不会再循环回去。
- 最后一个break 可以省略掉,但是建议还是写上
- 再举例 一个 打印 春夏秋冬的例子?
5) ase后面的值应该和变量的类型一致;
6) switch中的()中的变量地方类型可以是哪些?
java5之前 : byte short char int
java5支持 : enum枚举 (面向对象部分学习了之后回头测试)
java7支持 : String 类型
四、循环的作用
- 每一天重复干的事情?
睡觉 吃饭 耍朋友
- 比如酷狗音乐的播放模式?
单曲循环 列表循环
- 再比如说打印10句相同的内容?
Java中提供了3 种循环?
while do-while for
1.上面的3中循环功能都是一样的,只是语法结构不一样,很多时候是可以相互交换的, 既然都差不多,为什么有多个呢?
不同的循环结构,有不同的使用场景和优势
2.在写循环代码之前呢?
1) 要做什么事情
2) 次数
3) 要写循环,必须知道循环的语法
五、while的基本用法
while
语法格式:
while(条件(布尔类型的)){ // 循环体à具体做什么事情 }
|
- 执行流程
1.一个循环可能会循环执行多次
第一次判断条件true,继续执行
第二次判断条件true,继续执行
第三次判断条件true,继续执行
。。。。。
直到第n次判断条件false,终止循环
2.为什么第一次 第二次是true 。。。 n次就是false?
- 条件可以是一个常量
举个例子(条件为布尔值true)
- 一般我们使用一个变量来充当条件循环,
举个例子:播放一首歌,循环播放10次
1) 定义一个整数的变量记录循环的次数
2) 循环一次,自增一次
3) 根据次数进行判断
3.写一段代码计算1-10的和。
1) 传统的做法
1+2+3+4+5+6+7+8+9+10
如果要求计算1-100 , 1-1000 这样写是否合理?
可以动态的获得每一个加数
2) 使用while循环,每循环一次,把取到的加数累加起来
3) 在循环的外面定义一个变量用来放计算的和的值
练习:
- 求出10以内2的倍数的数字 和 个数。
- 求出 1-10的所有偶数的和
六、do-while基本用法
l do-while 先执行一次,再判断
语法格式:
do{ // 循环体 }while(条件); |
举例:循环10次
- 和while区别?
1) 定义一个 布尔变量,默认值false
2) 将这个布尔变量放在 while 和 do-while 条件中,看有什么区别