开发语言系列
介绍Java、Swift和Kotlin等编程语言
xiangzhihong8
著有《React Native移动开发实战》、《Kotlin入门与实战》、《Weex跨平台开发与实战》、《React Native开发进阶》和《Flutter跨平台开发实战》,正努力完成《Android应用架构实战》
-
原创 Java 11新特性
概述美国当地时间9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布,可在生产环境中使用!这是自 Java 8 后的首个长期支持版本,将支持到2026年,可以使用下面的地址进行下载:Java 11官方下载版本更新说明在Java的版本上,按照官方的说法,Java 的版本发布周期变更为每六个月一次 —— 每半年发布一个大版本,每个季度发布一个中间特性版本,并且承诺不...2018-09-30 16:33:50505
0
-
原创 Kotlin Native实战开发
注:本部分内容来源于《Kotlin入门与实战》,预计9月上市。16.1 Kotlin Native16.1.1 Kotlin Native简介Kotlin Native是一种将Kotlin源码编译成不需要任何VM支持的目标平台二进制数据的技术,编译后的二进制数据可以直接运行在目标平台上,它主要包含一个基于LLVM的后端编译器的和一个Kotlin本地运行时库。设计Kotlin Nat...2018-07-31 21:25:3010891
0
-
原创 Java基础之HashTable与ConcurrentHashMap解析
HashTable和HashMap的区别在面试的过程中,经常会被问到HashTable和HashMap的区别,下面就这些区别做一个简单的总结。1、继承的父类不同Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类,但二者都实现了Map接口。2、线程安全性不同Hashtable 中的方法是Synchronize的,而HashMap...2018-05-30 14:49:30778
0
-
原创 JVM 运行机制及其原理
最近出去面试,总被问到Java JVM相关的东西,什么JVM的内存模型、JVM的内存分配、内存回收、内存回收算法…搞得我一头雾水,早些年还看过一些,蹭着有时间给大家也给自己总结下JVM相关的知识。JVMJVM是Java Virtual Machine(Java虚拟机)的缩写,是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机主要由字节码指令集、...2018-05-22 22:15:0922547
2
-
原创 浅谈Java动态代理
动态代理其本质是设计模式中的代理模式,主要由抽象角色、代理角色和真实角色组成:抽象角色(Subject):声明真实对象和代理对象的共同接口,这样可在任何使用真实对象的地方都可以使用代理对象。代理角色(Proxy):代理对象内部含有真实对象的引用,从而可以在任何时候操作真实对象。代理对象提供一个与真实对象相同的接口,以便可以在任何时候替代真实对象。代理对象通常在客户端调用传递给真实对象之前或...2018-04-13 10:29:30266
0
-
原创 SpringDataJPA+EasyUi实现CRUD操作
Spring Data JPAJPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合ORM技术。Spring Data JPA是Spring基于Hibernate开发的一个JPA框架,Spring Data JPA 是Spring...2018-03-21 15:16:20409
0
-
转载 Kotlin学习资料
目录awesome-kotlin-android关于 目录开源库框架DSL扩展UI 通用库动画Toolbar按钮依赖注入数据绑定代理数据库网络日志函数式编程下载图片拍照工具其他完整 appDEMO书籍视频开源库框架KBinding - 使用kotlin实现的Android MVVM框架Kotlin-An...2018-03-01 09:30:24379
0
-
转载 使用Gradle方式构建Kotlin缓存
Kotlin 1.2.21 允许 Kotlin 项目使用构建缓存,通过 Gradle 的构建缓存功能,可以提升 Kotlin 代码的编译速度,加快开发周期。本文将结合实际例子,介绍利用 Gradle 加速 Kotlin 代码编译的原理、配置示例以及在 IDE 中的使用方法。原理构建缓存的工作原理是在缓存中存储编译过的类、测试结果和其它构建工序,同时记录所有的任务输入,包括输入文件内容、相关...2018-02-21 14:43:401327
0
-
原创 将Kotlin代码编译成Javascript 代码
在Kotlin和Javascript平台的互操作过程中,往往会涉及Kotlin代码和 Javascript 代码相互转换的过程,本文主要介绍如何将Kotlin代码编译成Javascript 代码。1,创建JavaScript的应用程序首先创建一个新的应用程序或目标JavaScript模块时,并需要选择Kotlin - JavaScript作为编译运行目标。 默认情况下,插件选择与...2018-02-09 16:33:593499
0
-
原创 Google发布Android KTX预览版
前天,Google 发布了 Android KTX 预览版,Android KTX 是一组扩展程序,它能使 Android 上的 Kotlin 代码更简洁,从而提高开发者的编程体验。大家知道,Google在2017年的Google I/O大会上将Kotlin列为第一开发语言之后,便不遗余力的支持Kotlin。Android KTX 中支持 Android 框架的部分现在可在 GitHub 库中2018-02-07 11:10:13716
0
-
翻译 Kotlin与Java互操作
互操作就是在Kotlin中可以调用其他编程语言的接口,只要它们开放了接口,Kotlin就可以调用其成员属性和成员方法,这是其他编程语言所无法比拟的。同时,在进行Java编程时也可以调用Kotlin中的API接口。Kotlin调用JavaKotlin在设计时就考虑了与Java的互操作性。可以从Kotlin中自然地调用现有的Java代码,在Java代码中也可以很顺利地调用Kotlin代码。2018-01-30 11:26:151929
0
-
原创 Kotlin DSL详解
DSL简介所谓DSL领域专用语言(Domain Specified Language/ DSL),其基本思想是“求专不求全”,不像通用目的语言那样目标范围涵盖一切软件问题,而是专门针对某一特定问题的计算机语言。总的来说 DSL 是为了解决系统(包括硬件系统和软件系统)构建初期,使用者和构建者的语言模型不一致导致需求收集的困难。 举一个具体的例子来说。在构建证券交易系统的过程中,在证券交易活2018-01-11 11:00:493349
0
-
原创 ScheduledThreadPoolExecutor原理探究
简介ThreadPoolExecutor是Executors中一部分功能,下面来介绍另外一部分功能也就是ScheduledThreadPoolExecutor的实现,后者是一个可以在一定延迟时候或者定时进行任务调度的线程池。Executors其实是个工具类,里面提供了好多静态方法,根据用户选择返回不同的线程池实例。 ScheduledThreadPoolExecutor继承了Thread2018-01-07 16:48:361152
0
-
原创 Kotlin基础之内联函数
内联函数使用高阶函数会给运行时带来一些坏处:每个函数都是一个对象,捕获闭包(如:访问函数体内的变量),内存分配(函数对象或Class),虚拟调用引入的运行过载。 使用内联Lambda表达式在多数情况下可以消除这种过载。比如下面的函数就是这种情况下的很好的例子,lock()函数可以很容易地在调用点进行内联扩展。lock(l){ foo() }编译能够产生下面的代码,而不是创建一个函数对象参数,生成调用2018-01-04 11:19:00654
0
-
原创 前缀、中缀、后缀表达式
在函数式编程语言中,为了表示方便,出现了一些新的语法格式。所谓前缀、中缀、后缀表达式,它们之间的区别在于运算符相对与操作数的位置不同,为了说明它们的概念,首先来看一下中缀表达式。所谓中缀表达式,就是将函数名放到两个操作数中间的表达式,其中,左侧的操作数代表函数对象或值,右侧的操作数代表函数的参数值。例如:(3 + 4) × 5 - 6 就是中缀表达式- × + 3 4 5 6 前缀表达式3 42018-01-03 10:05:521260
0
-
原创 Kotlin 1.2 新特性
在Kotlin 1.1中,团队正式发布了JavaScript目标,允许开发者将Kotlin代码编译为JS并在浏览器中运行。在Kotlin 1.2中,团队增加了在JVM和JavaScript之间重用代码的可能性。现在,使用Kotlin编写的代码,可以在所有的应用程序中(包括后端,浏览器前端和Android移动应用程序)中重复使用。想要体验Kotlin1.2新功能的同学,可以下载官方提供的In2017-12-30 12:16:281455
0
-
原创 Kotlin之提供委托
通过定义 provideDelegate 操作符,可以扩展创建属性实现所委托对象的逻辑。 如果 by 右侧所使用的对象将 provideDelegate 定义为成员或扩展函数,那么会调用该函数来 创建属性委托实例。provideDelegate 的一个可能的使用场景是在创建属性时(而不仅在其 getter 或 setter 中)检查属性一致性。例如,如果要在绑定之前检查属性名称,可以这样写:clas2017-12-28 16:55:521107
0
-
原创 Kotlin基础之委托
委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。类委托委托模式是替换继承的较好的设计模式,Kotlin天生支持委托模式,无须任何模板代码。类Derived可以继承Base接口,委托所有public方法给指定对象。例如:interface Base { fun print()}class BaseImpl(val2017-12-27 21:29:101127
0
-
转载 Kotlin基础之泛型
泛型与Java一样,Koltin的类也有类型参数。例如:class Box<T>(t: T){ var value = t}常规来说,创建这样的类,需要提供具体的类型。例如:val box: Box<Int> = Box<Int>(1)当类型可以从构造参数或其他上下文中推断出时,可以忽略类型参数。上面的代码可以简化为:val box = Box(1)型变Java类型系统中最复杂的其中一个部2017-12-25 15:45:09773
0
-
原创 Koltin数据类之解构申明
所谓的解构声明就是将一个对象解构(destructure)为多个变量,也就是意味着一个解构声明会一次性创建多个变量.简单的来说,一个解构声明有两个动作:声明了多个变量将对象的属性值赋值给相应的变量例如:val (name, age) = person这种语法被称为解构声明。解构声明一次创建多个变量。比如声明name和age两个新的变量,可以单独使用。println(name)println(2017-12-16 22:38:25703
0
-
翻译 Kotlin的委托属性和区间
委托属性委托属性 是一种通过委托实现拥有 getter 和可选 setter 的 属性,并允许实现可复用的自定义属性。例如:class Example { var p: String by Delegate()}委托对象必须实现一个拥有 getValue() 方法的操作符,以及 setValue() 方法来实现读/写属性。些方法将会接受包含对象实例以及属性元数据作为额外参数。当一个类声明委2017-12-12 11:33:14834
0
-
原创 Kotlin之Elvis 操作符
Elvis 操作符的优先级首先要注意到,Elvis 操作符的优先级是比较低的,特别是比加减乘除的运算符低,混合运算时一定要记得加上括号。比如:fun <T> Iterable<T>.contentHashCode(): Int { return fold(1) { hash, element -> hash * 31 + (element?.hashCode(2017-12-02 23:36:543095
1
-
转载 Kotlin语法基础之运算符
运算符计算机程序中最小的程序单位成为表达式,每个表达式都可以由两部分组成,即操作数和运算符。操作数可以是变量、常量、类、数组、方法等,甚至是其他表达式。而运算符则用于支出表达式中单个或者多个操作数参与运算的规则,表达式通过运算之后产生的值依赖于表达式中包含的运算符的优先级和结核性。Kotlin语言包含了Java语言中的所有运算符的特性,并结合C语言的优点,增加自定义运算符的逻辑。这些运算符之中,主要2017-11-30 21:05:254928
0
-
原创 Kotlin语法基础之控制流
Kotlin 的控制流与 Java 的控制流基本相同,只是使用 when 代替了 switch。当然,在 Kotlin中,if 和 when 不仅仅可以作为语句使用,还可以作为表达式使用,这些内容会在本节详细讲解。条件语句在 Kotlin 中,if 语句本身就是表达式,有返回值,因此,Kotlin 并不需要像 Java 那样提供三元操作符(condition ?then: else)。下面是传统的2017-11-30 13:38:06911
0
-
原创 Kotlin 包和 import 语句使用
Kotlin 包和 package 语句Kotlin 包与 Java 包的概念是一样的,都表示文件结构(语法上并不严格要求),可以起到区分同名源代码文件、组织项目结构的作用。不过,由于允许包级函数和包级属性的存在,Kotlin 包的内容更加丰富,不像 Java 包只包含类和接口。与 Java 源文件相同,Kotlin 源文件至多有一个 package 语句,必须放在第一行(除注解外),多个文件层次间2017-11-29 16:31:343275
1
-
原创 深入理解Java之JVM堆内存分配
Java堆是被所有线程共享的一块内存区域,所有对象和数组都在堆上进行内存分配。为了进行高效的垃圾回收,虚拟机把堆内存划分成新生代、老年代和永久代(1.8中无永久代,使用metaspace实现)三块区域。 Java把内存分成两种:栈内存和堆内存。关于堆内存和栈内存的区别与联系。简单的来讲,堆内存用于存放由new创建的对象和数组,在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。而栈内存由使用的2017-04-20 22:16:5614260
1
-
原创 深入理解Java之垃圾回收
概述由于JVM中垃圾收集器的存在,使得Java程序员在开发过程中可以不用关心对象创建时的内存分配以及释放过程,当内存不足时,JVM会自动开启垃圾收集线程,进行垃圾对象的回收。 那么垃圾回收线程到底是什么时候触发,并如何实现垃圾回收的呢?本文将对openjdk的源码进行分析,并通过代码分析Java垃圾回收的过程。VMThreadVMThread主要负责调度执行虚拟机内部的VM线程操作,如GC操作等,2017-04-04 22:36:492582
0
-
原创 深入理解Java之jvm启动流程
概述当我们写一个Java类,并重写Main方法,程序就能运行起来。main方法的背后,程序为什么能运行,jvm究竟做了什么处理?要理解这些,就需要了解jvm的设计原理以及启动的流程。虚拟机的启动入口位于share/tools/launcher/java.c的main方法,整个流程分为如下几个步骤: 1、配置JVM装载环境 2、解析虚拟机参数 3、设置线程栈大小 4、执行Java main方法2017-03-24 21:46:2511691
5
-
原创 从代码层读懂HashMap的实现原理
概述 Hashmap继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。它的key、value都可以为null,映射不是有序的。 Hashmap不是同步的,如果想要线程安全的HashMap,可以通过Collections类的静态方法synchronizedMap获得线程安全的HashMap。Map map = Colle2017-03-19 22:25:263451
2
-
原创 java的断言(assert)
概述在C和C++语言中都有assert关键,表示断言。在Java中,同样也有assert关键字,表示断言,用法和含义都差不多。在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默认是不启动断言检查的(这个时候,所有的断言语句都将忽略!),如果要开启断言检查,则需要用开关-enableassert2016-11-30 11:27:363781
1
-
原创 Java注解
自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分。Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据。那么什么是注解呢?举一个简单的例子。@Overridepublic String toString() { return "This is String Represe2016-10-18 19:15:571920
0
-
原创 java 之容器
在Java中,我们想要保存对象可以使用很多种手段。我们之前了解过的数组就是其中之一。但是数组具有固定的尺寸,而通常来说,程序总是在运行时根据条件来创建对象,我们无法预知将要创建对象的个数以及类型,所以Java推出了容器类来解决这一问题。Java的容器类分为List,Set,Queue和Map。我们也称它们为集合类(Collection)。Java使用泛型来实现容器类,例如我们要使用顺序表这一数据结2016-10-10 18:54:301332
0
-
转载 Java 8新特性
编者注:Java 8已经公布有一段时间了,种种迹象表明Java 8是一个有重大改变的发行版。在Java Code Geeks上已经有大量的关于Java 8 的教程了,像玩转Java 8——lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Java 8中抽象类与接口的比较。我们也在其他地方引用了15个必读的Java 8教程。当然,我们也探究了Java2016-09-17 14:07:561258
0
-
原创 浅谈SystemClock 和Thead的区别和联系
其实将SystemClock 和Thead直接放在一起是不合适的,我们首先来看下他们所在的api。public final class SystemClock extends Objectjava.lang.Object? android.os.SystemClock我们首先来看一下常用的一些时钟类:1、System.curr2016-08-15 16:36:223196
0
-
原创 volatile和synchronized的区别和联系
1,volatile 它所修饰的变量不保留拷贝,直接访问主内存中的。 在Java内存模型中,有main memory,每个线程也有自己的memory (例如寄存器)。为了性能,一个线程会在自己的memory中保持要访问的变量的副本。这样就会出现同一个变 量在某个瞬间,在一个线程的memory中的值可能与另外一个线程memory中的值,或者main memory中的值不一致的情况。2016-08-05 09:17:293704
0
-
原创 彻底搞清楚 RxJava 是什么东西
其实从rxjava14年出现到现在,我是去年从一个朋友那里听到的,特别是随着现在app项目越来越大,分层越来越不明确的情况下,rxjava出现了,以至于出现了rxandroid。其实如果你了解观察者模式的话,rxjava并没有你说的那么神秘。再次,我对rxjava并不崇拜,我的原则是怎么写代码简单,代码结构清晰,维护简单,就是好框架。讲rxjava之前首先说一下Android mvp开发模式。2016-07-30 22:21:486658
0
-
原创 netty对http协议解析原理解析
本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能。1 http协议1.1 描述 标示ASCII描述字符CR 13Carriage return (回车) \n2016-07-25 23:44:3318942
11
-
原创 java垃圾回收机制,以及常用的回收算法
记得之前去平安面试的时候,面试官问到了垃圾回收,我当时也就是说说了垃圾回收的原理,但是具体有哪些实现策略,我当时是懵的。概念:Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。我们用System.gc()或者Runtime.getRuntime().gc() 来通知垃圾回收机(JVM)回收垃圾。很多人说垃圾回收回收的2016-07-06 22:23:433651
0
-
原创 Java泛型和通配符那点事
泛型(Generic type 或者generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。 可以在集合框架(Collection framework)中看到泛型的动机。例如,Map类允许您向一个Map添加任意类的对象,即使最常见的情况是在给定映射2016-06-24 08:45:152650
0
-
原创 java 多线程和线程池
● 多线程多线程的概念很好理解就是多条线程同时存在,但要用好多线程确不容易,涉及到多线程间通信,多线程共用一个资源等诸多问题。使用多线程的优缺点:优点:1)适当的提高程序的执行效率(多个线程同时执行)。2)适当的提高了资源利用率(CPU、内存等)。缺点:1)占用一定的内存空间。2)线程越多CPU的调度开销越大。3)程序的复杂度会上升。对于多线程的示例代码感兴2016-06-23 00:01:472521
1