JAVA 知识点整理

泛型

本质 类型参数化,做用就是将类型转换问题从运行时转移到编译期
语法 1 定义在类上 class ClassName<T>{}
2 定义在方法上 <T> void methodName(T t){}
3 通配符 <?> 可限制传入参数,但没法使用 泛型参数 需类型转换
4 上限 <? extends T > 接受 T及任意子类
5 下限 <? super T> 接受 T及任意父类

集合

存放数据的集合,JAVA中实现Collection和Map的都是集合java

clipboard.png

Vector:线程安全,基于动态数组,增加率为100%,ArrayList为50%
ArrayList:基于动态数组,查询快,增删慢。
LinkedList:基于链表,增删快,查询满。算法

PS : Hash散列算法 hash & (length-1) 经过Hash散列算法获取下标,HashCode冲突且equals为false时存入链表。当length为2的N次方时,能够最大程度减少HashCode冲突。数组

HashSet:底层由HashMap实现,容许null,惟一,无序
LinkedHashSet:底层由LinkedHashMap实现(适配器模式),不容许null,惟一,按插入顺序排序
TreeSet:底层由TreeMap实现,不容许null,惟一,按排序规则排序缓存

映射集合(键值对)
HashMap:基于Hash散列算法,键惟一,容许null,无序
LinkedHashMap:继承HashMap,键惟一,不容许null,按插入顺序排序
TreeMap:键惟一,不容许null,按排序规则排序,底层基于红黑树安全

HashTable:线程安全
ConcurrentHashMap:线程安全,锁分离多线程

图片描述

IO

本质 数据传输
分类 数据类型 字节流
字符流
数据流向 输入流
输出流
输入流 字节流 InputStream 字节输入流接口
ByteArrayInputStream 字节数组输入流
FileInputStream 文件输入流
BufferedInputStream 高级流 缓存输入流
字符流 Reader 字符输入流接口
InputStreamReader 转换流 字符输入流 可指定字符集
BufferedReader 高级流 缓存字符输入流
输出流 字节流 outputStream 字节输出流接口
ByteArrayOutputStream 字节数组输出流
FileOutputStream 文件输出流
BufferedOutputStream 高级流 缓存输出流
字符流 Writer 字符输出流接口
OutputStreamWriter 转换流 字符输出流 可指定字符集
BufferedWriter 高级流 缓存字符输出流
PrintWriter 高级流 缓存字符输出流 自动行刷新

多线程

多线程 并发,合理使用能够提升效率,CPU给每一个线程分配时间片(几十ms),线程有建立与上下文切换的开销
线程状态 新建 NEW
就绪 RUNNABLE
运行 RUNNING
阻塞 BLOCKED
死亡 DEAD
建立线程 1 继承Thread
2 实现Runnalbe接口
3 实现Callable接口
线程池 clipboard.png
线程并发 三大特性 原子性
有序性
可见性
同步方案 1 volatile 类型修饰符 保证可见性
2 Synchronized 同步代码块,可修饰方法 代码块
3 ReentrantLock 显示获取/释放锁
线程操做 1 sleep() 使线程进入阻塞,可指定毫秒值,不释放锁
2 wait()/notify()/notifyAll() 等待(阻塞)唤醒(就绪)机制,可指定毫秒值,释放锁
3 yield() 使线程进入就绪,不释放锁
4 join() 当前线程进入阻塞,直到join线程执行结束,进入就绪,释放锁

反射

反射 反射(Reflection)是Java 程序开发语言的特征之一,它容许运行中的 Java 程序获取自身的信息,而且能够操做类或对象的内部属性。
主要功能 1 在运行时判断一个对象所属的类
2 在运行时构造任意一个类的对象
3 在运行时判断任意一个类所具备的成员变量和方法(经过反射甚至能够调用private方法)
4 在运行时调用任意一个对象的方法
语法 注意: 调用私有属性时,需setAccessible(True)跳过java语言访问检查,不然抛出IllegalAccessException
获取Class 1 Class.forName(className)
2 类名.class
3 对象.getClass()
对象 无参构造器 newInstance() 调用无参构造器建立对象并返回
未定义无参构造器时,抛出InstantiationException
获取构造器 1 getConstructor([types]) 获取指定参数类型列表的公有构造器
2 getConstructors() 获取全部公有构造器
3 getDeclaredConstructor([types]) 获取指定参数类型列表的构造器
4 getDeclaredConstructors() 获取全部构造器
调用构造器 构造器对象.newInstance([params]) 建立对象,调用私有构造器时, 请注意
方法 获取方法 1 getMethod(name[,types]) 获取指定方法名,参数类型列表的公有方法
2 getMethonds() 获取全部公有方法,包括继承类的公有方法
3 getDeclaredMethod(name[,types]) 获取指定方法名,参数类型列表的方法,但不包括继承方法
4 getDeclaredMethods() 获取全部方法,但不包括继承方法
调用方法 方法对象.invoke(obj[,params]) 调用指定对象方法,调用私有方法时, 请注意
字段 获取字段 1 getField(name) 获取指定字段名的公有字段
2 getFields() 获取全部公有字段,包括继承类的公有方法
3 getDeclaredField(name) 获取指定字段名的字段,但不包括继承字段
4 getDeclaredFields() 获取全部字段,但不包括继承字段
操做字段 字段对象.set(obj,val) 设置指定对象字段属性
字段对象.get(obj) 获取指定对象字段属性
操做私有字段时,请注意
相关文章
相关标签/搜索