一、数据类型
Java中数据类型分为基本数据类型和引用数据类型
1.1 基本数据类型
Java中基本数据类型一共有8种
整型中有4种
整型中包含字节型(byte), 短整型(short),整型(int),长整型(long)。
浮点型有两种 单精度浮点型(float),双精度浮点型(double)。
字符型有一种 char
布尔型 boolean。
二、运算符
2.1 基本算术运算符
加法(+)、减法(-)、乘法(*)、除法(/)、取余(%):在 Java 中,语法与 C 语言类似。值得注意的是,Java 支持对小数进行取余操作。在除法运算里,若参与运算的两边均为整数,结果取整;若有一边是小数,则结果为小数。
2.2 增量运算符
包括+=,-=,*=,/=,%=。以a与b的运算为例,a+=b即为a=a+b,其他运算符可与此类比。
2.3 自增 / 自减运算符
与c语言类似,++和–。a++意为a=a+1。值得注意的是,++a与a++优先级不同,++a优先级更高
int a = 1;
System.out.println(a++);
System.out.println(a);
int b = 1;
System.out.println(++b);
System.out.println(b);
以这段代码为例,输出应该是什么呢?
理由是在执行print操作时,a++操作时先执行输出操作,再执行a=a+1,所以会输出原来的值1。++b正好相反,先执行b=b+1,再输出b的值,所以会输出2。
2.4 关系运算符
等于(==):判断两边是否相等,相等返回 true ,不等返回 false 。
不等于(!=):判断两边是否不等,不等返回 true ,相等返回 false 。
大于(>)、小于(<)、大于等于(>=)、小于等于(<=) :用于比较大小关系。
2.5 逻辑运算符与位运算符
逻辑与(&&):要求两边均为布尔表达式,只有两边表达式都为 true 时,结果才为 true ,否则为 false 。存在短路现象,即若第一个表达式为 false ,则第二个表达式不再执行。
逻辑或(||):两边也需是布尔表达式,只要有一边表达式为 true ,结果即为 true ,仅当两边都为 false 时结果为 false 。同样存在短路现象,若第一个表达式为 true ,第二个表达式不再执行。
逻辑非(!):作用于布尔表达式,对其结果取反。
按位与(&):按二进制位进行操作,对应位只要有一个 0 ,结果位就是 0 。例如,对 11 和 13 进行按位与运算:
11 的二进制:0000 1011
13 的二进制:0000 1101
运算结果:0000 1001
按位或(|):对应位只要有一个 1 ,结果位就是 1 。以 11 和 13 为例:
11 的二进制:0000 1011
13 的二进制:0000 1101
运算结果:0000 1111
按位异或(^):对应位相同为 0 ,不同为 1 。如 11 和 13 按位异或:
11 的二进制:0000 1011
13 的二进制:0000 1101
运算结果:0000 0110
按位取反(~):将二进制位的 0 和 1 互换。例如 11 按位取反:
11 的二进制:0000 1011
运算结果:1111 0100
2.6三目运算符
条件运算符也叫三目运算符,形式为 “表达式 1 ? 表达式 2 : 表达式 3” 。表达式 1 得是布尔类型, 如果表达式 1 判断结果为 true ,程序去执行表达式 2;要是表达式 1 结果是 false ,那就执行表达式 3 。
例:
boolean a = true==true?true ==false? false:true:false;
System.out.println(a);
这个问题乍一看上去很难,但只要明白了计算的先后顺序就能迎刃而解。下面我把原式拆分后再来看这道题:
加了括号之后将原式分为三段,这样来看,结果就很明显,先算中间的长式子得到结果true,再算外面的式子得到最终结果为ture。
2.7 移位运算符
移位运算符用于对二进制位进行操作,主要包括以下三种:
左移(<<)
左移运算符(<<)会将二进制位整体向左移动指定的位数 n ,右侧空出的位置用 0 填充。对于正数,每左移一位,其数值相当于乘以 2 。例如,数值 11 的二进制表示为 0000 1011 ,当左移 2 位后,变为 0010 1100 ,对应的十进制数值从 11 变为 44 ,即 11 乘以 2 的 2 次方。
右移(>>)
右移运算符(>>)将二进制位整体向右移动 n 位,左侧空出的位置用符号位填充。对于正数,右移一位相当于除以 2 并向下取整 。例如,11 的二进制为 0000 1011 ,右移 2 位后变为 0000 0010 。对于负数,以 -11 为例,其补码形式为 1000 1011 ,右移 2 位后变为 1110 0010 。
无符号右移(>>>)
无符号右移运算符(>>>)将二进制位整体向右移动 n 位,无论操作数是正数还是负数,左侧空出的位置均用 0 填充。例如,-11 的补码为 1000 1011 ,进行无符号右移 2 位操作后,结果为 0010 0010 ,这与右移(>>)操作的结果不同。
三、逻辑控制语句
3.1顺序结构
顺序结构是程序中最基本、最自然的执行结构。它按照语句出现的先后顺序依次执行,一条语句执行完后,接着执行下一条语句,直到程序的最后一条语句。
3.2分支结构(选择结构)
分支结构用于根据不同的条件来决定执行不同的代码块,使程序具有选择执行的能力。Java 中主要有 if 语句和 switch 语句两种分支结构。
if语句
简单 if 语句:当条件为 true 时执行相应的代码块。
public class IfStatementExample {
public static void main(String[] args) {
int num = 10;
if (num > 0) {
System.out.println(num + " 是正数");
}
}
}
if-else 语句:当条件为 true 时执行 if 代码块,否则执行 else 代码块。
public class IfElseStatementExample {
public static void main(String[] args) {
int num = -5;
if (num > 0) {
System.out.println(num + " 是正数");
} else {
System.out.println(num + " 是非正数");
}
}
}
if-else if-else 语句:可以根据多个条件进行判断,选择执行相应的代码块。
public class IfElseIfStatementExample {
public static void main(String[] args) {
int score = 85;
if (score >= 90) {
System.out.println("等级为 A");
} else if (score >= 80) {
System.out.println("等级为 B");
} else if (score >= 70) {
System.out.println("等级为 C");
} else {
System.out.println("等级为 D");
}
}
}
switch 语句:
根据一个表达式的值来匹配多个 case 选项,执行相应的代码块。
public class SwitchStatementExample {
public static void main(String[] args) {
int day = 3;
switch (day) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
default:
System.out.println("其他");
}
}
}
3.3循环结构
循环结构用于重复执行一段代码,直到满足特定的条件为止。Java 中有 for 循环、while 循环和 do-while 循环三种循环结构。
for 循环:通常用于已知循环次数的情况,它有初始化、条件判断和迭代三个部分。
public class ForLoopExample {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println("当前数字: " + i);
}
}
}
while 循环:先判断条件,当条件为 true 时执行循环体,循环体执行完毕后再次判断条件,直到条件为 false 时结束循环。
public class WhileLoopExample {
public static void main(String[] args) {
int i = 1;
while (i <= 10) {
System.out.println("当前数字: " + i);
i++;
}
}
}
do-while 循环:先执行一次循环体,然后再判断条件,只要条件为 true 就继续执行循环体,直到条件为 false 时结束循环。
public class DoWhileLoopExample {
public static void main(String[] args) {
int i = 1;
do {
System.out.println("当前数字: " + i);
i++;
} while (i <= 10);
}
}