Java语法糖的编译结果分析(二)

2018-09-17
阅读 15 分钟
1.8k
语法糖(Syntactic Sugar)的出现是为了降低我们编写某些代码时陷入的重复或繁琐,这使得我们使用语法糖后可以写出简明而优雅的代码。在Java中不加工的语法糖代码运行时可不会被虚拟机接受,因此编译器为了让这些含有语法糖的代码正常工作其实需要对这些代码进行加工,经过编译器在生成class字节码的阶段完成解语法糖(d...

Java语法糖的编译结果分析(一)

2018-09-10
阅读 13 分钟
2k
语法糖(Syntactic Sugar)的出现是为了降低我们编写某些代码时陷入的重复或繁琐,这使得我们使用语法糖后可以写出简明而优雅的代码。在Java中不加工的语法糖代码运行时可不会被虚拟机接受,因此编译器为了让这些含有语法糖的代码正常工作其实需要对这些代码进行加工,经过编译器在生成class字节码的阶段完成解语法糖(d...

Java编译期优化思维导图

2018-09-02
阅读 2 分钟
1.8k
本文参考自来自周志明《深入理解Java虚拟机(第2版)》,拓展内容建议读者可以阅读下这本书。 文字版如下: 编译期优化 javac的编译过程 解析和填充符号表 解析 Parse 词法分析 源代码字符流 -> 标记Token 源代码字符是程序编写的最小单位,Token是编译过程的最小元素不可再分 语法分析 Token序列 -> 抽象语法树AS...

JVM类加载思维导图

2018-08-20
阅读 4 分钟
2.4k
用一张思维导图尽可能囊括一下JVM的类加载过程的全流程。 本文参考自来自周志明《深入理解Java虚拟机(第2版)》,拓展内容建议读者可以阅读下这本书。 文字版如下: 加载 Loading 过程 通过类的全限定名来获取定义此类的二进制字节流 非数组类的加载,由类加载器加载,可以是启动类加载器,也可以是用户自定义的类加载...

完全图解JVM Class文件结构

2018-08-14
阅读 10 分钟
4.5k
对一个class文件的字节码进行逐行的分析是理解class文件结构的最佳方式。但是往往复杂的二进制字节码会让人望而却步,或者只有仔细一点点盯着才能保证不花眼。本文的目的在于尽可能完整地拆解JVM的Class字节码并将其分块分析,最终得到的图解结构希望可以帮助到你。

Maven依赖冲突的产生原因和解决方式

2018-05-20
阅读 4 分钟
27.5k
maven定义了许多dependency,每个dependency内部也会定义它的dependency。 首先我们来看一下依赖冲突产生的原因: 如果项目的依赖A和依赖B同时引入了依赖C。 如果依赖C在A和B中的版本不一致就可能依赖冲突。 比如 项目 <- A, B, A <- C(1.0),B <- C(1.1)。 那么maven如果选择高版本C(1.1)来导入(这个选择mave...

Ummm... Java8和lambda

2016-11-20
阅读 9 分钟
2.5k
Java8引入了与此前完全不同的函数式编程方法,通过Lambda表达式和StreamAPI来为Java下的函数式编程提供动力。本文是Java8新特性的第一篇,旨在阐释函数式编程的本义,更在展示Java是如何通过新特性实现函数式编程的。 最近在读这本图灵的新书:Java 8 in Action ,本书作者的目的在于向Java程序员介绍Java8带来的新特性...

Java基础:Java核心技术提示的易忽略点 Ch6

2016-02-19
阅读 4 分钟
2k
接口和抽象类是Java继承链的基础,其区别也较为明显,在Java语言的设计中,允许接口的多实现,但不允许抽象类的多继承,这样做符合简洁明了的面向对象设计思路:也就是说类只可以简单地拥有唯一父模型(抽象类),但是可以拥有多种不同的特征(接口),这样的设计大大简化了Java的面向对象逻辑。

Java系统WebService:Spring与CXF的集成

2016-02-03
阅读 9 分钟
8.8k
WebService是什么呢?顾名思义,是Web系统提供的服务,其目的呢,往大了说:是系统实现多异构模块协同合作,服务实现SOA(Services oriented Architecture面向服务的体系结构),往小了说:我们的系统模块能够定义一些功能开放给其他模块,也可以调用其他模块的一些功能。

Java基础 :细说权限描述符

2015-12-27
阅读 1 分钟
2.8k
Java权限描述符 Java中描述访问权限的描述符主要用在两个地方: 在类名前用于说明类的访问权限的描述符:public 缺省的“包内可见” 在成员变量和成员方法前面的描述符:public private protected 缺省的“包内可见” 第一类的描述符简单明了,只是为了说明一个定义出的类在其他类看来的可见性: public描述的类是对被其他所...

Java基础:Java核心技术提示的易忽略点 Ch5

2015-12-22
阅读 6 分钟
1.9k
开篇Java是一门不那么简单也不那么复杂的语言,Java里面有很多问题和特性是容易被使用者忽视的,这些问题也许会难住新手,同时也许会是老手不小心跌入的无故之坑,只有精于对基础的提炼才能最大程度地解决类似的疑问。所以,在读Cay.Horstmann的《Java核心技术》的过程中,我记录下这些所谓的易忽略的问题,这些问题将会...

Java基础:Java核心技术提示的易忽略点 Ch4

2015-12-21
阅读 5 分钟
3.1k
开篇Java是一门不那么简单也不那么复杂的语言,Java里面有很多问题和特性是容易被使用者忽视的,这些问题也许会难住新手,同时也许会是老手不小心跌入的无故之坑,只有精于对基础的提炼才能最大程度地解决类似的疑问。所以,在读Cay.Horstmann的《Java核心技术》的过程中,我记录下这些所谓的易忽略的问题,这些问题将会...

Java虚拟机 :Java字节码的编译生成和运行优化

2015-10-24
阅读 4 分钟
9.3k
作为Java开发人员,一定程度了解JVM虚拟机的的运作方式非常重要,本文就一些简单的虚拟机的相关概念和运作机制展开我自己的学习过程,是这个系列的第四篇。

Java基础 :java的代理模式

2015-10-19
阅读 4 分钟
1.9k
代理的目的到底是什么呢?字面意思上就可以解释:代理就是“代人理事”,也就是说当实现某个操作的时候发现根本不能使用相关的对象或者使用这个对象的效果不好的时候就建立一个“代它理事”的代理对象,让代理对象去完成任务,因为我们关注的是完成任务本身,至于是谁完成了这个任务是不重要的。在这种逻辑下,只要建立的代...

Java虚拟机 :Java字节码指令的执行

2015-10-17
阅读 8 分钟
9.7k
作为Java开发人员,一定程度了解JVM虚拟机的的运作方式非常重要,本文就一些简单的虚拟机的相关概念和运作机制展开我自己的学习过程,是这个系列的第三篇。

Java虚拟机:Java二进制字节码的结构、加载

2015-10-16
阅读 7 分钟
8.5k
作为Java开发人员,一定程度了解JVM虚拟机的的运作方式非常重要,本文就一些简单的虚拟机的相关概念和运作机制展开我自己的学习过程,是这个系列的第二篇。

Java虚拟机:Java自动内存管理和回收机制

2015-10-09
阅读 5 分钟
8.8k
这篇文章的素材来自周志明的《深入理解Java虚拟机》。作为Java开发人员,一定程度了解JVM虚拟机的的运作方式非常重要,本文就一些简单的虚拟机的相关概念和运作机制展开我自己的学习过程。

JavaIO : 不同情境使用的流

2015-10-04
阅读 5 分钟
4.1k
FileInputStream和FileOutputStream主要用于解决不限于纯文本的二进制文件的输入输出情境。同时,如果使用带有缓冲区的缓冲输入输出流的话会使得读写IO的效率更高,有助于更快地完成不限于纯文本的二进制文件的读写。

JavaIO :JavaIO输入输出流

2015-10-03
阅读 6 分钟
4.6k
流的原理: 一连串有顺序的数据系列可以看成是一个流。 输入输出流: 数据从IO输入到程序的流是输入流,数据从程序输出到IO的流是输出流。 下面我们使用字节输入输出流来说明这个问题: 输入流 InputStream一般是由javaio对象(如File)建立的,当新建一个InputStream时,io对象建立了一个包含有数据的管道(其实就是我...

Java多线程:Java多线程同步与对象控制权

2015-09-30
阅读 6 分钟
4.2k
join()函数Join的含义是:将某一线程加入成为另一个线程的流程之一,换言之就是等待另一个线程执行完毕。 {代码...} wait()函数notify()函数 如果对象调用了wait方法就会使持有该对象的线程把该对象的控制权交出去,然后处于等待状态。 如果对象调用了notify方法就会通知某个正在等待这个对象的控制权的线程可以继续运行...

Java多线程:Java多线程同步与synchronized

2015-09-30
阅读 7 分钟
11.9k
为什么需要同步多线程?线程的同步是指让多个运行的线程在一起良好地协作,达到让多线程按要求合理地占用释放资源。我们采用Java中的同步代码块和同步方法达到这样的目的。比如这样的解决多线程无固定序执行的问题:

Java多线程:Java多线程执行框架

2015-09-30
阅读 5 分钟
7k
为什么需要执行框架呢?使用一般的new方法来创建线程有什么问题呢?一般的new线程的方式一般要给出一个实现了Runnable接口的执行类,在其中重写run()方法,然后再在将这个执行类的对象传给线程以完成初始化,这个过程中线程的定义和执行过程其实是杂糅在一起了,而且每次new一个新的线程出来在资源上很有可能会产生不必...

Java多线程:Java多线程基础

2015-09-30
阅读 5 分钟
4.2k
也就是说,进程从系统那里获取到了一定的CPU占用时间片、内存单元和IO等等资源,然后线程将这些资源利用起来执行程序,线程执行程序是什么意思呢?就是把程序记录的那些命令逐条依序一步步在CPU上运作,数据在内存、IO上流转,将命令执行完。这个层级的概念存在于OS上,OS的调度抽象层级并不是那么直观,如果我们在说明...

工厂模式和“万能”工厂类

2015-04-07
阅读 4 分钟
4.4k
但是如果随着这个对象被创建的同时还必须进行其他相对复杂的操作,那么在新建构造一个对象代码就显得非常复杂,这个复杂的代码通常还需要每一次都复写,大大增加了冗余。

继承、装饰和动态代理修改对象既有方法

2015-04-05
阅读 3 分钟
4.4k
InhDog继承Dog后生成的dog对象拥有Dog的类型却具有InhDog的方法,调用其bark()方法时会调用子类复写的方法,这个过程也是Java多态性的体现。

Java 数据结构实现(DataStructure)2

2014-12-08
阅读 5 分钟
2.6k
可以看成是有特定规则为的线性表,特定规则就是先进后出,后进先出,可以看成是我们List的先insertFromHead的要后deleteFromHead,所以利用这一点可以通过继承或组合的方式来构建堆栈。

Java 数据结构实现(DataStructure)1

2014-12-05
阅读 5 分钟
2.7k
单向链表利用了类的自引用,实现了类似指针的效果。 双向链表的实现,必须注意双向链表的head和back两个指针的正确指向,以及插入和删除过程中指向操作增减的有序性。

Java 内部类(InnerClass)

2014-12-04
阅读 2 分钟
2.4k
内部类定义在外部类内部,外部类成为一个有类作对象的特殊类。 当内部类是Static时,访问内部类的属性或方法并不需要建立一个特定的内部类类型的对象,直接采用访问静态类属性或方法就可以了。 当内部类不是Static时,就需要在类定义中创建内部类类型的对象,访问该对象的属性或方法,OuterClass有权访问InnerClass的pri...

Java 继承(Inherits)

2014-12-03
阅读 2 分钟
3.3k
在继承中,子类完全继承了父类的属性和方法,同时可能又增加了自己的属性和方法(扩充Extends),同时又可能对父类的方法进行了重写或覆盖(Override,完全一样的方法和参数),或者进行了重载(Overload,完全一样的方法名,不一样的参数)。

Java 多态(polymorphism)

2014-12-03
阅读 4 分钟
3.3k
子类对象为什么不能被定义成父类类型呢?因为子类继承于父类,因此子类拥有的方法很可能比父类多,因为除了继承自父类的全部属性和方法外,子类有可能定义了其他的方法,所以大体上看子类的量级要比父类大,所以父类对象可以定义成子类对象,因为多出来的方法可以直接使用子类的,而反过来的话就不行了,因为子类对象不...