JavaSE

基础

变量:程序执行过程中可变的量(存储单个数据的容器)

标识符:给类、接口、方法、变量取名字时使用到的字符序列

组成部分:数字、大小写字母、$、_、中文

注意:

  1. 区分大小写
  2. 不能使用数组开头
  3. 不能使用除了$和_以外的符号
  4. 不能使用关键字
  5. 不要使用中文

关键字:Java提供的具有特殊意义的单词

基本数据类型描述占用空间
byte字节型1字节
short短整型2字节
int整型4字节
long长整型8字节
float单精度浮点型4字节
double双精度浮点型8字节
char字符型2字节
boolean布尔型4字节

注意:boolean底层使用int去存储,boolean的数组的元素使用byte类型去存储

运算符符号
算数运算符+、-、*、/、%、++、–
赋值运算符=、+=、-=、*=、/=、%=
关系运算符==、!=、>、>=、<、<=
逻辑运算符&、&&、|、||、^、!
三目运算符变量 = (表达式)?值1:值2;
位运算符&、|、^、<<、>>、>>>
字符串拼接符+

经验:灵活运用小括号

执行语句

  1. 顺序语句:方法里的代码从上往下执行

  2. 分支语句(if、switch)

    1. 表达式的区别

      if:boolean

      switch:byte、short、int、char、枚举、字符串,底层只认int

    2. 应用场景的区别

      if:判断区间和复杂的条件

      switch:判断单个值

  3. 循环语句(for、while、do-while)

    1. 表达式的区别

      for(初始化变量;判断条件;更新变量){}

      while(判断条件){}

      do{}while(判断条件);

      相同点:判断条件必须是boolean,true-循环,false-跳出循环

    2. 执行顺序的区别

      for:先判断,再执行

      while:先判断,再执行

      do-while:先执行一遍,再判断

    3. 应用场景的区别

      for:循环次数确定

      while:循环次数不确定,先判断再执行

      do-while:循环次数不确定,先执行一遍再判断

  4. 特殊的流程控制语句(break、continue、return、lable)

    break:作用于循环中,表示跳出当前循环

    continue:作用于循环中,表示跳过循环体剩余的部分,进入到下一次循环

    return:作用于方法中,表示结束当前方法,也可以返回数据

    lable:给循环做标记

数组

分类:一维数组、二维数组、三维数组

概念:

  1. 一组数据的容器
  2. 元素:数组中的数据
  3. 下标/索引:元素的编号(从0开始)
  4. 可以通过下标对元素进行设置或获取
  5. 遍历数组使用for或foreach

数组的排序:(冒泡、选择、插入、希尔、桶、计数、基数….)

数组的查找:(线性、二分法、插值、黄金分割)

数组的复制、扩容、删除 – 代码实现及内存分析

可变参数

面向对象

类 - 对象的概念

类中内容:属性、方法

1
2
3
4
5
6
7
public class 类{
//属性 - 全局变量
//分类:成员属性、静态属性、常量属性

//方法 - 全局方法
//分类:成员方法、静态方法、抽象方法、同步方法
}

成员变量 vs 局部变量

成员变量 vs 静态变量

成员方法 vs 静态方法

构造方法

概念:

作用:

封装

概念:

步骤:

this

概念:本对象,哪个对象去调用成员方法,方法中的this就表示哪个对象

作用:

static - 静态的

作用:

​ 修饰属性 - 类属性:

​ 修饰方法 - 类方法:

​ 修饰代码块 - 静态代码块:

继承

概念:子类继承父类所有的属性和方法

面试题:

super

概念:

作用:

重写

概念:在子类中将父类的方法重新写一遍

应用场景:当父类方法不满足子类需求时就考虑在子类中重写

条件:

  1. 在子类中重写父类的方法
  2. 返回值、方法名、参数列表必须一致
  3. 访问修饰符不能比父类的更加严格

重载

概念:方法与方法之间的关系

应用场景:编写多个方法,方法功能大致一致,细节实现不一致,就考虑使用重载

条件:

  1. 在同一个类中
  2. 方法名一致
  3. 参数列表的个数或类型不一致
  4. 与返回值无关

访问修饰符

含义:修饰类、方法、属性定义使用的范围

学习:做实验

访问修饰符本类本包其他包子类其他包
privateOK
默认的OKOK
protectedOKOKOK
publicOkOKOKOk

Object

含义:

常用方法:

标杆作用

final

含义:

作用:

抽闲类及抽象方法

接口

多态

对象转型

内部类

常用类

  1. 包装类(出现原因、底层原理)
  2. 字符串(String、StringBuilder、StringBuffer、底层原理)
  3. 正则表达式
  4. Math(静态导入)
  5. Random(种子数)
  6. 大数值的运算类
  7. 枚举 – 底层

集合

Collection vs Map

List vs Set

ArrayList:一维数组

LinkedList:双向链表

Vector:一维数组 + 线程安全

Stack extends Vector :栈模式

HashSet:底层由HashMap实现

LinkedHashSet:底层由LinkedHashMap实现

TreeSet:底层由TreeMap实现

HashMap:一维数组 + 单向链表 + 红黑树(JDK1.8)

LinkedHashMap extends HashMap

Hashtable:一维数组 + 单向链表 + 线程安全

ConcurrentHashMap:一维数组 + 单向链表 + 线程安全

Properties:配置文件类

Collections:集合的工具类

内置比较器 vs 外置比较器

理解每个集合的底层原理

多线程

线程的创建方式和基本使用

线程的生命周期

线程安全的方式

卖票的案例

生产者消费者模型

仓储模型

线程池及自定义线程池 – 底层

带有返回值的任务类

IO流

字节流

字符流

对象类

打印流及重定向

内存流 – 关闭不掉的

随机访问流 – 断点续传

网络编程

TCP/IP:三次握手和四次挥手

UDP:发送数据报包

HTTP:理解请求和响应

注解

预定义注解

元注解

自定义注解

反射

获取Class对象 – 3种方式

操作类中的属性、构造方法、方法、参数、返回值、泛型、数组、注解

反射案例

JDK1.8

  1. Lambda
  2. 函数式接口 - @FunctionInterface
  3. 方法、构造方法、数组的引用
  4. Stream
  5. 日期时间组件

学习步骤

  1. 理解概念
  2. 学会使用
  3. 分析底层原理

经验:JavaSE重点关注 – 面向对象、集合、多线程、反射、JDK1.8新特性