java基础
文章平均质量分 74
万水千山走过
小白终有一天会变成小黑的。
展开
-
HashMap
底层实现原理: HashMap基于哈希表的Map接口的非同步实现,继承自AbstractMap,AbstractMap是部分实现Map接口的抽象类。 JDK1.8之前: 链地址法 数组+链表 (每一行后面跟了一个链表) 链表为null或者不为null JDK1.8之后: 数组+链表+红黑树 当链表的阀值超过8,将链表转换为红黑树,从而减少了查询时间从O(N)->O(log2N)。极大的提高了查询性能。源码分析:类的继承体系:代码:public class原创 2021-02-17 18:17:08 · 414 阅读 · 0 评论 -
线程和进程
概念进程:就是计算机正在进行的一个独立的应用程序,进程是一个动态的概念,必须是进行状态,如果一个应用程序没有启动,那就不是一个进程。进程是程序执行过程中资源分配和管理的基本单位进程拥有自己的独立的地址空间,每启动一个进程,系统就会分配地址空间进程可以拥有多个线程。线程:线程就是组成进程的基本单位,可以完成特定的功能,一个进程是有多个线程组成。线程是cpu执行的最小单位。各个线程之间共享程序的内存空间线程的创建继承Thread类实现Runnable接口实现Callable原创 2021-02-16 22:06:07 · 92 阅读 · 0 评论 -
volatile关键字
作用:保证并发编程的可见性、有序性。特征:保证了内存可见性volatile修饰的变量(本地内存:java虚拟机栈/寄存器)不会被缓存在寄存器,变量在本地内存(虚拟机栈线程私有的空间),一旦变量修改会立即回写至主内存,每一个线程访问主内存上的数据是最新的变量结果,如果已经有线程存在本地副本,即在回写时有效标志位会失效,从而使存储副本的线程能够进入主内存获取最新数据。禁止指令重排序 Java内存模型不会对volatile指令进行重排序,从而保证对volatile变量的执行顺序,原创 2021-02-16 20:53:29 · 76 阅读 · 0 评论 -
synchronized关键字
定义:它是解决的是多个线程之间访问同一个资源的同步性,它可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。简而言之,它提供的是一种排它的机制,任意时刻只能被一个线程所执行。用法:Synchronized添加到代码块 //修饰代码块 public void test1(Object o) { synchronized (o) { //doing } }synchronized如果锁的是某一个obj的对象,实原创 2021-02-16 20:49:57 · 87 阅读 · 0 评论 -
单例模式
定义:只能生成一个实例。并且它自己负责创建自己的对象,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。例如:回收站。实现方式:1.饿汉模式(快加载) 类初始化顺序:静态变量 静态块 实例变量 实例块 构造函数class People{ private static People people = new People();//方法区 直接new对象 private People(){}//私有的构造函数 public static Peopl原创 2021-02-16 16:09:29 · 68 阅读 · 1 评论 -
类的初始化顺序、类加载顺序
1.类的加载顺序:.java源文件(磁盘) -> javac编译器 -> .class文件(磁盘) -> java解释器------>JVM内存2.类的加载(加载.class文件)1)通过一个类的全限定名获取定义此类的二进制字节流。2)将这个字节流所代表的静态存储结构转换为方法区运行时数据结构。 3)在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问的入口。3.类加载器:先识别字节码文件文件类型:后缀名+魔数原创 2021-02-16 16:08:24 · 847 阅读 · 0 评论 -
final关键字
定义:终极的,不可修改的。可以修饰类方法和变量修饰变量: 基本数据类型:被修饰的成员变量表示常量,只能被赋值一次,赋值后值不再改变。final修饰一个成员变量(属性),必须要显示初始化。一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。//public final int a = 10; public final int a ; public final int b = 10; public Dem.原创 2021-02-16 15:58:44 · 96 阅读 · 0 评论 -
static关键字
定义:static 意为静态、全局。可以用来修饰成员变量和成员方法。还可以定义静态代码块修饰成员变量:也成为静态变量、类变量。public static int a = 10;特点:被static修饰的变量每一个类只有一份,属于类的共享数据。如果需要在外部类调用时,需要通过 类名.变量名 来调用。类的加载顺序:静态变量 静态块 实例变量 实例块 构造函数从类的加载角度来看,在加载的第二阶段链接阶段的准备阶段会为静态变量赋默认类型值,在初始化阶段会赋实际值修饰成员..原创 2021-02-16 15:56:24 · 61 阅读 · 0 评论