
Java原理源码
上道至简
学习技术的过程,就是从学习怎么使用,到理解为什么这样用,再到自我创新,进一步优化,深度思考。
展开
-
读java源码的好处
结合自己读源码的体会,大概有以下几点好处:1.深入理解java语言。很多人做java开发,只知道怎么用,大概了解语法,但并不是很懂为什么要这么写,这样的后果就是模仿别人的代码,不能根据项目中的实际情况,写出高质量的代码。而当你阅读了java源码之后,你就会发现其实还可以有更高效的方法来解决问题。2.深入体会设计模式。当你深入java源码的时候,你会发现里面用到了很多设计模式,从而加深了自己在实际的...原创 2018-05-08 23:04:07 · 3400 阅读 · 0 评论 -
JAVA8之妙用Optional解决NPE问题
引言 在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerException.假设我们有两个类,他们的UML类图如下图所示 在这种情况下,有如下代码 <span style="color:#333333"><code>user.getAddress().getProvince();</code></span&g...转载 2018-12-04 11:51:09 · 319 阅读 · 1 评论 -
java lambda表达式的简单应用
一、多参数的情况: (Type1 param1, Type2 param2, ..., TypeN paramN) -> { statment1; statment2; //............. return statmentM; } 二、单参数的情况: param1 -> { statment1; statment2; //............原创 2018-11-23 12:01:47 · 169 阅读 · 0 评论 -
关于java的类实例化的先后顺序
最近有同事在部署一个旧系统的时候遇到问题,在本地部署是没事的,但一到正式线上服务器就报错。报错的大概意思就是某个类里面的一个静态变量为空导致出现空指针异常。为了帮忙解决这个问题,我再详细地深入代码,然后模拟实际情况建立如下类:1.定义了一个加载配置文件的类Test1,使用spring注解@Service来实例化这个类。2.定义了一个final的工具类Test2,然后在这个类里面添加静态...原创 2018-06-01 23:48:30 · 3142 阅读 · 0 评论 -
JAVA8的IO流源码简析
让我们来分析一下java8里面的IO源码。一般来说分两类,即字节流和字符流,通过下面的思维导向图总结下:关于流有几点是要注意的:第一,读写流要及时的关闭,使用close方法。第二,深入理解read和readline的区别。具体请看下面的源码:需要注意的是read方法有时候会出现内容丢失的情况。第三,读写字符流时要注意编码格式定义好。...原创 2018-06-07 22:59:38 · 1308 阅读 · 2 评论 -
java基础的深刻理解
程序猿每天的生活,除了加班就是加班,很少有时间去总结开发经验。这样下去对技术的提高会非常缓慢,下面简单说下个人的一些思考总结。首先写代码前要思考几个方面:一、做什么。从需求方的角度去思考,假如你就是那个客户,你希望得到什么?二、怎么做。从开发者的角度去思考,如何通过代码实现,分步骤来完成,可以使用思维导图或者流程图来表达思路。三、详细实现。有了大概思路之后,就是具体的实现,要在脑里过一遍整个流程,...原创 2018-06-21 22:55:11 · 309 阅读 · 0 评论 -
java IO思维导图总结
字节流每次读取一个字节,而字符流每次读取两个字节。如果有同学看了java IO源码的话,就会发现里面用到了装饰者设计模式。原创 2018-05-29 21:36:49 · 1359 阅读 · 0 评论 -
JDK中泛型的上下界概念
今天看了下jdk8的Function源码,发现好多地方的方法传递参数都是如下这般: Function<? super V, ? extends T> before 这个其实就是泛型的上下界: 上界 <? extend T> 下界 <? super T> 上界的list只能get,不能add 下界的list只能add,不能get 具体看代码示...原创 2018-05-24 00:15:29 · 802 阅读 · 0 评论 -
java类对象初始化过程
当我们要创建一个类的实例时,其初始化过程如下:一、初始化父类中的静态变量和静态代码块二、初始化子类中的静态变量和静态代码块三、初始化父类中的普通成员变量和代码块四、调用父类的构造方法五、初始子类中的普通成员变量和代码块六、调用子类的构造方法另外要注意在spring配置里面当我们要给某个类实例定义一个父类时使用parent这个选项。...原创 2018-05-22 23:52:50 · 240 阅读 · 0 评论 -
Java各版本特性发展图
原创 2018-05-08 00:08:37 · 560 阅读 · 0 评论 -
用java实现首字母小写
实现首字母变小写的方法不少,但感觉下面的这种写法会更高效一点,请看:这里主要就是先把字符串分成一个个单独的字符,然后对首字符进行加32操作,相信大家都知道大写字母+32变小写的原理,这里就不同赘述了,以后要把一些开发小技巧发出来跟大家一起共享。...原创 2018-05-20 23:35:17 · 9528 阅读 · 0 评论 -
深入学习java
做开发也差不多十年了,是时候需要好好总结一下了,同时也跟更多的人一起分享,一起学习进步。 过去我们只是在不断的学习如何使用java语言来开发项目,现在我们来学习java为什么要被设计成这样以及它的深层原理,从全局整体上来理解,从历史版本看变迁,由广度到深度,所谓大道至简,浓缩就是精华,最后达到一种效果就是触类旁通,知其然还要知其所以然。 我们知道开发语言经历了...原创 2018-05-06 12:52:14 · 1163 阅读 · 0 评论 -
JAVA源码学习要点汇总
一、基础知识1.宏观上理解java的本质2. JVM的原理3.java变量4.java数据类型5.java运算符6.java判断语句if-else7.java循环语句switch-case\for\while\do-while和continue\break二、面向对象1.构造函数2.关键词static、super、final3.继承4.方法重载和覆盖5.多态性6.静态绑定和动态绑定7.抽象类8.抽...原创 2018-05-12 11:17:34 · 4363 阅读 · 0 评论 -
Threadlocal之关于Fortify 扫描警告
在使用Fortify 扫描代码之后报出如下警告, J2EE Bad Practices:Threads (FORTIFY.J2EE_Bad_Practices--Threads) 0. InCall: Threadlocal()。经查资料主要是J2EE的规范,就是在某些情况下禁止web使用线程管理器,以免造成死锁等问题。 事实上Threadlocal应该是不会出现死锁这...原创 2018-05-17 23:31:08 · 2855 阅读 · 0 评论 -
认识JVM的内存模型
在实际的项目开发中,我们有时候会遇到内存溢出这种情况。如何解决这种问题呢?一、首先我们得了解下java的内存机制。JVM里面把内存分成五个部分,分别是:1. 程序计数器 2. Java虚拟机栈 3. 本地方法栈 4. 堆 5. 方法区这几个存储区最主要的就是栈区和堆区,那么什么是栈什么是堆呢?说的简单点,栈里面存放的是基本的数据类型和引用,而堆里面则是存放各种对象实例的。具体请参考更多网上资料。二...原创 2018-05-09 23:37:42 · 146 阅读 · 0 评论 -
使用JDK8的日期转换类DateTimeFormatter时遇到的问题
有个同事开发的时候用到这个类进行日期的转换,想转换的日期格式为“YYYY/MM/dd”,结果在2018年12月30日那天转换出来的格式是2019/12/30,请看下面的代码: public static void main(String[] args) { DateTimeFormatter dtf = DateTimeFormatter.ofPattern("YYYY/MM/...原创 2019-01-03 15:01:42 · 8394 阅读 · 0 评论