
java基础
hqw11
这个作者很懒,什么都没留下…
展开
-
静态内部类实现单例模式
StaticInnerClass静态内部类的外部调用静态内部类可以直接创建对象new B.C();如果内部类不是静态的,那就得这样B b = new B();B.C c = b.new C();静态内部类来实现"延时加载"的线程安全的单例模式单例模式分为饿汉式、懒汉式,其中懒汉式涉及到多线程安全问题,解决方法有加同步锁synchronized,双重检查(避免对除第一次...原创 2018-12-18 11:08:30 · 9326 阅读 · 0 评论 -
匿名内部类访问的局部变量用final修饰
以前开发中一直会把匿名内部类访问的局部变量用final修饰。最近开发中发现jdk8中其实可以去除final,编译器自动做了编译优化自动添加final修饰符。确实算是非常后知后觉了。。首先回顾下为什么要添加final:用final修饰实际上就是为了保护数据的一致性。这里所说的数据一致性,对引用变量来说是引用地址的一致性,对基本类型来说就是值的一致性。如果局部变量发生变化后,匿名内部类是不知...原创 2019-02-25 20:21:29 · 328 阅读 · 0 评论 -
Java代理模式详解
Java中代理模式有着非常广泛的场景,包括jdk源码中和一些组件框架如Spring(如应用在aop,Spring Data,swagger中)的应用。动态代理的主要实现有JDK的Proxy动态代理和CGLIB动态代理。下面是代理模式简单而又清晰的描述(源自java动态代理):代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消...原创 2019-02-25 00:41:28 · 199 阅读 · 0 评论 -
Java中的Lambda表达式和Stream
Java中的Lambda表达式和Streamlambda表达式的一般语法在该语法基础上可以做进一步的简化(Type1 param1, Type2 param2, ..., TypeN paramN) -> { statment1; statment2; //............. return statmentM;}param1 -> { statm...原创 2019-02-28 17:22:30 · 190 阅读 · 0 评论 -
ThreadLocal的实现原理和使用场景
ThreadLocal的实现原理和使用场景jdk和一些框架的很多的工具和实现类,如果没有分析过实现原理和理解过源码,很难在开发中有好的实际使用,或者是很难发挥这些工具或实现类的能力,不能灵活地在某些场景时马上想到这些工具和源码实现,或者使用出现问题时再去探究原因再去跟踪源码已为时已晚。 这里说的ThreadLocal就是需要分析源码才能灵活地实际使用。ThreadLocal简介Thread...原创 2019-02-27 17:21:21 · 1424 阅读 · 0 评论 -
设计模式总结
设计模式总结是时候对设计模式做一下总结了。结合开发中的经验,会对23种设计模式中常用的设计模式进行一下说明举例,其余的也会在后面加深理解和增加实际使用经验后进行补充。设计模式简介GOF提出的设计模式主要是基于以下的面向对象设计原则。对接口编程而不是对实现编程。优先使用对象组合而不是继承。模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Struc...原创 2019-02-14 22:57:13 · 160 阅读 · 0 评论 -
String字符串常量池对象和引用
String字符串常量池对象和引用众所周知,jdk1.7中已经把字符串常量池从永久代中剥离出来,存放在堆空间中。但是字符串常量池在堆中是怎样维护的,常量池中存的究竟是String对象的引用还是String对象?我们都知道类似String str="xxx"和String str=new String("xxx")的创建过程是不一样的,引用比较也会有所差异。下面是结合jmap -histo ...原创 2019-01-27 03:23:51 · 1758 阅读 · 2 评论 -
jmap -histo PID日志分析
基础jmap -histo PID日志分析待补充java version - jdk1.8其中需要关注的几个类对象[C is a char[] — 跟jdk 1.8 String相关(final) char[]-jdk8 -> byte[]-jdk9[S is a short[][I is a int[][B is a byte[][I is a int[]jav...原创 2019-01-25 22:43:21 · 1623 阅读 · 0 评论 -
GC日志分析
最简单进程jmap -histo PID分析待补充java version - jdk1.8其中需要关注的几个类对象[C is a char[] 跟String相关,final char[]-jdk8 / byte[]-jdk9[S is a short[][I is a int[][B is a byte[][I is a int[]java.lang.Class - ...原创 2019-01-25 18:04:13 · 790 阅读 · 0 评论 -
点分十进制字符串IP和32位int整数互转Java实现
点分十进制字符串IP和32位int整数互转Java实现比较简单基础的题,可记录和回顾基础。IPv4(4*8)和32位的int整数刚好可以11映射,但由于int整数是有符号的,所以不能直接通过划分为四个整数,然后乘以权值(256^(0-3)),再相加来实现互转,该过程会出现int整数溢出。如果是IPv4转换为long型倒不用考虑这个问题。这里直接通过简单的位运算来实现,首先再mark下java...原创 2019-07-05 17:38:47 · 1104 阅读 · 0 评论