JavaSE
JavaSE
JDK、JRE、JVM:
JDK | Java Development Kit | Java开发工具包 |
---|---|---|
JRE | Java Runtime Environment | Java的运行环境 |
JVM | Java Virtual Machine | Java虚拟机,真正运行]ava程序的地方 |
ASCII编码 | ASCII码 |
---|---|
A | 65 |
a | 97 |
0 | 48 |
计算机数据单位 | 转换关系 |
---|---|
1B | 8b |
1KB | 1024B |
1MB | 1024KB |
1GB | 1024MB |
1TB | 1024GB |
二进制运算 | -1的原码、反码、补码 |
---|---|
原码 | 10000000 00000000 00000000 00000001 |
补码(补码 = 反码 + 1) | 11111111 11111111 11111111 11111111 |
反码 | 11111111 11111111 11111111 11111110 |
IDEA快捷操作 | 快捷键 |
---|---|
主方法 | psvm + Enter |
单行注释 | ctrl + / |
多行注释 | ctrl +shift+/ |
文档注释 | /** + enter |
打印输出语句 | sout |
删除一行 | ctrl + y |
复制一行 | ctrl + d |
代码格式化 | ctrl +alt +L |
重命名 | shift + f6 |
多行输入 | alt +鼠标左键 |
上下移动 | shift + alt + 方向上下键 |
自动生成变量名 | ctrl + alt + v |
数据类型
数据类型知识点 | 介绍 |
---|---|
基本数据类型 | 整型、浮点型、布尔型、字符型 |
引用数据类型 | 接口、对象、数组、String。 |
默认类型 | 浮点数默认为double类型,整数默认为int类型。 |
类型转换 | 强制类型转换、自动类型转换。 |
基本数据类型 | 八种 | 字节数 | 数据范围 | 包装器 | 在数组中的默认值 |
---|---|---|---|---|---|
整型 | byte | 1 | -128-127 | Byte | 0 |
short | 2 | -32768~32767 | Short | 0 | |
int | 4 | -2147483648~2147483648 | Integer | 0 | |
long | 8 | -263~263-1 | Long | 0 | |
浮点型 | float(f,F) | 4 | -3.403E–3.403E | Float | 0.0 |
double(d,D) | 8 | Double | 0.0 | ||
字符型 | char | 2 | ‘a’,‘A’,‘1’ | Character | `` |
布尔型 | boolean | 1 | true,false | Boolean | false |
类型转换 | 介绍 | 问题 |
---|---|---|
自动类型转换 | 小容量类型转为大容量类型 | |
强制类型转换 | 大容量类型转为小容量类型 | 存在溢出或精度降低,可能会造成数据丢失。 |
运算符
运算符知识点 | |
---|---|
算数运算符 | |
逻辑运算符 | |
位运算符 | |
关系运算 | |
赋值运算符 | |
运算符优先级 |
逻辑运算符 | |||
---|---|---|---|
1 | && | 短路与 | 当结果确定时,直接返回。 |
2 | || | 短路或 | 当结果确定时,直接返回。 |
3 | & | 逻辑与 | |
4 | | | 逻辑或 | |
5 | ! | 逻辑非 | |
6 | ^ | 逻辑异或 |
运算符优先级 | 运算符 | |
---|---|---|
1 | () | |
2 | ! | |
3 | ||
4 | ||
5 | >>> 、<< 、>> | |
6 | ||
7 | ||
8 | & | 注意逻辑运算符之间的优先级关系 |
9 | ^ | |
10 | | | |
11 | && | |
12 | || | |
13 | ||
14 |
位运算符 | - | - |
---|---|---|
& | 与 | 1&1=1 ,1&0=0 |
| | 或 | 1|1=1 ,0|0=0 ,1|0=1 |
^ | 异或 | 1^1=0 ,1^0=1 ,0^0=0 |
~ | 取反 | ~1=0 ,~0=1 |
<< | 左移 | |
>> | 右移 | |
>>> | 无符号右移 |
JVM
JVM知识点 | |
---|---|
JVM内存区域划分 | |
JVM内存区域 | 介绍 | |
---|---|---|
栈 | 每个线程都有自己的虚拟机栈,栈的生命周期与线程相同。其内部保存栈帧(Stack Frame),对应每次Java方法的调用。JVM对Java栈的操作,就是对栈帧的压栈和出栈。 | |
堆 | Heap | 存放Java对象实例,JVM内存模型中最大的一块,被所有线程共享,在JVM启动时所创建。 |
程序计数器 | PC | 每个线程都有自己的程序计数器(一个线程同时只有一个方法在执行),PC会存储当前线程正在执行的Java方法的JVM指令地址。 |
方法区 | Method Area | 所有线程共享,存储元数据(Meta)。 |
运行时常量池 | ||
本地方法栈 | 支持对本地方法的调用,每个线程都会创建自己的本地方法栈。 |
对象
对象知识点 | |
---|---|
构造方法 | 构造方法可以重载 |
类没有定义构造方法是,Java会提供一个默认的无参构造方法 ; | |
如果一个类定义了构造方法,Java将不会提供默认构造方法。 | |
构造方法在使用new关键字实例化对象时自动调用。 | |
类的结构 | 变量、方法、构造方法、块、内部类 |
内部类 |
异常
常见异常 | |
---|---|
NullPointerException | 空指针异常 |
ArrayIndexOutOfBoundsException | 索引越界异常 |
数组
数组知识点 | 补充 |
---|---|
长度固定 | 创建时必须指明长度,需要扩容时,只能用新数组代替。 |
数组是引用类型 | 数组本质是一个对象,不是基本数据类型。 |
三种声明方式 | int[] a = new int[5]; |
int[] b=new int[]{1,2,3,4,5,6,7}; | |
int[] c={1,2,3,4}; | |
存储空间连续 | 数组中每个元素空间是连续的。 |
数组下标 | 从0开始,所以数组的最大索引=数组长度-1 |
数组打印 | System.out.println(Arrays.toString(a)); |
Arrays类 | java中提供用于操作数组的工具类,提供排序,二分查找,数组复制… |
访问权限修饰符
修饰符 | 同一个类中 | 同包不同类 | 不同包的子类 | 不同包的无关类 |
---|---|---|---|---|
private | 可用 | |||
缺省 | 可用 | 可用 | ||
protected | 可用 | 可用 | 可用 | |
public | 可用 | 可用 | 可用 | 可用 |
面试常见
final和static对比:
static 知识点 | 介绍 |
---|---|
static代码块 | 当JVM加载类时,static代码块会且只会被执行一次。 |
可用于优化程序性能。 | |
实例代码块在每次创建对象时,都会自动执行。 | |
static方法 | static方法中不能使用this和super关键字。 |
静态内部类 | 静态内部类的创建不需要依赖外部类的创建, |
不能使用外部类的非static成员变量和方法。 | |
静态变量 | 被所有对象共享。 |
访问方式 | 直接使用类名。 |
final 知识点 | 介绍 |
---|---|
final量 | 不可变常量,一旦创建,则不可修改。 |
如果是引用类型的变量,则不能再指向另一个对象。 | |
final方法 | 不能被子类重写(类中的所有private方法,都隐式的被final修饰)。 |
final类 | 不能被继承,其中所有方法也默认被final修饰 |
不能修饰构造方法 | |
使用场景 | 把方法锁定,避免任何继承类修改该方法的含义。 |
提高效率,早期会将final方法转为内嵌调用(已过时)。 |
接口和抽象类对比:
接口知识点 | |
---|---|
抽象类知识点 | |
---|---|