深入类加载机制
深入类加载机制初识类加载过程使用某个类时,如果该类的class文件没有加载到内存时,则系统会通过以下三个步骤来对该类进行初始化 1.类的加载(Load) → 2.类的连接(Link) → 3.类的初始化(Initialize) 类的加载(Load):将类的class文件读入内存,并为之创建一个java.lang.Class的对象,此过程由类加载器(ClassLoader )完成 类的连接(Link):将类中的数据加载到各个内存区域中 类的初始化(Initialize):JVM负责对类进行初始化 深入类加载过程类的完整生命周期 :加载、连接(验证、准备、解析)、初始化、使用、卸载 加载 通过一个类的全限定名来获取其定义的二进制字节流 将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构 在堆中生成一个代表这个类的Class对象,作为方法区中这些数据的访问入口 注意: 相对于类加载过程的其他阶段而言,加载阶段是可控性最强的阶段,因为程序员可以使用系统的类加载器加载,还可以使用自己的类加载器加载,在这里我们只需要知道类加载器的作用就是上面虚拟机需要完成的三件...
回顾
标识符 含义:给类、变量、方法、接口取名字的时候使用到的字符序列 组成:大小写字母 、数字、$、_、中文 注意事项: 不能以数字开头 区分大小写字母 不能使用除了$和_以外的特殊符号 不能使用Java的关键字 考虑到编码问题不要使用中文 关键字 含义:Java给我们提供的具有特殊意义的单词 经验:不用记,后续会逐一学习每个关键字到底是怎么使用的 ps:public(公有的)、static(静态的)、void(无返回值) 变量 含义:在程序执行过程中,可以发生改变的量 基本数据类型 byte(字节型):1字节 short(短整型):2字节 int(整型):4字节 long(长整型):8字节 float(单精度浮点型):4字节 double(双精度浮点型):8字节 char(字符型):2字节 boolean(布尔型):4字节 注意: boolean单独使用时是4个字节,boolean数组中元素是占用1字节 char的数据是使用单引号括起来 取值范围 byte:-128~127 int:-21亿~21亿 char:0~65535 基本数据类型的转换 自动转型...
数据的排序
数组的排序前言排序概念 排序是将一组数据,依据指定的顺序进行排列的过程。 排序是算法中的一部分,也叫排序算法。算法处理数据,而数据的处理最好是要找到他们的规律,这个规律中有很大一部分就是要进行排序,所以需要有排序算法。 常见的排序算法分类 排序分为:内部排序和外部排序。 内部排序:是将需要处理的所有数据加载到内存中进行排序; 外部排序:当数据量过大,无法全部加载到内存中,需要借助外部存储(文件、磁盘等)进行排序。 交换排序(冒泡排序、快速排序) 选择排序(选择排序、堆排序) 插入排序(插入排序、希尔排序) 归并排序 桶排序、 计数排序、基数排序 算法稳定性 假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面,则这个排序算法是稳定的。 如何分析算法分析算法的执行效率 最好、最坏、平均情况时间复杂度。 时间复杂度的系数、常数和低阶。 比较次数,交换(或移动)次数。 分析排序算法的稳定性 概念:如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。 稳定性重...
Iterator底层源码
123456public abstract class AbstractList<E>{ //外部操作数 //添加元素、删除元素时会++,因为添加、删除会导致集合中的元素个数发生改变 protected transient int modCount = 0;//4} 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103public class ArrayList<E> extends AbstractList<E> implements List<E>{ //数据容器 transient Object[] ele...
ArrayList底层源码
12345public abstract class AbstractList<E> extends AbstractCollection<E>implements List<E>{ //外部操作数:记录了数据量变化的次数 //对于数据的更新(添加、删除、清空),modCount就会++ protected transient int modCount = 0;// 2} 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485public class ArrayList<E> extends AbstractList<E> implements List<E>{ //默认容量 priv...
LinkList底层源码
123456public abstract class AbstractList<E> extendsAbstractCollection<E>implements List<E> { //外部操作数 protected transient int modCount = 0;//0}public abstract class AbstractSequentialList<E> extends AbstractList<E> {} 12345678910111213141516171819202122232425262728293031323334353637383940414243public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>{ //元素个数 transient int size = 0;//0 //第一个...
Stack底层源码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748public class Vector<E> extends AbstractList<E> implements List<E>{ protected Object[] elementData;//new Object[10]{"杨勇1","杨勇2","杨勇3".....} protected int elementCount;//3 public synchronized void addElement(E obj) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount++] = obj; ...
TreeMap底层源码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>{ //外置比较器 private final Comparator<? super K> comparator; //根节点 private transient Entry<K,V> root;//null //元素个数 private transient int size = 0;...
集合
集合含义 集合是Java API所提供的一系列类,可以用于动态存放多个对象 (集合只能存对象) 集合与数组的不同在于,集合是大小可变的序列,而且元素类型可以不受限定,只要是引用类型。(集合中不能放基本数据类型,但可以放基本数据类型的包装类) 集合类全部支持泛型,是一种数据安全的用法。 集合与数组的不同 数组:一旦初始化后长度不可变,元素类型受限定(String类型的数组只能装String的数据),数组可以存储基本数据类型 集合:长度可变的序列,元素类型不受限定(一个集合可以存储多个数据类型的元素),集合只能存储引用数据类型 Collection家族List接口 特点:有序且可重复(因为List接口中添加了许多针对下标操作的方法) 实现类: ArrayList LinkedList Vector Stack Set接口 特点:无序且不可重复 实现类: HashSet LinkedHashSet TreeSet Map家族 实现类: HashMap LinkedHashMap Hashtable ConcurrentHashMap TreeMap Propert...
TreeSet底层源码
123456789101112131415161718192021222324252627public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>{ //外置比较器 private final Comparator<? super K> comparator; public TreeMap() { comparator = null; } public TreeMap(Comparator<? super K> comparator) { this.comparator = comparator; } //key - new Student("麻生希", '女', 25, "2301", "001")...