JVM语言Kotlin正式发布

JVM语言Kotlin在2016.2.15发布了他的第一个正式版本1.0,Kotlin弥补了Java的一些缺陷,比起Java更加简单,并且引入了一些函数式语言的特性。接下来就具体介绍一下Kotlin

Kotlin是一种JVM语言

JVM语言有很多,他们都是Kotlin的前辈,比如Groovy、Clojure、Scala
所谓JVM语言,就是编程语言不是Java,但是编译出来的字节码可以在JVM中运行。但是明明都是在JVM里运行,性能再高也高不过Java,那这些JVM语言为什么出现呢,有以下原因:

  • 不用写运行环境,直接用JVM就行,而且JVM的性能经过这些年的优化,已经有长足进步
  • Java语法太过复杂,我觉得每个表达式的分号简直多余
  • Java有一些缺陷,比如所有人都遇到过的空指针问题,我觉得这问题能跟stackoverflow相提并论了
  • 一些新的语言特性,比如函数式编程,Java中还没有普及

当然,一款优秀JVM还需要编写Java和自己之间的语言桥,这样就可以使用现有的大多数Java库了

关于Kotlin

Kotlin是JetBrains(简称JB)开发的语言,JB旗下还有诸多IDE,其中有Java开发环境Intellij IDEA。既然是自家的IDE,自家的语言,IDEA内置Kotlin插件也是理所当然,下载运行IDEA,就可以创建Kotlin项目了
IDEA被誉为最好的Java开发环境(曾经是Eclipse),世界各地都有使用IDEA的开发者,凭借IDEA庞大的的使用者数量,就知道Kotlin有一定的优势
Kotlin的主要竞争对手是Scala,有一部分Java特性,也有一部分函数式编程的特性,属于混合式语言。一方面,Scala因为先出山,所以较为成熟;但另一方面,Kotlin有IDEA的加持,有比Scala更简洁的语法,跟Java有较高的兼容性,相信Kotlin未来一定大有作为

Kotlin的一些语法

1、Hello Kotlin!

版本1:

1
2
3
fun main(args : ArrayList<String>) {
println("Hello Kotlin!")
}

  • 类型在变量名的后面
  • 函数用fun表示
  • 表达式后不一定要有;,你看我这篇文章每段最后都懒得写句号,代码里分号我也肯定是不会写的

版本2:

1
fun main(args : ArrayList<String>) = println("Hello Kotlin!")

  • 当函数里只有一句表达式时,可以用等号取代大括号

2、默认参数

我先写一个函数,可以把两个数相加,返回他们的和

1
2
fun sum(a : Int, b : Int = a) : Int = a + b
fun sum(a : Int, b : Int = a) = a + b

  • 当你不传参数b的时候,b会是a
  • 这Int相当于Java里的Integer
  • 上下两句是一样的,单表达式用等号的情况下,你不写返回值的类型,Kotlin编译器会自己判断返回值

3、指定参数

我现在调用这个sum函数

1
2
3
sum(1, 2) // 结果为3
sum(a = 1, b = 2) // 结果为3
sum(a = 1) // 结果为2

你可以在调用时指定参数名

4、高阶函数和lambda表达式

高阶函数是什么意思,就是这个高阶函数,他的参数可以是函数,他的返回值类型可以是函数
什么又是lambda呢,就是长得像(x: Int, y: Int) -> x + y这样,表示参数为x和y,返回值为x+y的匿名函数

1
2
3
fun doSomething(a : Int = 0, something: (Int) -> Int) : Int {
return something(a)
}

我这是举个例子,现实中可没有这么蠢的函数

  • 这里something,他的类型是一个参数为Int,返回值为Int的函数

我们给他传参

1
2
3
4
doSomething(0, {a -> a * 2})
doSomething(0, {a * 2})
doSomething(0, {it * 2})
doSomething{it * 2}

  • 这三句话是一样的结果
  • 当lambda只有一个参数的时候,可以省略参数
  • 当函数只有一个参数, 且那个参数是lambda时,可以省略括号

    5、匿名函数

上一题除了用lambda表达式,还可以用匿名函数

1
2
doSomething(0, func(a: Int): Int {return a * 2})
doSomething(0, func(a: Int) = a * 2)

Java里面可没有匿名函数,只有匿名对象,在Java里顶多new一个Runnable来当匿名函数

6、字符串

1
2
func hello(data: String) = "Hello ${data}!"
println(hello("Kotlin"))

输出结果为Hello Kotlin!

在字符串中,可以使用$作为占位符,大括号可以省略

当然这些只是部分特性,大家可以先试着用起来了,安装Intellij IDEA就直接能用Kotlin哦

分享到 评论

Android应用版本并存需要的内容

  1. applicationId
  2. Provider的authoritation改为{$applicationId}和BuildConfig.APPLICATION_ID
分享到 评论

试了试FAN墙软件ssh91

原来的pandafan,安全性做的太烂了,只要别人知道了你的端口就能用你的服务。而且,服务态度太烂了,所以不再考虑他。

这次换了一个使用shadowsocks的FAN墙,名为ssh91,同期看了shadowsocks.com他们各有优势。

  • shadowsocks.com: 不限流量

  • ssh91: 支持季票

从价格上,两者差不多,但是因为以前没用过shadowsocks,就抱着试试的心态买了季票。

使用步骤很简单,设置好配置文件,然后设置好PAC,即可。

分享到 评论

Android中使用倒计时

在项目中遇到了问题:发送短信验证码,如何限制一分钟发送一条。

