1.运算符
运算符的优先级(从高到低)
优先级 | 描述 | 运算符 |
1 | 括号 | ()、[] |
2 | 正负号 | +、- |
3 | 自增自减,非 | ++、--、! |
4 | 乘除,取余 | *、/、% |
5 | 加减 | +、- |
6 | 移位运算 | <<、>>、>>> |
7 | 大小关系 | >、>=、<、<= |
8 | 相等关系 | ==、!= |
9 | 按位与 | & |
10 | 按位异或 | ^ |
11 | 按位或 | | |
12 | 逻辑与 | && |
13 | 逻辑或 | || |
14 | 条件运算 | ?: |
15 | 赋值运算 | =、+=、-=、*=、/=、%= |
16 | 位赋值运算 | &=、|=、<<=、>>=、>>>= |
- 算术运算符
整数相除只能得到整数,要想得到小数,可以把要操作的数据中的任意一个数据变为浮点型 例如3/4的结果为0,而3*1.0/4的结果是0.75
- 赋值运算符
= , +=, -=, *=, /=, %=
=为基本的赋值运算符,其他的为扩展的赋值运算符
eg short s=1, s = s+1; (有问题,有可能损失精度)
short s=1, s+=1;(没问题,隐含了一个强制类型转换s=(short)(s+1) )
- 比较运算符
比较运算符“==”不能误写成“=”
比较运算符的结果都是boolean型,要么是true,要么是false。
- 逻辑运算符
逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6
&: 有false则false
|: 有true则true
^: 相同false,不同true
“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
- 位运算符
位运算符 | ||
运算符 | 运算 | 范例 |
<< | 左移 | 3 << 2 = 12 --> 3*2*2=12 |
>> | 右移 | 3 >> 1 = 1 --> 3/2=1 |
>>> | 无符号右移 | 3 >>> 1 = 1 --> 3/2=1 |
& | 与运算 | 6 & 3 = 2 |
| | 或运算 | 6 | 3 = 7 |
^ | 异或运算 | 6 ^ 3 = 5 |
~ | 反码 | ~6 = -7 |
位运算符的细节 | |
<< | 空位补0,被移除的高位丢弃。 |
>> | 被移位的二进制最高位是0,右移后,空缺位补0; 最高位是1,最高位补1。 |
>>> | 被移位二进制最高位无论是0或者是1,空缺位都用0补。 |
& | 任何二进制位和0进行&运算,结果是0; 和1进行&运算结果是原值。 |
| | 任何二进制位和0进行 | 运算,结果是原值; 和1进行 | 运算结果是1。 |
^ | 任何相同二进制位进行 ^ 运算,结果是0; 不相同二进制位 ^ 运算结果是1。 |
位运算是直接对二进制进行运算。
一个数据被另一个数据异或两次,值不变 eg: int a=10,b=20;
a^b^b 结果是10
a^b^a 结果是20
- 三目运算符
(关系表达式)?表达式1:表达式2;
关系表达式的结果是boolean类型
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
eg:获取三个整数中的最大值
(a>b)?((a>c)?a:c):((b>c)?b:c)
2.流程控制语句
- 顺序结构
是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程 序 中大多数的代码都是这样执行的。 总的来说:写在前面的先执行,写在后面的后
- 选择结构(分支结构)
选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
Java语言提供了两种选择结构语句
1 if语句
例子:获取三个数据中的最大值
class IfTest4 {
public static void main(String[] args) {
int a = 10;
int b = 30;
int c = 20;
//三元实现
//int temp = (a>b)? a: b;
//int max = (temp>c)? temp: c;
//System.out.println("max:"+max);
//System.out.println("--------");
//用if语句实现
int max;
if(a > b) {
if(a > c) {
max = a;
}else {
max = c;
}
}else {
if(b > c) {
max = b;
}else {
max = c;
}
}
System.out.println("max:"+max);
}
}
2 switch 语句
- 循环结构
1 for循环语句
例子:统计1000以内的”水仙花数”共有多少个
/*
需求:统计1000以内”水仙花数”共有多少个
分析:
A:首先必须知道什么是水仙花数
所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
举例:153就是一个水仙花数。
153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
*/
class ForDemo8 {
public static void main(String[] args) {
//定义统计变量,初始化值是0
int count = 0;
//三位数告诉了我们范围,用for循环就可以搞定
for(int x=100; x<1000; x++) {
//获取每一个三位数的个,十,百的数据
int ge = x%10;
int shi = x/10%10;
int bai = x/10/10%10;
//按照要求进行判断
if(x == (ge*ge*ge+shi*shi*shi+bai*bai*bai)) {
//如果满足要求就计数。
count++;
}
}
System.out.println("水仙花数共有"+count+"个");
}
}
2 while循环语句
例子:折纸游戏
/*
我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。
请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
*/
class WhileDemo5 {
public static void main(String[] args) {
//定义一个统计变量,默认值是0
int count = 0;
//最高山峰是珠穆朗玛峰:8848m这是最终的厚度
//我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度
//为了简单,我把0.01变成1,同理8848就变成了884800
int end = 884800;
int start = 1;
while(start<end) {
//只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++
count++;
//折叠一次有什么变化呢?就是厚度是以前的2倍。
start *= 2;
System.out.println("第"+count+"次厚度是"+start);
}
//输出统计变量。
System.out.println("要叠"+count+"次");
}
}
3 do…while循环语句
例子:九九乘法表
/*
需求:在控制台输出九九乘法表。
首先我们写出九九乘法表:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
...
1*9=9 2*9=18 3*9=27 ...
我们先把这个九九乘法表看出是这样的一个形状:
*
**
***
****
*****
******
*******
********
*********
注意:
'\x' x表示任意,这种做法叫转移字符。
'\t' tab键的位置
'\r' 回车
'\n' 换行
*/
class ForForDemo3 {
public static void main(String[] args) {
for(int x=0; x<9; x++) {
for(int y=0; y<=x; y++) {
System.out.print("*");
}
System.out.println();
}
System.out.println("--------------");
//为了使用数据,我们从1开始
for(int x=1; x<=9; x++) {
for(int y=1; y<=x; y++) {
System.out.print(y+"*"+x+"="+y*x+"\t");
}
System.out.println();
}
}
}
4 跳转控制语句
代码示例 :break,continue,return 之间的区别
/*
return:返回
*/
public class ReturnTest {
public static void main(String[] args) {
for(int x=0; x<10; x++) {
if(x == 2) {
System.out.print("退出,");
//break;//0,1,退出,over
//continue;//0,1,退出,3,4,5,6,7,8,9,over
return;// 0,1,退出,
}
System.out.print(x+",");
}
System.out.print("over");
}
}