1. 字面值常量
- 字符串:使用双引号,内部可以为空
- 字符:使用单引号,内部有且只有一个字符,可以是中文
- 整数:默认为int类型,表示
double加后缀L或l,表示float加后缀F或f - 小数:默认为
double类型,表示float加后缀F或f - 布尔:
false或true - 空:
null
2. 进制
- 二进制:以
0b开头 - 八进制:以
0开头 - 十进制:默认十进制
- 十六进制:以
0x开头
3. 数据表示形式
- 原码:使用最高位表示符号,其余位表示数值
- 反码:正数的反码与原码相同,负数的反码为原码取反
- 补码:正数的反码与原码相同,负数的反码为原码取反加一,运算时都以补码进行运算
4. 数据类型
- 基本数据类型:基本数据类型不能为
null- 整型:
byte(1B)、short(2B)、int(4B)、long(8B) - 浮点型:
float(4B)、double(8B)float:-3.403E38~3.403E38double:-1.798E308~1.798E308
- 字符型:
char(2B),使用Unicode编码 - 布尔型:
boolean(未明确指定)
- 整型:
- 基本数据类型隐式转换:
byte、short、char在进行混合运算时都会自动提升为int- 提升顺序:
byte、short、char>>int>>long>>float>>double
- 引用数据类型:数组、类、接口、枚举
5. 运算符
-
算术运算符
- 整数相除的运算结果为整数
%运算的结果符合只与左边的符号有关,与右边无关
-
赋值运算符
byte b=10;相当于:byte b;b=10byte b=10;b++;相当于:byte b;b=(byte)(b+1);byte b=10;b=b+1报错:因为b+1的结果为int类型byte b=10;b+=1相当于:byte b;b=(byte)(b+1);
-
关系运算符
-
逻辑运算符:
&(逻辑与)、|(逻辑或)、^(逻辑异或)、!(逻辑非)、&&(短路与)、||(短路或) -
位运算符:
&(位与)、|(位或)、^(位异或)、~(取反)、>>(有符号右移)、>>>(无符号右移)、<<(左移)-
一个数与另一个数位异或两次,结果不变。可用于交换两数的值(不使用中间变量):
/* 方式一:不使用中间变量,优点:不会溢出 */ x = x^y; y = x^y; x = x^y; /* 方式二:不使用中间变量,缺点:x+y可能会溢出 */ x = x+y; y = x-y; x = x-y;
-
-
三目运算符:
?:
6. 输入输出
-
输出
System.out.println("Hello World"); -
输入
import java.util.Scanner; Scanner sc = new Scanner(System.in); sc.nextInt(); sc.nextLine();
7. 条件判断
if语句:if..else if..elseswitch语句:switch..case..default- 表达式可以接收:
byte、short、char、int、String(JDK1.5)、Enum(JDK1.7) - 表达式不可以接收:
long case后面只能是常量- 没有
break会出现case穿透现象
- 表达式可以接收:
8. 循环
for循环- 无限循环:
for(;;){}
- 无限循环:
while循环- 无限循环:
while(true){}
- 无限循环:
do..while循环- 无限循环:
do{}while(true);
- 无限循环:
break语句:用于结束循环或switch语句,可以加标号continue语句:用于结束本次循环,可以加标号
9. 方法
- 方法是完成特定功能的代码块
- 方法不能嵌套,方法之间为平级关系
return用于结束方法,可以没有返回值- 方法重载:方法名相同,参数列表不同(长度或类型)
10. 数组
-
一维数组定义
/* 方式一:动态初始化,必须指明长度 */ type[] arr = new type[length]; /* 方式二:静态初始化,不能指明长度 */ type[] arr = new type[]{item1,item2...}; /* 方式三:快速初始化,长度等于元素数量 */ type[] arr = {item1,item2...}; -
数组默认初始化值
- 基本类型:
byte、short、int、long:0float、double:0.0boolean:falsechar:'\u0000'
- 引用类型:
null
- 基本类型:
-
数组名存放的内容:
[I@19bb25a([表示维度,I表示类型,@后面为地址值) -
多维数组定义
/* 方式一:指定所有维度长度 */ /* type[][] arr 可写为 type[] arr[] 或 type arr[][] */ type[][] arr = new type[length1][length2]; /* 方式二:指定高维长度 */ type[][] arr = new type[length1][]; /* 方式三:指定元素 */ type[][] arr = {{item1,item2...},{item3,item4...}...}; -
Java中参数传递为值传递,地址也是值
11. 内存划分
- 栈内存:存放局部变量
- 堆内存:存放
new生成的对象 - 方法区:存放运行时的字节码文件,包含静态区(用于存放静态成员及方法)
- 本地方法区
- 寄存器:与CPU相关
12. 随机数
Math.random():范围[0,1)
13. 静态导入
- 语法:
import static 包名.类名.方法名 - 可以导入类中的静态方法,导入后可以直接使用方法名调用,不用加类名
- 在使用类中存在相同方法时,会产生冲突
14. 可变参数
- 语法:
public static void fun(int... arr) { ... } - 相当于一个数组,在传入参数是会把参数封装成一个数组
- 当方法有多个参数时,可变参数必须为最后一个参数
15. 递归
- 方法自身调用自身,但调用次数过多会导致栈内存溢出
- 构造方法不能递归调用
- 使用场景
- 获取文件夹大小:获取所有子文件大小并求和
- 删除文件夹:递归删除子文件,最后删除父目录
- 拷贝文件夹:先创建父目录,递归拷贝文件;注意源和目标相同时会产生多级目录
- 斐波那契数列:第一第二项为
1,其余项为前两项之和 - 约瑟夫环:当计数到
3时移除元素,直到余下最后一个元素