方法一

使用Handler的postDelayed方法。

该方法我也用在nodejs项目中,在一个runnable结束时再调用一遍,就能实现循环

方法二

使用CountDownTimer

这是android自带的倒计时工具。既然能少些点儿代码,何乐不为呢。

用法类似于AsyncTask,十分方便。

分享到 评论

如何避免蛋疼的AndroidStudio第一次打开(安装)

当AndroidStudio第一次打开时,会安装AndroidSdk。但是我们骄傲的中国人,又该怎么访问google呢。为了尽量避免访问google,就跳过第一次打开把。

方法

  1. 进入根目录下bin/
  2. 打开idea.properties
  3. 在末尾添加disable.android.first.run=true
  4. 打开AndroidStudio

可恶的墙

分享到 评论

获取support库的源码

今天遇到个问题,一直用着support库的ActionBarActivity和RecyclerView,ActionBarActivity被改名了,才想到去看源码,看看为什么

使用git,输入以下内容:

1
https://android.googlesource.com/platform/frameworks/support

分享到 评论

重新创建Activity的菜单

问题描述:
今天在MainActivity中加入了四个标签页,想给每个标签页分配不同的ActionBar按钮,这该如何是好。

小知识点1

ActionBar中的按钮,是在menu中设置的。记得给item加上showAsAction:always

小知识点2

这次要介绍Activity的两个函数:onCreateOptionsMenuonPrepareOptionsMenu

  • onCreateOptionsMenu会在菜单创建前调用。
  • onPrepareOptionsMenu会在菜单显示前调用。

问题解决方法

Activity还有一个方法:invalidateOptionsMenu

调用该方法,就会调用onCreateOptionsMenu。所以,切换了标签页后,调用invalidateOptionsMenu方法即可。

分享到 评论

AndroidSDK下载方法

要开发Android,就必须要有Android SDK。要下载Android SDK,就必须连到google。现在google没法上,那是不是没法开发了?

1、过去方法

曾经有一个学校的镜像站,提供了Android SDK的镜像,他名为东软开源镜像站。
全中国那么多学校,那么多开源镜像站,为什么就他个小破学院能有android sdk?有两种可能性,一是,东软学院买了国内Android SDK的版权,二是,他是一个傻逼,根本就不管自己有没有版权。
我认为后者的情况更可能发生。但是不管如何,先用了再说。

步骤:

  1. 设置http代理:
    mirrors.neusoft.edu.cn:80
  2. 勾上强制http,即可。

    2、google未死

google真的上不去了么,非也,我们还是能FAN墙上谷歌的。
既然能上google,就能去android官网下一个sdk。这时,出现了个奇怪的问题,android官网必须要FAN墙,但是从官网下sdk,不需要FAN墙。
这是什么意思呢,ZF只屏蔽了google的web服务而已,google的文件服务没有被屏蔽,所以,只要派人去官网拿个下载链接,大家都能下了。

步骤:

  1. FAN墙,上developer.android.com
  2. 找个链接,停止FAN墙,开始下载

    3、再见吧,东软

这几天不知咋的,东软镜像站慢的像狗一样。那也无所谓了,这种小学院咱才没兴趣呢,反正只要上得去android官网就行了。
同理,Android SDK Manager也可以同样使用。

步骤:

  1. FAN墙,然后Packages->Reload
  2. 停止FAN墙,开始下载

是不是 省力又省心?

分享到 评论

Apache创建虚拟主机(virtual host)

什么叫虚拟主机呢。买过万网的虚拟主机不,就是那种感觉。给你分配一个内网的ip,然后给你划个www空间,就完事了。这里介绍最简单的配置方式

启用vhost模块

打开文件conf/httpd.conf,找到一下行

1
2
# Virtual hosts
Include conf/extra/httpd-vhosts.conf

如果Include前有#,则去掉

配置vhosts

打开文件conf/extra/httpd-vhosts.conf,新建vhost

1
2
3
4
5
6
<VirtualHost <主机ip>:80>
DocumentRoot "<你的路径>"
<Directory "<你的路径>">
Require all granted
</Directory>
</VirtualHost>

有以下注意事项:

  • 主机ip第一字段,必须为127,例如127.1.2.3,但不能是128.1.2.3
  • 上下两个路径必须一样(废话)
  • 之前有人说,把httpd.conf里的require all denied去掉,这样就能用了。我不同意,这样别人就能访问你的服务器的所有文件了。这里,只在VirtualHost里加上文件权限,更为安全。
分享到 评论

配置阿里云的Debian

在这个人人都用云的时代,怎么能不会配置阿里云呢?这次选择了老相好的Debian,只是因为配置起来方便,如果处于其他考虑的话,用centos得了。

首先,买台阿里云

价格十分公道,最便宜的一个月55块。假设我花1W块买个服务器,阿里云够用200个月啊,200个月还能跑的服务器,你是ao史密斯么,你也要用半个世纪。
买好设置root密码。这个密码十分关键,觉得你能否上得了root账户(废话)。

其次,连上服务器

控制台中,你能得到ECS实例的ip地址,如果有域名就更好了,可以用ssh连上这个实例。命令如下:

1
ssh root@*****

然后输入你的root密码。

之后,新建用户

如果你想一直用root用户,没人拦着你,服务器爆了可不是闹着玩的。所以新建几个用户,用以下代码:

1
2
3
adduser ***
apt-get install sudo
adduser *** sudo // 或 gpasswd -a *** sudo

然后就能用新的账户登录了,牛不牛

分享到 评论