基础部分:
基础语法
-
标识符
-
常量与变量
通过final关键词修饰变量,变量赋值后,不能再修改
Java平台无需显式的管理内存中的对象,当JRE确定对象不再被使用时将自动销毁该对象释放内存空间,这个过程,称为垃圾回收
当变量超出作用范围,变量引用会被删除,一个没有任何引用的对象将被垃圾回收器回收
可以通过置变量引用为null,来显式的声明删除对对象的引用,但仅是声明,并不会立即释放内存
同一对象可能有多个引用
垃圾回收器会在合适的时间,自动的,周期性的,释放没有引用对象占用的内存(基于CPU、内存使用情况分析) -
数据类型
布尔型值具体内存占用由具体虚拟机决定
oracle 1字节8位 openjdk 4字节 = int
代码中,显式的固定的数据值,为字面量long长整型数值。长整型必须以“L”大写字母L为后缀,避免与“1”数字1混淆
byte b = 4; //byte b2 =128; //提示类型不匹配 short s = 5; //short s2 = 32768; //提示类型不匹配
值传递:
所有基本类型变量不与其他变量共享值,基本数据类型为值传递,而非引用传递。因此当被"引用"的值改变时,不会影响"引用"其值的变量
String类型变量虽然为对象,但依然为值传递
即,8+1类型变量,均为值传递转换:
基本数字类型之间可以转换
-
小转大 可以直接转换(int to double)
-
大转小 必须声明强制转换(double to int) 向小范围转换时,可能造成数据错误或丢失
-
-
运算符
当判断8个基本数据类型的关系时,使用等式与关系运算符;返回布尔类型结果
&&
||
具有短路性
优先级表:
-
流程控制语句
-
if-then, if-then-else, switch
if(表达式) { //then代码块 } else { //else代码块 }
Switch支持整数/枚举/字符串作为表达式;当匹配case中表达式时,执行相应代码块;并顺次执行之后的全部case分支直到break语句。当均不匹配时执行default
-
for, while, do-while
-
break, continue, return
-
-
方法
组成:修饰符、方法返回类型、方法参数列表、方法体
类中不能存在方法签名相同的方法,方法签名是类中一个方法区别于另一个的特征
方法签名:方法名称,方法参数列表(方法参数数量,相应位置的参数类型)决定;与方法的各种修饰符,返回类型,参数名称等无关
-
Parameter 方法声明定义中的参数(形参)
-
Argument 方法被调用时实际传入的参数(实参)
tips:8+1类型是传递值
方法重载,
允许具有相同名称,但不同参数列表的,方法存在。解决了方法功能相同,但必须使用不同命名的缺陷
this,
表示当前对象的引用;可以通过this,在实例方法或构造函数中引用当前对象的成员变量
所有实例方法,都隐式包含一个引用当前对象的变量,名称为this。当方法引用类的实例变量时,编译器隐式的使用this获取当前对象的实例变量(编译器自动传入this对象引用)
-
-
数组
-
数组是按顺序存放单一类型,长度固定,的容器对象
-
数组中的每一个项,称为元素
-
数组一旦创建,就不能更改长度,即,如需增/删数组元素而改变数组长度,必须创建一个新数组
-
通过[index]索引访问数组元素
-
通过length成员常量****(而非方法),获取数组长度
//静态创建 int[] intArray2 = {10,20,30}; int[] intArray2 = new int[]{10,20,30}; //动态创建 int[] a = new int[100]; for(int i = 0;i<a.length;i++){ a[i] = i; }
-
-
注解
声明文档注释:使用时可查看注释信息
/** documentation * 文档注释,可生成API文档 */
关键字:
面向对象:
-
面向对象思想
-
类与对象
创建一个对象的基本过程:
-
声明
Bicyle bicycle
声明一个名称为bicycle,引用Bicycle类型对象的变量。仅声明了一个可以引用指定类型对象的变量,声明并不会创建一个对象,必须为其分配一个对象引用才能使用
-
实例化
Bicycle bicycle = new
new操作符通过为新对象分配内存,并返回该内存的引用来实例化一个类
-
初始化
Bicycle bicycle = new Bicycle(5)
new操作符同时,调用构造函数完成对象的初始化,并把初始化数据写入内存
-
-
成员变量与局部变量 与静态
创建对象时,在堆空间为对象开辟空间,保存属性数据。因此,类的每一个对象拥有独立内存空间以及属性数据
类中,static修饰的变量,称为静态变量或类变量
类的静态变量置于方法区,而非堆空间
即,其与所在类相关,但不与类的任何对象相关
即,其不基于类的对象而存在
类的私有静态变量/常量,类的每一个对象均可访问
类的公有静态变量/常量,全局可访问-
类中,实例级方法单向访问方法静态方法/变量/常量
-
类中,静态方法无法访问实例级方法/变量/this等
静态代码块仅在所在类被加载时执行,且仅执行一次,无论类实例化次数
优先执行静态代码块,静态代码块中的变量是局部变量
-
-
匿名对象
-
封装
- 基于封装思想,实体类中封装的属性数据,通过对外提供,访问器(getter/setter)实现
-
this关键字
-
构造方法
-
继承
-
多态
-
抽象类
-
接口
-
内部类
集合:
高级知识
-
线程
-
锁
-
JDK
-
反射
-
JVM
jvm结构:
Stack(栈):创建线程的同时,创建该线程的栈空间,存储执行方法的局部变量表(包括:基本数据类型字面量,以及对象的引用);操作栈(调用方法的引用)等
Heap(堆):存储创建的对象实例,GC主要工作的地方
Method Area(方法区):线程共享的,存储每一个类的结构信息(包括:类中的属性/方法等元数据),常量池,静态变量/常量,方法/构造函数的执行代码等
-
GC
-
IO和NIO、AIO
版本特性
Java 8
- 函数式编程
- Lambda表达式
- 接口的默认方法(默认方法 在接口中有具体的实现 default
在接口中方法前面加上修饰符default 编译器会认为 该方法并非抽象方法 可以在接口中写实现 - 集合Stream API
- 新的Time API
- 多重注解
- Optional空引用处理
Java 9 & 10 & 11
- JShell互交式编程
- 增强集合stream API
- 增强集合工厂方法
- 增强Optional方法
- 编译器类型推导变量
- 新字符串加强处理方法
- 接口私有成员变量
- No-Op垃圾回收器
- …………………
梗概
变量 | 变量的声明,命名规范 |
---|---|
基本数据类型 | 8 + 1基本数据类型,默认值,范围,大小等 |
整数类型 | 基本整数类型,long类型后缀 |
转义符 | 特殊含义字符输出的处理 |
常量 | 常量的声明,命名规范 |
数组 | 数组的类型,,创建方法,索引,长度,引用传递 |
字面量 | 基本类型的字面量,值传递与引用传递 |
变量的作用范围 | 域,实例变量,类变量,类常量,局部变量,参数,默认值 |
算术运算符 | 取模,字符串拼接 |
等式与关系运算符 | 基本类型使用 == 判断值是否相等 |
条件运算符 | 布尔表达式执行条件,短路特性 |
运算符优先级 | 建议使用()括号强调有限顺序 |
基本数据类型转换 | 大范围到小范围的强制转换 |
注释 | 单行,多行,文档 |
If then else | 表达式值与执行的代码块 |
switch | 支持的类型,支持字符串,固定项,break,适应场景 |
While | 表达式 |
For | 声明方法,循环的过程 |
foreach | 适应场景,优缺点 |
Break | 终止的范围 |
Return | 方法的退出,有/无返回值的声明 |
Classes and Objects Summary
---- | Content |
---|---|
类 | 面向对象中的类;声明,命名规范;单继承 |
属性 | 命名规范;提供getter/setter方法,及方法的命名规范;Boolean类型属性getter方法命名 |
方法 | 方法的名称规范;声明;参数列表;方法签名;方法重载;返回值; |
构造函数 | 声明;有参/无参;约束; |
参数 | 形参/实参;可变长度的参数;命名规范;值传递/引用传递; |
对象 | 对象的基本创建过程;使用方法;this关键词 |
垃圾回收器 | Java平台处理对象的特点;对象资源释放的时机与时间 |
访问级别修饰符 | 顶级/成员级修饰符;修饰目标的可见范围; |
静态变量 | 声明;使用场景;特点;与类实例的关系;使用方法;命名 |
静态方法 | 声明;使用场景;特点;与类实例变量/方法的关系; |
常量 | 基本类型与引用类型常量各种的特点;命名; |
静态块 | 作用;加载;执行顺序 |
静态内部类 | 声明创建方法;作用;使用场景 |
枚举 | 声明;使用场景 |