代码荣耀
maijia0754
这个作者很懒,什么都没留下…
展开
-
NO.1 方法参数按“值”而非按“引用”方式传递 | Java敲黑板系列
基本概念方法(也称函数)调用是程序设计语言一种最基本的功能。一个完整的方法声明一般包括了返回值、方法名称、方法参数三个基本要素,俗称“三朵金花”。今天我们主要来谈谈这金兰三姐妹中的幺妹——方法参数。方法被调用其中有一个重要的过程,就是对三妹进行虚实结合,也称形参与实参相结合,平时三妹就是一个符号,发生方法调用时,调用方会把实际的参数传递给方法。传递的方式分为两种:按值调用与按引用调...转载 2018-06-04 12:09:06 · 176 阅读 · 0 评论 -
NO.16 沙场秋点兵:类vs抽象类vs接口 | Java敲黑板系列
开场白老铁 :接口、抽象类、类——三位英雄执剑走天涯,行侠仗义,被誉为“Java帝国三剑客”。三位英雄从来都不会争强好胜,而是相互协助,发挥各自优势,共同打造Java帝国的强安全性与高健壮性。今天我们对三位英雄进行总结对比,一方面让老铁们对三位有一个全面的认识,另外一方面也供老铁在进行技术选型时做参考。今天全是干货,敲黑板时老铁们需格外留意。特性比较敲黑板关键字:接口用i...转载 2018-06-05 16:34:57 · 149 阅读 · 0 评论 -
NO.17 不可变对象:海枯石烂,此心不渝 | Java敲黑板系列
开场白老铁 :对待爱情,您希望有一位对你忠贞不渝的另一半;对待友情,您希望能有一个友情比金坚的知己。在这到处充满变化的世界,我们心里始终怀揣着对一些美好事物能够“不变”的期许。一位哲人曾经说过:“我们无法踏进同一条河流”,看来不变已经成为了一种奢望;在编程的世界里,对象无处不在,那么我们能得到不可变的对象吗?如果答案是肯定的话,那么我们如何创建不可变对象了?在“唯一不变的就是变化”的逻辑体系里...转载 2018-06-05 16:43:13 · 211 阅读 · 0 评论 -
NO.18 放开握紧的双手将得到全世界:不可变对象进阶 | Java敲黑板系列
开场白老铁 :所谓“不可变对象”就是当对象创建以后其成员变量不再能发生变化。今天我们以昨天所提的问题——“为什么在特定场景下需要clone操作?”作为引子来说明在定义不可变对象时的注意事项,详细说说我们需要避开哪些坑,同时把前期系列文章的一些知识点进行串联复习,起到融会贯通、举一反三的“温故而知新”效果。本文需要用到的知识点可参看文末的【延伸阅读】。穿越构造函数的陷阱代码1自定义了...转载 2018-06-05 17:07:11 · 177 阅读 · 0 评论 -
NO.15 你所知道的抽象类,不一定是最全的 | Java敲黑板系列
开场白老铁 :接口与抽象类总是会被老铁们一起惦记,昨天我们讨论了接口,那么今天我们就来说说抽象类。那明天了?明天我们就谈谈接口与抽象类的各种比较及其典型应用场景。什么是抽象类?继承是面向对象三大特性之一。从继承的层次维度来看,越是顶层的类就越通用,越是底层的类就越具体。想想Java语言中的祖宗级顶层类——Object,它是Java所有类的父类,“会当凌绝顶,一览纵山小”,是不是觉得...转载 2018-06-05 14:35:43 · 132 阅读 · 0 评论 -
NO.19 深浅拷贝所引发的烦恼:不可变对象进阶
从一个例子谈起上文中我们一起讨论了创建不可变类的注意事项,重点在于需要分别在构造函数传入不可变对象时、在getter操作返回不可变对象时,一定要先进行clone操作,切断与原对象引用的关联关系。聪明的老铁们想想,这样就足够了吗?我们先看下例。代码1自定义了一个文章类Article;代码2自定义了一个学生类MutableStudent,完全按照不可变对象的定义准则来开展编码。代码1:...转载 2018-06-05 18:40:28 · 162 阅读 · 0 评论 -
NO.20 朝中有人好办事:内部类
定义、分类及使用原因内部类是定义在另一个类中的类,如图1所示。按照内部类定义的位置及作用域又可以分为:成员内部类局部内部类匿名内部类静态内部类为什么我们需要使用内部类了?内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据。内部类可以对同一包中的其他类隐藏起来。当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较快捷。内部类所实现得到功能使用外...转载 2018-06-06 10:23:12 · 310 阅读 · 0 评论 -
NO.21 我会回来的:回调
What - 什么是回调 ?回调机制最早应用于框架编程技术,是指在编写框架/类库(比如Android底层实现)时,需要上层模块提供具体实现的代码的机制;上层模块所提供的这种代码则称为回调函数。说人话,请看图一。【注意】文中提及框架/类库只是为了形象化说明是底层实现;同样地,App也只是为了形象划说明是上层实现。回调技术不仅仅用于框架设计中,其本质上是分层思想,同样适用于我们业务代码的实...转载 2018-06-06 17:22:17 · 152 阅读 · 0 评论 -
NO.22 举一反三:回调与观察者模式
默然回首,那人却在灯火阑珊处 - 回调模式Java线程技术是现实世界的复杂业务场景中的“座上宾”。创建线程的方式我们几乎也是烂熟于心:继承Thread方式;实现Runnable接口方式;线程池方式。代码1:public class TestThread { public static void main(String[] args) { Thread...转载 2018-06-06 17:59:37 · 234 阅读 · 0 评论 -
NO.23 再探回调:自己动手实现事件监听器模式
事件监听器模式是什么?采用Java Swing、Android、QT等技术进行实现图形用户程序(GUI)过程中,事件处理是非常重要且绕不开的编码工作,老铁们在利用上述语言框架提供便利的事件处理机制的时候,我们想过背后的运行原理是什么没?或者更进一步我们想过自己来实现一个这样的事件处理机制没?如果没有也没有关系,因为今天我们要一起来实现上述目标。事件监听器模式是一种最通用且经典的事件...转载 2018-06-07 15:50:48 · 268 阅读 · 0 评论 -
NO.24 三探回调:自己动手写通用事件监听器模式
通用的事件监听器模式是怎样的?事件监听器模式在我们编写Android、Java、QT等GUI程序时,是无处不在的存在。上文中,我们利用回调技术实现了事件监听器模式,但是该事件监听器模式还不够通用。今天我们从零开始,以不同手机设备使用QQ为应用实例,实现一个通用的事件监听器模式,一个通用的事件监听模式:事件源(例如:按钮或滚动条)的本身被注册了事件监听器,当事件源发生了一个事件(例如:点击或...转载 2018-06-07 17:18:16 · 201 阅读 · 0 评论 -
NO.25 synchronized关键字画像:开胃菜
synchronized关键字synchronized关键字可用于函数修饰符,也可用作函数内的语句块修饰符。对于该关键字,很多程序员老铁有一个错误的认知:由于代码被关键字synchronized保护着,因此同一时刻只能有一个线程才能执行它。但是,这绝不是synchronized的全部,synchronized也不是从表面看起来那样的简单,今天我们一起来看看。synchronized修饰...转载 2018-06-25 08:59:24 · 147 阅读 · 0 评论 -
NO.14 你所知道的接口,不一定是最全的 | Java敲黑板系列
开场白老铁 :通过前三篇文章,我们基本把Java对象“捏碎揉烂”个底朝天。后续将进入一个新的系列“接口与类”;今天我们将深入探讨接口的内涵与注意事项。面向对象编程.VS.面向接口编程,何去何从?我们常说“Java是一门面向对象编程的语言”,但是我们又常把“面向接口编程”挂在嘴边。一个是面向对象,一个是面向接口,到底哪一个才是正确的呢?突然间我们的思绪在风中变得凌乱。其实,这不是一个...转载 2018-06-05 10:54:33 · 174 阅读 · 0 评论 -
NO.13 共享经济下的对象 | Java敲黑板系列
开场白老铁 :通过上述两篇文章,我们已经get到减少创建对象数量,将可以提升程序运行效率。今天我们再来说说另外一项在创建对象方面能优化程序运行性能的技术——“对象复用”。对象复用所谓“对象复用”仍然是一项与编程语言无关的技术,它是一种在程序运行过程中减少创建对象数量的策略与方法。即:尽量能重用已有对象,而不是再重新创建一个。基于对象复用技术,能减少程序在创建对象与回收对象时的性...转载 2018-06-05 09:56:23 · 168 阅读 · 0 评论 -
NO.2 equals与==的三生三世 | Java敲黑板系列
开场白在Java家族里,“equals”与“==”是最容易让老铁混淆、分不清楚的一对表兄弟。为了便于大家提升对他们的辨识度,老铁专门对他们进行了采访,以下是采访实录。 老铁 :应广大老铁们要求,今天我们非常幸会请来了“equals”和“==”两位Java家族成员到“Java敲黑板系列”演播厅,欢迎两位! equals :大家好,我是equals,感谢大家收看今天的“敲黑板系列”! =...转载 2018-06-04 12:31:28 · 204 阅读 · 0 评论 -
NO.3 厉害了,clone哥 | Java敲黑板系列
开场白老铁 :今天我们“Java敲黑板系列”迎来了一位特殊嘉宾:他是Java家族顶级boss——Object的“左右护法”之一的“右护法” ——clone方法。他为什么会有这样的名望?江湖上给了他一个称号——“造物主”。那么“左护法”是谁了?——new方法。也就是说,所有的Java对象都是由“new方法”与“clone方法”所产生的;因此,他们是Java世界里面名副其实的“造物主”。c...转载 2018-06-04 14:40:04 · 137 阅读 · 0 评论 -
NO.4 我是Java大厦的一块砖:何谓对象与对象引用 ?| Java敲黑板系列
开场白老铁 :欢迎大家准时收看“Java敲黑板系列”。今天我们的节目首先从一句话开始:“每种编程语言都有自己的数据处理方式。有些时候,程序员必须注意将要处理的数据是什么类型。你是直接操纵元素,还是用某种基于特殊语法的间接表示(例如C/C++里的指针)来操作对象。所有这些在 Java 里都得到了简化,一切都被视为对象。因此,我们可采用一种统一的语法。尽管将一切都“看作”对象,但操纵的标识符实...转载 2018-06-04 15:16:27 · 151 阅读 · 0 评论 -
NO.5 不平凡的螺丝钉:String兄弟连 | Java敲黑板系列
开场白老铁:最近两天双11电商购物节闹得沸沸扬扬,卖家使出全身解数搞促销,买家把积攒了一年的购物热情也在这一天尽情释放,共同创造着一年又一年新的奇迹,不断对当前世界上最强计算力、运输力等发起挑战。可以这么说,中国电子商务的发达程度不逊于任何一个国家,在科技领域能有这样让人扬眉吐气的事情,想想真是提劲。类似于高楼大厦必然是由简单到一砖一瓦一螺钉构成的,庞大而复杂的电商系统也是由一行行代码构成...转载 2018-06-04 15:33:16 · 190 阅读 · 0 评论 -
NO.6 异常: 初识 | Java敲黑板系列
开场白老铁:在Java世界里,异常的出现让我们编写的程序运行起来更加的健壮,同时为程序在调试、运行期间发生的一些意外情况,提供了补救机会;即使遇到一些严重错误而无法弥补,异常也会非常忠实的记录所发生的这一切。今天来到我们第6期“Java敲黑板系列”的正是异常兄弟,有请!由于异常背后有太多故事值得我们开发人员所关注,为此,这次专访将分几期为老铁们进行呈现,全面展现异常在各种业务场景下的应...转载 2018-06-04 15:46:53 · 182 阅读 · 0 评论 -
NO.7 异常: 相处之道 | Java敲黑板系列
开场白老铁:昨天我们对异常的来源、定义、控制流执行逻辑等方面进行了梳理。既然异常无法避免,那么如何与异常和平共处就显得尤为重要,今天我们来谈谈与异常的相处之道。其中,“不要忽视”、“不要丢弃”是与异常相处之道中最重要的两条,下面我们分别来说说。不要忽视Java程序产生了异常如果不去捕获,那么发生异常的那个线程就将被中断; 而所谓“不要忽视”,就是当程序发生异常的时候,我们要对...转载 2018-06-04 16:10:17 · 198 阅读 · 0 评论 -
NO.8 异常: 愿您归来还是少年 | Java敲黑板系列
开场白老铁 :可能大家会有这样一个疑问,异常不就是那几点吗?需要这样分几期来介绍吗?我的回答是:需要,非常有需求且必要。对异常的处理直接决定了我们程序的健壮性。想想程序不就是由所谓的“正常”与“异常”组成的吗?再想想我们程序中正常的业务代码占据了多少?异常处理代码又占据了多少?虽然不能说各占“半壁江山”,但是足以让我们以一种虔诚的心态去正确的了解、运用异常技术。今天我们来说说异常两项重...转载 2018-06-04 17:03:14 · 209 阅读 · 0 评论 -
NO.9 异常: 真诚终归敌不过finally套路 | Java敲黑板系列
开场白老铁:finally语句特性是Java语言区别于其他语言很重要的一个功能。该特性有一个非常重要的特点就是:无论异常是否发生,finally子句的代码总会被执行。如果能够合理利用该特性,那么将会给程序员带来无比畅快的体验;但是不合理应用,将会让我们跌进一个个的问题坑。为此,今天我们对finally兄弟进行一场专访,有请!使用finally避免内存泄漏What:我们在前面的专访(...转载 2018-06-04 17:12:45 · 211 阅读 · 0 评论 -
NO.10 异常: 失控 | Java敲黑板系列
开场白老铁 :我们共分了五期对异常进行解释,之前我们不仅对异常的内容进行全面性介绍,最为关键的是我们对异常的应用场景与注意事项进行了对比。这里是“Java敲黑板系列”演播厅,今天将是异常的完结篇,我们再次欢迎异常兄弟,有请!如无必要,勿用异常What:如代码1所示,提供了获取元素的两个方式:一个是采用异常的实现版本;一个是采用通用的实现方式。从功能上来看,两种是对等的。但是,在实际...转载 2018-06-04 18:10:47 · 165 阅读 · 0 评论 -
NO.11 对象是怎样炼成的 | Java敲黑板系列
开场白老铁 :Java是一门完全面向对象的语言,在我们的编程过程中,对象无处不在,为此我们对Java对象已经司空见惯。但是,对于我们经常使用的技术,我们真的理解对象吗?其中,一个常见的对象认识误区就是,我们常会低估JVM创建对象所带来的成本。实际上,JVM在创建一个对象时,其空间、时间成本比我们通常意识到的要高得多。对象在内存中构建过程对象构建并不是我们通常所理解的只是进行内存...转载 2018-06-05 09:33:41 · 152 阅读 · 0 评论 -
NO.12 延迟满足总是好的 | Java敲黑板系列
开场白老铁 :上文“NO.11 对象是怎样炼成的”针对对象在内存中的构建步骤进行了说明,可以发现对象的生成过程比我们想象的要更加复杂。知道了这些步骤有什么用处了?这并不是要告诉我们由于创建一个对象的过程过于复杂而不用对象(如果不用对象,我们又怎么来面向对象编程了?),而是告诫我们在定义一个class时要合理进行“瘦身”并控制重型对象的数量。因此,创建对象无可避免,但是我们可以采取多种方式...转载 2018-06-05 09:45:28 · 139 阅读 · 0 评论 -
NO.26 synchronized关键字画像:正确打开方式
synchronized在非静态上下文中的应用解析首先,我们先看一个代码例子,然后再详细分析一下为什么会这样。代码1://模拟一个线程,探究在编程实践中//synchronized是如何持有对象锁//如何实现同步控制的public class DemoA extends Thread{ private String msg; public DemoA(Str...转载 2018-06-27 15:20:07 · 145 阅读 · 0 评论