java学习
MIMOCH
桃李春风一杯酒,江湖夜雨十年灯,未来可期....
展开
-
volatile关键字实现
Volatile 关键字实现原理线程的工作空间是 CPU寄存器和cache的抽象描述CPU修改数据 内存数据的步骤 :把内存中的数据读到cache中在cache中更新数据把更新的数据刷新到缓存数据的不一致问题解决方案 :总线加锁(粒度太大)MESI() a. 读操作: 不做任何操作,将cache中的数据读到寄存器中 b. 写操作 : 发出信号通知其...原创 2019-08-04 15:02:59 · 174 阅读 · 0 评论 -
synchronized底层原理分析
synchronized底层原理并发叫号static : 并发量大的时候会出现 : 跳号.重号.超过最大值概念互斥性 :即同一时间只允许一个线程持有某个对象锁可见性 : 必须保证锁被释放之前,对共享变量所做的修改,对之后获得锁的对象是课件的用法修饰 : 静态方法 普通方法修饰 : 代码块monitor[监视器] : 每个对象都有一个monitor对象某一线程占有这个对象的时...原创 2019-08-03 12:37:13 · 200 阅读 · 0 评论 -
java 的四种引用以及它的使用场景
参考:java中四种引用类型简介在java1.2开始,为了使程序能更加灵活的控制对象的生命周期,将对象的引用分为四种级别.详细说明强引用(StrongReference)强引用是使用最广泛的引用.如果一个对象具有强引用,那么垃圾回收器据对不会回收它.当空间不足时,jvm宁愿抛出OutOfMemoryError错误,是程序异常终止,也不会通过回收强引用的对象来解决内存不足的问题.如果...原创 2019-07-07 00:34:10 · 318 阅读 · 1 评论 -
Java Collection集合类 - HashMap 可能出现的死循环问题
问题描述问题 : 服务器cpu被100%的线上故障,是因为java语言在并发情况下使用了HashMap造成Receive Condition (竞态条件 : 并发访问出现冲突,结果不正确)首先HashMap是非线程安全的数据结构,在单线程的程序中使用,是没有问题的.但是在多线程程序中,就可能出现问题.HashMap回顾HashMap 通常会使用一个数组(table[] 来分散所有的k...原创 2019-06-30 16:55:54 · 188 阅读 · 0 评论 -
Java Collection集合类 - HashMap 与HashTable的不同点
1.代码版本HashTable * @author Arthur van Hoff * @author Josh Bloch * @author Neal Gafter * @see Object#equals(java.lang.Object) * @see Object#hashCode() * @see Hashtable#rehash() * ...原创 2019-06-24 10:46:47 · 237 阅读 · 0 评论 -
Java Collection集合类- HashMap源码分析
简介:HashMap主要用来存放键值对,它基于哈希表的Map接口实现JDK 1.8 之前HashMap由数组 + 链表 组成,数组是HashMap的主体 ,链表主要是为了解决哈希冲突而存在的("拉链法"解决冲突),在JDK1.8之后在解决哈希冲突时,当链表长度大于阈值(默认为 8 ),将链表转化为红黑表,减少搜索时间.底层数据结构JDk1.8之前jdk1.8之前HashMap底层是...原创 2019-06-22 00:48:16 · 250 阅读 · 0 评论 -
Java Collection集合类- LinkedList 源码分析
LinkedList简介:LinkedList 是实现了 List接口 和 Deque接口 的双向链表 . LinkedList 底层的链表结构使他支持高效的插入(尾插)和删除操作,此外它实现了Deque接口,使得LinkedList也具有队列的特性;LinkedList不是线程安全的.如果想使LinkedList 变成线程安全的,可以调用静态类 Collections类中的synchron...原创 2019-06-21 13:26:33 · 238 阅读 · 1 评论 -
Java Collection集合类- ArrayList 源码分析
ArrayList 简介ArrayList的底层是数组,相当于动态数组,它的容量能动态增长.public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable它继承了Abst...原创 2019-06-18 13:20:00 · 239 阅读 · 0 评论 -
双向链表的实现
双向链表:/** * TODO : 双向链表的实现 * * @param <T> */public class DoubleLinkList<T> { Entry<T> head; public DoubleLinkList() { head = new Entry<>(null, null, null...原创 2019-05-19 01:11:42 · 200 阅读 · 0 评论 -
用泛型实现单链表
节点代码public class Entry<T> { private T value; //保存当前节点保存的值 private Entry<T> next; //保存下一个节点 public Entry(T value, Entry<T> next) { this.next = next; th...原创 2019-05-17 18:14:26 · 370 阅读 · 0 评论 -
Java泛型编程
泛型的本质就是参数化类型 ,泛型只在编译阶段有效.参数化类型所操作的数据类型被指定为一个参数,这种参数可以用在类.接口和方法的创建中,分为泛型类.泛型接口.泛型方法泛型好处可以对类型进行自动检查自动对类型进行类型替换1.泛型类ublic class test <T>{ private T number ; //static T num; ...原创 2019-05-16 20:41:43 · 674 阅读 · 0 评论 -
反射与注解
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,反射作用: 对于任何一个对象,都能够调用它的任意一个方法和属性.要想解剖一个类,必须获取到该类的字节码文件对象,而解剖使用的就是Class类中的方法,所以先要获取到每一个字节码文件对应的Class类型的对象.在程序运行期间,java运行时始终为所有的对象维护一个被称为运行时的类型标识,这个信息跟踪着每个对象...原创 2019-05-01 20:27:38 · 314 阅读 · 0 评论 -
异常
异常类型结构图在Java中,所有的异常都有一个公共祖先java.lang包中的Tgrowable类,有两个重要的子类Exception(异常)和Error(错误).Error:是程序无法处理的错误.一般是代码运行时JVM出现的问题,不能手动解决 .Exception(异常):是程序本身可以处理的的异常,RuntimeException由虚拟机抛出,可以被程序本身处理.Throwab...原创 2019-04-29 22:08:34 · 125 阅读 · 0 评论 -
类的加载过程-浅析
类的加载过程class对象获取class对象的方式:1. People p = new People(); Class c = p.getClass(); c.getClassLoader();2. // 字面常量: Class c = People.class;3. Class c = Class.forName("");类加载器:...原创 2019-04-27 20:55:49 · 185 阅读 · 0 评论 -
Java三大特性-多态
多态多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编译的时候并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪一个类的实例对象,该引用变量发出的方法调用到底是哪一个类中的方法,必须在程序运行期间才能决定!编译期(静态绑定)方法重载:发生在同一个类中方法名必须相同参数类型不同,个数不同,顺序不同,方法返回值可以不同,发生在编译时...原创 2019-04-21 16:03:31 · 149 阅读 · 0 评论 -
Java中的Class对象
class对象Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识,这个信息保存着每个对象所属的类足迹.1.通过反射获取Class对象Object中的Class方法会返回一个Class类型的实例1.动态获取Class类型class People{public static void main(String []args){ People man = new Peo...原创 2019-04-21 13:03:38 · 222 阅读 · 0 评论 -
Java面向对象特性-抽象
1.为什么Java不能多继承? 因为会出现像上图一样的菱形继承问题,B和C都继承了A,,而D又同时继承了B和C ,而D实例化后会包含基类A的两个子对象,如果直接继承会引发访问不明确(二义性),以及数据冗余. C++未解决这个问题,提出了虚函数. 2.System.exit(0),System.exit(1)与return的关系?1. System.exit(int status) 中...原创 2019-04-20 13:57:51 · 227 阅读 · 0 评论 -
java面向对象特性-继承
Java用extends关键字表示继承关系当创建一个类是,总是在继承,如果没有明确指出要继承的类,就总是从跟类Object进行继承class People{ public People(){ }}class Man extens Peopele{ public man(){ }}子类访问权限子类不能继承父类的private成员方法,就相当于你爸把钥匙藏了,子...原创 2019-04-15 13:19:17 · 252 阅读 · 0 评论 -
包装类型
自动装箱与拆箱装箱:将基本数据类型用它们的引用数据类型包装起来拆箱: 将包装类型转换为基本数据类型Integer包装类型Integer a = 10 ; //隐式加包 底层是Integer1valueOf();Integer c = Integer.valueOf(-10); //显式加包操作 传入 int 返回 Integer int d = c; //隐式拆包...原创 2019-04-14 14:07:53 · 140 阅读 · 0 评论 -
static关键字修饰下的静态变量和静态方法+单例模式
1.静态变量首先静态变量与静态方法都保存在方法区中静态变量: 使用static关键字定义的变量。static可以修饰变量和方法,也有static静态代码块。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之...原创 2019-04-14 12:43:16 · 937 阅读 · 0 评论 -
Java中二维数组的拷贝方式
二维数组的拷贝1.直接拷贝数组地址 int [][]arr = {{1,2,3},{4,5,6}}; int [][]brr = new int [2][3]; brr = arr;此时在内存中是 brr 将arr的地址拷贝了过来2.for循环拷贝(深拷贝)for(int i = 0;i<arr.length;i++) {...原创 2019-03-27 21:35:52 · 1976 阅读 · 1 评论 -
Java基础之二维数组定义与拷贝
1.二维数组的定义一维数组中的每一个元素不再是 一个具体类型的元素,而是一个一维数组二维数组在Jvm中1.0 二维数组的定义1.直接定义数组的元素int [][] arr = {{1,2,3,},{4,5,6},{7,8,9}}; //这里定义了一个三行三列的二维数组2.直接定义数组的大小int [][] arr = new int [3][];arr[0]...原创 2019-03-27 13:58:36 · 404 阅读 · 0 评论 -
Java基础之一维数组声明与底层的拷贝方法
1. 数组是相同数据的集合1.0 首先数组是在堆上申请的一段连续的空间int [] arr = new int[10];arr 保存在堆上开辟的内存的首地址1.1数组的三种定义方式数组的通用声明方式 类型名 [] 数组名(1) 先声明后初始化int [] arr ;arr = new int [5]; //这种声明方式直接给定了数组...原创 2019-03-25 21:19:14 · 346 阅读 · 0 评论 -
Java基础之基本的编译和数据类型(二)
1.char 类型用来表示单个字符,Java中为双字节表示 范围 : \u0000 ~ \uffff特殊的转义字符转义序列名称\b退格\t制表\n换行\r回车2.boolean类型布尔类型有两个值 true 和 false ,整型值和布尔值之间不能相互转换boolean Bool = 0 ; (编译不通过)3.常量...原创 2019-03-22 22:57:00 · 222 阅读 · 0 评论 -
Java基础之基本的编译和数据类型(一)
Java 的简单的编译过程 1.源文件经编译器笔译成字节码(ByteCode) 2.字节码由虚拟机解释运行 Java 编译.class字节码文件(字节码文件具有跨平台性) 解释 到本地操作系统上的虚拟机 具有跨平台性 因为Java程序既要编译的同时也要经过 JVM的解释运行,因此Java也被成为半解释语言.为什么字节码具有跨平台性? JVM屏蔽了底层操作系统的差异....原创 2019-03-18 23:41:55 · 261 阅读 · 0 评论 -
Java之术语
Java术语原创 2019-03-17 21:20:02 · 174 阅读 · 0 评论