目录
Java串讲. 1
1 基础语法. 1
2 面向对象. 1
3 基础API 1
4 集合. 1
5 io 1
6 线程. 1
7 网络. 1
8 反射. 1
9 JVM调优. 1
Java串讲
1 基础语法
l 八大基本类型
int long short byte boolean float char double
l 流程控制
Java有两种分支结构:
- if语句
- switch语句
Java中有三种主要的循环结构:
- while循环
- do…while循环
- for循环
l 数组
list
hashMap、hashset、hashtable
Hashtable是同步的,而HashMap不是
l 变量、方法
2 面向对象
l 什么是面向对象
n 封装、继承、多态
l 封装
n 类
n 对象
n 引用
n 构造方法
n this
n 方法重载
n 隐藏
l 继承
n 作用
u 代码重用、复用
n 子类对象
u 由父类对象和子类对象绑定,整体作为一个对象
u 调用成员,先找子类,再找父类
n 方法重写
n super
u super.xxx()
u super()
l 默认 super()
l 手动 super(...)
l 多态
n 作用:一致的类型
n 向上转型、向下转型
n instanceof
u 对真实类型和父类型,都返回true
n s.getClass() == Soldier.class
l 抽象类,半成品
l static
n 静态属于类
n static {
静态初始化块
}
l final
n 常量、方法、类
l 访问控制符
n public,protected,[default],private
l 对象的创建过程(10步)
l 接口
n 作用:结构设计工具,解耦合、隔离实现
n interface
n implements
l 内部类
n 匿名内部类
3 基础API
l Object
n toString()
n equals()
n hashCode()
n wait()
n notify()
n notifyAll()
l String
n 常量池
n 不可变,连接销率低
s1 = "aaa"
s2 = "bbb"
s3 = "ccc"
s4 = s1+s2+s3
u 加号连接运算过程:
l StringBuffer sb = new StrinBuffer(s1);
sb.append(s2);
sb.toString();
s5 = "aaa"+"bbb"+"ccc"
编译优化:
s5 = "aaabbbccc"
l StringBuilder/StringBuffer
n append() 代替字符串做高效率连接
n StringBuilder 线程不安全,效率高
n StringBuffer 线程安全
l 正则表达式
l 基本类型的包装类
n Integer.valueOf(5)
有256个缓存对象,范围 -128到127,
范围内的值,访问缓存对象,范围外的值,新建
l BigDecimal/BigInteger
n 精确浮点数运算、超大整数运算
n BigDecimal.valueOf(2)
n setScale() 舍入运算
l Date
l SimpleDateFormat
4 集合
l ArrayList
n 内部是数组
n 访问效率高
n 增删数据,效率可能降低
n 数组 1.5 倍增长
l LinkedList
n 双向链表
n 两端效率高
n 如果只在两端操作数据,用LinkedList
n 数据量小时,频繁增删数据用 LinkedList
l HashMap
n 哈希表
n 键:
u 不重复
u 无序
u 必须重写hashCode()和equals()
n 哈希运算过程
u 用键的哈希值计算下标 i
u 新建Entry对象放入 i 位置
l 空位置,直接放入
l 有数据,依次用equals()比较是否相等
n 有相等的,覆盖值
n 没有相等的,链表连接在一起
l 负载率、加载因子到 0.75
n 新建翻倍长度的新数组
n 所有数据,重新执行哈希运算,放入新数组
l jdk1.8
n 链表长度到8,转成红黑树
n 红黑树数据减少到6,转回成链表
l HashSet、TreeSet
n 不重复
n 内部封装HashMap、TreeMap,数据保存在“键”这一列
l LinkedHashMap
n 哈希表
n 存放数据,以链表来连接
n 有序的HashMap
l ConcurrentHashSet
l ConcurrentHashMap
n 把数据分段加锁
5 io
l File
l InputStream/OutputStream
l FileIn...
l BufferedIn...
l ObjectIn...
l Reader/Writer
l InputStreamReader/OutputStreamWriter
l BufferedReader, readLine()
l PrintWriter,PrintStream
6 线程
l 创建
n 继承Thread
n 实现Runnable
n 线程池
n Callable/Future
l 方法
n Thread.sleep()
n join()
n interrupt()
n ...
l 生产者、消费者
n 线程、进程间通信模型
l 等待、通知
n 必须在synchronized 代码内执行
n 等待通知的对象,必须是加锁的对象
l 线程池
n ExecutorService/Executors
l ThreadLocal
n 线程数据绑定
n set()
n get()
n remove()
7 网络
l ServerSocket
l Socket
8 反射
l 获取类对象
n A.class
n a.getClass()
n Class.forName("xxxx.A")
l 创建实例
n c.newInstance()
9 JVM调优
l 垃圾回收器调优
l 垃圾
n 从根对象出发,所有被引用的对象,都是存活对象
n 其他对象,都是垃圾
n 根对象:
u 栈中的引用变量、方法区的静态变量所引用的对象
l 复制
n 有点:效率高
n 缺点:浪费内存
l 标记清除
n 有点:效率高、节省内存
n 缺点:产生碎片
l 标记整理
n 优点:没有碎片
n 缺点:效率低
l 内存的分代
n 新生代
n 老年代
n 永久代(方法区)
l 新生代
n 伊甸园
n 生存区
u from
u to
n 新建的对象,在伊甸园分配内存
n 伊甸园存满,向from复制
n from存满,向to复制,并交换角色
n 年龄增长到 15,晋升到老年代
l 老年代垃圾回收
n 标记清除、标记整理
l 垃圾回收器 CMS 和 G1
l CMS 垃圾回收器
n 并发的标记整理
n 引起的 STW 时间更短
u STW - Stop The World
u 执行垃圾回收时,暂停所有Java程序的执行
n CMS执行过程
u 初始标记(STW)
只标记根对象
u 并发标记
u 重新标记(STW)
u 并发清理
n CMS优化参数非常多
u 每个内存区的大小,都可以详细配置
n 百度 “CMS调优参数”
l G1 垃圾回收器
n Garbage First
n 颠覆了传统的分代内存划分
n 优先回收垃圾最多的内存区域
n G1 目标使用来替代 CMS 垃圾回收器
n 优化简单
u 只需要设置一个STW的目标时长,G1自动调整其他参数,来实现这个目标