面向对象的三大特性(详解)
- 封装(对象的封装和权限的封装)
- 继承
- 多态(补充:向上转型、向下转型)
基本数据类型与常量池(详解)
- 基本数据类型的大小
- 自动装箱、自动拆箱、基本数据类型的常量池、Integer.valueOf()
- 基本数据类型和包装类型在JVM中的存储位置
- String类的intern()
String类及其源码(详解)
- String的拼接和对比(地址和值)
- String类的intern()
- String类的equals()
- StringBuilder和StringBuffer(父类、底层的存储、相关方法及其安全性、扩容)
- String为何不可变?好处?
final关键字(详解)
- 修饰类、方法、变量
抽象类和接口(详解)
- 事物、动做
- 类、变量、方法的修饰符
- 证实抽象类能够被实例化
- JDK1.8中的接口变化
代码块及其执行顺序(详解)
- 局部代码块、构造代码块、静态代码块
内部类(详解)
- 外部类、内部类
- Java中类的加载过程(详解)
- 成员内部类、局部内部类、静态内部类、匿名内部类
Java的类和包(详解)
- .java文件
- main方法
- 外部类的访问权限
- Java包的命名规则
- import
模块间的调用浅析(详解)
Java中的异常(详解)
- 异常类的继承关系、根据编译把异常分类
- 异常的两种处理方式
- 异常调用链、异常链化
- 自定义异常及其构造函数
- 异常的注意事项:子类重写父类的throws方法、异常是线程独立的
- finally中的return(覆盖try/catch中的return)、finally中的异常(覆盖try/catch中的throw exception)
Java泛型详解(详解)
- 泛型概念、特色
- 泛型的三种使用方式
- 泛型通配符
- 泛型方法的声明
- 泛型方法与可变参数
- 静态方法能够使用泛型
- 指定泛型上下边界(?extends、super)
- 定义泛型数组
Class类和Object类(详解)
- Class类的概念、做用
- 得到Class类对象的三种方式
- Object类中的方法:clone()、getClass()、equals()、hashCode()、wait()、notify()、notifyAll()
- clone()、浅拷贝-cloneable接口、深拷贝-重写clone()
- wait()、notify()的做用
反射详解(详解)
- 反射的概念、最重要的用途
- 反射的基础:Class类
- 判断是否为某个类的实例:instanceof关键字、Class类的isInstance()方法
- 用Class对象建立对象:直接newInstance()、Constructor对象->newInstance()
- 用Class对象获取类的方法集合:getDeclaredMethods(),调用方法:method.invoke(实例对象,参数)
- 用Class对象获取类的构造器集合:getDeclaredConstructors()
- 用Class对象获取类的成员变量:getFiled()等
- 利用反射建立数组:Array.newInstance(Class对象, length)
离开IDE,使用javac和java构建项目(详解)
Java枚举类(详解)
- 枚举类的父类、适用场合
- 枚举类的使用:存放常量、switch、添加方法、使用接口组织枚举类(分类)
- 枚举类的集合:EnumSet、EnumMap
- ......
Java多线程基础总结(详解)
- 进程和线程的概念、五种状态、建立线程的三种方式
- Java线程内存模型:哪些私有、哪些共享
- 线程的优先级:getPriority ()
- 线程的控制方法:interrupt()、 isInterrupted()、join()
- Thread类的静态方法:Thread.currentThread()、Thread.interrupted()、Thread.sleep(long msecs)、Thread.yield()
- 线程组的概念、getThreadGroup
- 多线程的实现(代码、线程池)
- 线程的状态转换代码
Java IO流总结(详解)
- IO流有哪些数据源
- IO流的分类:字符流(以字符数组读写)、字节流(以字节数组读写)
- 字符流和字节流的类结构
- 整合Reader和InputStream:new InputStreamReader(InputStream)(能够指定读取的编码格式,解决乱码问题)
- 整合Writer和OutputStream:new OutputStreamWriter(OutputStream)(能够指定读取的编码格式,解决乱码问题)
- IO管道:使用pipedInputStream和pipedOutputStream实现线程间的通讯(传输字节流)
- 字符流和字节流读入与写出数组:CharArrayReader、ByteArrayInputStream
Java序列化与反序列化(详解)
- 序列化、反序列化的概念
- 类实现序列化须要实现Serializable接口(接口中是空的,但ObjectOutputStream类的writeObject()方法会断定是不是Enum、Array、Serializable类型)
- 序列化ID:private static final long serialVersionUID = 1L
- 序列化没法保存静态变量
- ArrayList实现了Serializable,重写了read/writeObject()方法实现自定义序列化
- 没有重写read/writeObject(),默认使用ObjectOutputStream和ObjectInputStream的方法对对象进行序列化及反序列化
- 总结
Java集合框架梳理(详解)
- 集合框架结构图
- List接口(有序重复,容许多个null):ArrayList(非线程安全的动态数组)、LinkedList(双向链表、非线程安全、双端队列)、Vector(线程安全的动态数组、与ArrayList类似)、Stack(继承了Vector)
- Set接口(无序不重复,只容许一个null):EnumSet(枚举专用)、HashSet(查询速度最快的集合)、TreeSet
- Map接口:HashMap(快速查询)、HashTable(性能比HashMap低)、TreeMap(有序、红黑树实现)、Properties、EnumMap
- 哈希表(定义)和哈希码(定义)、哈希值(定义)
- Queue接口:分为阻塞式队列(主要有ArrayBlockQueue、PriorityBlockingQueue、LinkedBlockingQueue)、双端队列(主要有ArrayDeque、LinkedBlockingDeque、LinkedList)(补充)
- 全部集合类详解:http://calvin1978.blogcn.com/articles/collection.html
Java8新特性(详解、菜鸟)
- Lanbda表达式:归纳地说,就是能够将一个方法传到接口中。(函数式接口就是只有一个抽象方法的接口)
- 接口的默认方法
- ......
Java集合详解1:ArrayList、Vector、Stack(详解)
- ArrayList(实现的接口、操做、原理、安全......)
- Vector
- Stack
Java集合详解2:LinkedList、Queue(详解)
- LinkedList
- Queue【Deque(ArrayDequ--数组实现的队列)、AbstractQueue(PriorityQueue--数组实现的优先队列)】
Java集合详解3:Iterator、fail-fast机制、比较器(详解)
- Iterator
- fail-fast机制(快速失败机制)的概念、产生缘由、用途、解决办法 (改变Collection集合的结构是指添加删除元素,不是修改元素值)
- 集合排序:Comparable天然排序(注意重写方法)和Comparator定制排序的使用。
- ......
Java集合详解4:HashMap、HashTable(详解)
- HashMap(数据结构、put、key到哈希码到哈希值的过程、length为2的n次方(oldCap左移一位)、扩容使用for循环、)
- HashTable(length为2n+1)
- HashMap和HashTable区别:父类、null、同步
Java集合详解5:LinkedHashMap、LRU(详解)
- LinkedHashMap:数据结构(在HashMap基础上加入双向链表、header和accessOrder属性、entry添加了属性、非同步、LRU算法)
- HashMap无序,LinkedHashMap有两种顺序:插入顺序(entry.next实现,false)和访问顺序(entry.before/after实现,true),经过accessOrder控制。
- LRU算法基于LinkedHashMap的按访问顺序排序的特色、LRU算法的实现(继承,重写removeEldestEntry())
- ......
Java集合详解6:TreeMap、红黑树(详解、平衡二叉树)
- 二叉树、二叉查找树(生成二叉查找树时,为了不失衡,就有了这些平衡二叉树(AVL树、红黑树...))、红黑树
- TreeMap(特色、插入和旋转操做、删除和移除操做)(有序、非线程安全)
- 太难了
Java集合详解7:HashSet、LinkedHashSet、TreeSet(详解)
- HashSet基于HashMap(用key保存元素)
- LinkedHashSet基于LinkedHashMap,但只能维护插入排序(用key保存元素)
- TreeSet基于TreeMap,非线程安全,(用key保存元素)(TreeSet中含有一个NavigableMap类型的成员变量m,而m其实是TreeMap的实例)
Java集合详解8:细节精讲(详解)
- ArrayList的合理使用
- 基本数据类型没法泛型化、Arrays.asList(T ...a)
- list.subList(),subMap()、subSet()
- compareTo()、equals()、indexOf()、Collections.binarySearch()
Java集合详解:总结(详解)
Java设计模式1:建立型模式(详解、补充)
主要是对象的建立。html
- 简单工厂模式(一个工厂类根据传入的参数,动态地决定建立哪一个对象)
- 工厂模式(也叫工厂方法模式)(一个子工厂对应生产一类对象)
- 抽象工厂模式(一个子工厂里生产的对象都是兼容的,这些对象组成新的对象)
- 单例模式:
饿汉模式(一开始就建立对象)、
懒汉模式(单线程,用到的时候才生产对象)、
饱汉模式(又叫双重检查,用到的时候才生产对象,多线程)、
静态内部类(最经典) - 建造者模式(建立对象的时候方便地设置属性)
- 原型模式(用到对象的时候将原对象浅拷贝一份)
Java设计模式2:结构型模式(详解、补充)
主要是对象的结构设计。java
- 代理模式【(动态代理,cglib代理)(将被代理对象加一层包装)】(进行方法加强)
- 适配器模式:
默认适配器模式【牛奶适配器实现咖啡接口,全部方法都重写为空方法,适配器子类就舒服了】;
对象适配器模式【牛奶适配器继承咖啡类,构造方法注入牛奶类对象,方法重写,牛奶适配成咖啡】;
类适配器模式【牛奶适配器继承牛奶类,实现咖啡接口,方法重写,牛奶适配器变成咖啡类】(进行对象间的适配) - 桥梁模式【画笔(接口)有多个颜色(实现类),图形(接口)有多个形状(实现类),画出不一样颜色的不一样形状,依靠桥梁(图形里注入画笔对象,画笔就是桥梁)】
- 装饰器模式【饮料(抽象类)有红茶(实现类)、绿茶、咖啡,调料(抽象类)有柠檬(装饰器,实现类)、珍珠、芒果,调制不一样口味的饮料】(加强类)、【JavaIO流的装饰器,例如DataInputStream dataInputStream = new DataInputStream(new BufferedInputStream(new FileInputStream("")))】
- 外观模式(也叫门面模式)【图形有圆、矩形、正方形(含画图方法),常规写法是先建立某种图形再去调用图形的画图方法。而外观模式是,外观类里建立了对象圆、矩形、正方形,定义了各个图形的画图方法,改进写法是能够使用外观对象直接画出各个图形,而不须要画哪一个图去new哪一个对象】
- 组合模式【员工有姓名、电话等属性,同时还有手下的员工集合,这些员工也有姓名电话下属集合。每一个员工属性都是相同的,员工集合用List<Employee>(这就是组合模式)表示】
- 享元模式(复用已经生成的对象)
Java设计模式3:行为型模式(详解、补充)
- 策略模式【画笔(接口)有不一样的颜色(实现类),如今要使用不一样颜色的画笔去画图,定义一个策略类,注入画笔对象,策略类的对象就能够画图了。相似于桥梁模式】
- 观察者模式【观察者对象在构造的时候注入主题对象,二者产生链接。实际开发中使用消息中间件来实现观察者模式】
- 责任链模式【定义一个链表,而后在经过任意一节点后,若是此节点有后继节点,那么传递下去,例如用户参加活动得到奖品,须要先通过规则检测:仅限新用户参加、只能某个地区的用户参加、人数上限等,这些规则就是链表的节点】
- 模板方法模式【模板方法只负责定义第一步应该要作什么,第二步应该作什么,第三步应该作什么,至于怎么作,由子类来实现。】
- 状态模式