自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ActChen的博客

如有不足望指点

  • 博客(23)
  • 收藏
  • 关注

原创 静态代理、动态代理、CGLIB代理实现及原理

文章目录什么是代理为什么使用代理跨网络调用对象保证类的功能的单一性原则如何实现代理静态代理1. 基于继承的代理2. 基于接口的代理动态代理1. JDK动态代理2. cglib动态代理实现什么是代理    代理分为静态代理和动态代理,在未产生动态代理之前,代理只是为了给某一个类创建一个代理类来为这个类的对象动态添加一些职责和功能。而动态代理产生后,将这种在...

2019-06-02 20:09:48 1343

原创 内部类

    内部类是定义在另一个类中的类,之所以定义内部类,主要原因有以下三点:1. 访问自身数据域    内部类可以访问自身的数据域,也可以访问创建它的外围类对象的数据域。之所以内部类能访问到创建它的类的域,很大程度上是依赖了内部类对象的“隐式引用”,它指向了创建它的外部类对象。如public class OutC...

2019-05-25 16:40:02 169

原创 Comparable与Comparator

    String类实现的是Comparable接口,它主要依赖与CompareTo方法来进行排序: public int compareTo(String anotherString) { int len1 = value.length; int len2 = anotherString.value.length;...

2019-05-25 13:06:09 171

原创 反射

文章目录什么是反射反射的原理Class类Class对象三种获取方式1. 调用Object类下的getClass()方法2. 调用Class类的静态方法forName("类名或者接口名")3. 类名.class直接获取反射的主要作用1. 检查类的结构2. 运行时使用反射分析对象3. 编写泛型数组,实现数组copy什么是反射    反射库是一个具有丰富功能的...

2019-05-20 10:40:51 172

原创 参数可变量方法和枚举类

定义参数可变量方法    JDK1.5之前,Java中每个方法都需要固定的参数,如printf方法,每打印一个参数时,可能我们就要写一条语句System.out.printf("%d",x);System.out.printf("%d",y);再jdk1.5之后,提供了可以用可变的参数数量调用的方法,例如它将printf方法定义为public P...

2019-05-19 11:00:31 879

原创 自动拆装箱

    集合被设计为泛型类,牵扯泛型边界擦除,所以不能存储基本类型,而只能存储对象的引用。有时候我们需要将一个整型或者浮点型的基本类型存入集合之中,只能使用基本类型的包装器类。每一个基本类型都会对应一个包装器类,如下所示:基本类型包装类byteByteshortShortlongLongintInteger...

2019-05-18 20:32:51 160

原创 泛型

什么是泛型    泛型是JDK1.5之后引入的新特性,本质上就是将类型参数化。那么什么叫做类型参数化呢?    原本在Java中定义集合时,存入集合中的对象具有很大的不确定性,可能我存入对象引用是一个自定义类,也可能是一个已知类,如String。如设计者编写ArrayList底层的add方法时,它无法确定Array...

2019-05-18 17:28:27 168 1

原创 ArrayList集合

    ArrayList是一个采用类型参数的泛型类,称之为泛型数组列表,相对于普通数组而言最大的特点就是改变了普通数组长度固定的缺点。ArrayList会初始化一个具有初始容量的list,默认的初始容量为10,但ArrayList也提供有参构造来指定初始化容量。一般情况下在我们大致确定集合容量时,建议采用有参构造指定初始容量,避免添加元素时因容量问题引起的...

2019-05-18 13:40:46 4064

原创 final和static

1. final实例域如果一个实例域被定义为final,构建对象时就必须初始化这个实例域,也就是构造执行之后就必须对final修饰的实例域进行设值,并且在后面的操作中无法更改此实例域。final一般修饰的是基本类型域或者是不可变类,如String就是一个不可变类。2. static静态域和静态方法静态域是采用static修饰的实例域,它与实例域不同的是每个类中只有一个这样的静态域而可能存在多...

2019-05-13 21:34:22 84

原创 Java中的类间关系

类间关系概括来说存在三种:依赖、聚合和继承。它们的耦合度(模块与模块之间信息或参数之间依赖的程度)依次增加。1. 依赖即uses-a的关系。对于两个相互独立的对象,当一个对象依赖于另一个对象的服务时,这两个对象之间变现为依赖关系。比如将人作为一个对象,船作为另一个对象,人要实现过河这 个方法时就必须依赖船这个对象,将其作为方法参数或者局部变量。则这两个对象之间就存在依赖关系。这种依赖关系一般都...

2019-05-13 21:32:47 222

原创 大整数运算(BigInteger和BigDecimal)

1. 大整数转换这两个类在开发中也是比较常用到的类,例如我们在进行毫秒级的时间戳的运算时,可能会超出整数或者浮点数的范围,或者无法保证计算结果的精度准确。而BigInteger和BigDecimal可以处理包含任意长度数字序列的数值。BigInteger实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。在进行计算时我们可以使用BigInteger类和BigDecima...

2019-05-13 21:26:34 1258

原创 字符串(String、StringBuffer与StringBuilder)

构建字符串对象具有三种方式,分别为String、StringBuffer和StringBuilder。StringString最大的特性就是具有不可变性,整个类采用了final来进行修饰。String字符串内存空间被分配在方法区的常量池中,在进行等值方式进行赋值时,它首先在方法区的常量池中寻找是否有相同(内容相同)的字符串,如果存在相同字符串,则String类并不会创建一个新的对象,而是在栈...

2019-05-12 18:59:19 118

原创 Object源码解析

Object类一共有12个方法:1. registerNatives()private static native void registerNatives(); static { registerNatives(); }registerNatives()是一个native方法,我们可以看出它在static块中被调用,所以Object类一被加载此方法就会被...

2019-05-12 15:50:48 141

原创 面向对象

1、面向对象思想四个优势围绕客体审视问题 在现实世界中,存在的客体(对象)是审视问题的问题域中的主角,无论问题简单复杂,始终都会围绕着一个或者多个客体来进行分析。例如图书管理系统系统始终只存在三个客体:读者、图书和管理员。并且每一个客体都包含有自己的属性和行为,如读者具有属性借阅ID、姓名等,行为有借书、还书等。而面向过程开发中,是将依附于客体之上的行为抽取出来,以功能设计为目标来构...

2019-04-14 14:23:56 120

原创 git原理与应用

目录1. 作用2. 特点3. 原理4. git本地仓库操作5. git远程仓库6. git冲突7. git忽略特殊文件1. 作用 版本控制、项目托管2. 特点 分布式版本控制系统:每个人都有一个完整的版本库,用户之间相互不影响,唯一关联就是提供一个中央服务平台(github、码云)进行数据交互。3. 原理 git本地主要分为两大块...

2019-04-13 00:24:42 151

原创 内存分配与回收策略

     对象的内存分配笼统地讲,就是在堆上分配。对象主要分配在Eden区上,如果考虑线程安全问题,启动本地线程分配缓冲区,将按线程优先在TLAB上分配。少数情况下也可能直接回分配在老年代中,分配的规则并不是百分之百固定的,其细节取决于当前使用的哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数。以HotSpot虚拟机为例,内存分配和回收策略如下:一、对象优先在Eden区分配     在H...

2018-09-25 22:09:28 218

原创 枚举根节点(安全点、安全区域、OopMap)

     枚举根节点即为GC Roots的一个枚举。GC Roots中一般为全局性引用(常量、类静态属性)和执行上下文(栈帧中的本地变量表)。而枚举出这个GC Roots我们需要考虑到这个分析过程所产生结果的准确性及枚举效率,也就是我们此时要讲的保证“一致性”快照和提高枚举效率。如下:一、如何确保“一致性”快照,保证分析结果的准确性     这个“一致性”的意思是指在整个分析期间整个执...

2018-09-25 22:07:01 2946 1

原创 垃圾收集算法

垃圾回收算法 一、标记——清除算法二、复制算法三、标记——整理算法四、分代收集算法一、标记——清除算法     标记——清除算法是最基础的收集算法。算法过程分为“标记”和“清除”两个阶段,。首先通过“引用计数”或者“可达性分析”标记出所有需要回收的对象,在标记完成之后统一回收所有被标记的对象。它的主要不足有两个:一个是效率问题,标记和清除两个过程的效率都不高;另一个是空...

2018-09-22 20:47:28 121

原创 垃圾收集器——判定回收

     运行时数据区域除了按照线程私有公有划分以外,还可以按照内存分配是否具有确定性来进行一个分类。其中程序计数器、虚拟机栈和本地方法栈三个区域与线程生命周期相同。栈中的栈帧随着方法的进入和退出而有条不紊的执行者出栈和入栈操作。每个栈帧中分配多大的内存基本上在类结构确定下来时就是已知的了(尽管编译器会由JIT编译器进行一些优化),因此这几个区域的内存分配和回收都具备确定性,方法结束或者线程结束时...

2018-09-22 20:43:28 335

原创 OutOfMemoryError异常处理

      在Java虚拟机的运行时数据区域,除了程序计数器之外,都可能会出现outOfMemoryError异常。当我们遇到实际的内存溢出异常时,首先要能根据异常异常的信息快速判断哪个区域的内存溢出,知道什么样的代码可能会导致内存溢出,以及出现异常之后该如何处理。     操作系统为每个进程分配的内存是具有一定限制性。譬如,32位的操作系统限制为2GB。而当检查出哪个区域出现OutOfMem...

2018-09-21 11:21:52 31480 2

原创 对象的访问定位

     Java是通过虚拟机栈中的局部变量表中的reference数据来操作Java堆上的具体对象。但reference只是虚拟机规范中规定指向一个对象的引用,它并没有定义这个引用通过何种方式去定位、访问堆中的对象的具体位置,所以对象访问方法也取决于虚拟机的实现而定的。目前主流的访问方式有使用句柄和直接指针两种。一、句柄访问     如果使用句柄访问,Java堆中将会划分出一块儿内存作为...

2018-09-21 10:59:23 787

原创 对象创建及其内存布局

目录 以HotSpot虚拟机为例,对象的创建过程:对象内存布局:以HotSpot虚拟机为例,对象创建过程如下:     ① 虚拟机遇到一条new指令时,首先会去检查这个指令能否在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,则必须先执行相应的类加载过程;     ② 类检查通过之后,虚拟机将为对象分配内存。对象所需要的内存...

2018-09-20 17:06:46 170

原创 运行时数据区域

     目录一、程序计数器(线程私有)​二、Java虚拟机栈(线程私有)三、本地方法栈(线程私有)四、Java堆(所有线程共享)五、方法区(线程共享)     Java虚拟机所管理的内存包括方法区、虚拟机栈区、本地方法栈、堆区以及程序计数器五个运行时数据区域。如下图所示:一、程序计数器(线程私有)  特点如下:      1. 程序计数器可以看作当前线...

2018-09-20 16:45:14 262

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除