1.extends 用 (冐號):代替。MainActivity extends Activity, java
如今是 MaiActivity :Activity()android
2.interface 用(逗號),代替。 A interface B{} git
如今是 ,B{}github
3.override 不現進 註解,而是用到了方法中 express
這樣寫 override fun onCreate(saveInstanceState:Bundle?)數組
4. 沒有switch case 了, bash
如今用when() ->app
5.kotlin沒有object類 jvm
如今是Any()沒有Object()
6.跟java同樣不能繼承final類
繼承open abstract 類,而且默認是open,必需要寫修飾符
7.不在有分號,
不在有分號,不在有分號,不過能夠寫的
8. java中沒能返回值是void,返回值寫在小括號左面
如今改爲空方法是Unit,方法用fun1, fun2,代替, 而且返回值要寫在小括號後面
fun Unit(x: Any, y: Any) {
fun Unit(x: Any, y: Any): Int{
返回值能夠用一個表達式寫fun add(x: Int,y: Int) : Int = x + y
9.jave中每珍上對象都要new
kotlin不須要new這個關鍵字
10.在java中給控件不能直接賦值,
在kotlin裏 經過import kotlinx.android.synthetic.main.demo.*
text1.text = "hello world kotlin" 這樣就完成了"hello world kotlin"
11.for循環也不同了 在java中是這樣寫的for(int i = ; i < 10; i++)
Kotlin是這樣寫的for (i in 0..99) {
12.java中方法在括號,
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
main_srl.setRefreshing(false);
}
}, 5000);
kotlin是這樣寫的
Handler().postDelayed({ main_srl!!.isRefreshing = false }, 5000) }
13.調用方法的不一樣,我的目前發現除了調用set..Listener 仍是原來的方法,其它的都改變了
一.
java中
main_srl.setOnRefreshListener(
kotlin中
main_srl!!.setOnRefreshListener {...
二.java中
main_srl.setRefreshing(false)
kotlin中
main_srl!!.isRefreshing = false //雙歎號的用法???
14 .->的用法
java中是這樣寫的
recyclerViewAdapter.setOnItemClickedListener(new HeaderRecyclerViewAdapter.onItemClickedListener() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(MainActivity.this, "position " + position, Toast.LENGTH_SHORT).show();
}
});
kotlin這樣寫的
recyclerViewAdapter.setOnItemClickedListener { view, position -> Toast.makeText(this@MainActivity, "position " + position, Toast.LENGTH_SHORT).show() }
15 . 強制轉換
java中 mHeader(View)
kotlin 中是mHeader as View

Add-non-null aserted 就是改變爲不是空的 mHeader!!
Case expressino 就是強制轉換 mHeader as View
16.變量
1.java中分爲二類(基本,引用)八種(byte short int long flout double char boolean)
2.kotlin 中分有如下不一樣之睡
1.基本類型中 java中有的kotlin也有,就是不能給一個int賦值爲double
var i Int = 1;
var d Double = i .toDouble(); //其它也相似這樣沒有java中的自動提高,強轉的說法了!!!
2. | & 或 和 和 改成了 or 和 and
var testOr = Flag or Flags
var testAnd = Flag and Flags
3.變量 var val (這個相似java中的final)
4.屬性 kotlin沒有get,set方法,直接賦值,直接使用
17. Anko具據說是一個很代替xml繪製ui的強大的類庫
18.java中asycTask
kotlin 中 async{
run(){
uiThread{...}
}}
19.with函數
with是一個很是有用的函數,它包含在Kotlin的標準庫中。它接收一個對象和一個擴展函數做爲它的參數,而後使這個對象擴展這個函數。這表示全部咱們在括號中編寫的代碼都是做爲對象(第一個參數)的一個擴展函數,
咱們能夠就像做爲this同樣使用全部它的public方法和屬性。當咱們針對同一個對象作不少操做的時候這個很是有利於簡化代碼。
20.加強For循環
java中: for(集合 變量:集合名)
kotlin中:
2.獲得value
for(String value:maps.values()){
System.out.println(value);
}
3.獲得key,和value
for(String string:map.keySet()){
Integer integer = map.get(string);
System.out.println(string +"....."+integer);
}
3.1經過Entry集合訪問,對Entry感興趣,能夠訪問與key對應的Value值
for(Entry entry:maps.entrySet()){
System.out.println(entry.getKey()+":"+entry.getValue());
}
四、經過迭代Key集合訪問Map集合,maps.keySet()返回的是一個Set<String>集合,Set直接繼承Collection,因此能夠對其進行迭代。for(變量名 in 變量集合)
21.三元表達式
java中(condition ? then : else)
kotlin中 if (a > b) a else b
fun main(args: Array<String>) {
println(args[0].toInt())
println(args[1].toInt())
println(max(args[0].toInt(), args[1].toInt()))
}
fun max(a: Int, b: Int) = if (a > b) a else b
22. switch case
java中 switch(){
case:
breaak;
}
kotlin 中 when() ->
fun main(args: Array<String>) {
val language = if (args.size == 0) "EN" else args[0]
println(when (language) {
"EN" -> "Hello!"
"FR" -> "Salut!"
"IT" -> "Ciao!"
"DU" -> "dub is a very excellent boy"
else -> "Sorry, I can't greet you in $language yet"
})
}
23.在java中是沒有""",這樣的符號
kotlin中:
fun main(args:Array<String>){
val text = """
Tell me and I forget.
Teach me and I remember.
Involve me and I learn.
(Benjamin Franklin).
""".trimMargin()
print(text)
}
24.contait
java String中contains
kotlin
if ("ddd" in array) // collection.contains(obj) is called
println("Yes: array contains ddd")
25.循環
java中:
1.獲得key
for(String k:maps.keySet()){
System.out.println(k+":"+maps.get(k));
}
Iterator<String> iterator = maps.keySet().iterator();
while(iterator.hasNext()){
String key = iterator.next();
System.out.println(key+":"+maps.get(key));
}
Iterator<Map.Entry<String,Integer>> it = map.entrySet().iterator();//Map遍歷
while (it.hasNext()){
Map.Entry<String, Integer> next = it.next();
System.out.println("second type --> "+ "key"+ next.getKey()+",value"+next.getValue());
}
五、經過迭代Values集合訪問Map集合,maps.values()返回的是Collection<String>,因此能夠對其迭代。
Iterator<String> iter= maps.values().iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
六、經過迭代Entry集合訪問Map集合,maps.entrySet()返回的是一個Set<Entry<String, String>>,Set直接繼承Collection,因此能夠對其迭代。
Iterator<Entry<String, String>> it = maps.entrySet().iterator();
while(it.hasNext()){
Entry<String, String> entry = it.next();
System.out.println(entry.getKey()+":"+entry.getValue());
}
7.項目中用到的高級寫法
for (Iterator<String> iterator = map.keySet().iterator(); iterator.hasNext(); ) {
StringBuffer sb = new StringBuffer();
String key = iterator.next();
sb.append("[").append(key).append("]");
for (int k = map.get(key); k < 4; k++) {// 初使化;循環體;循環條件
sb.append(k + ",");
}
}
kotlin中:
fun main(args: Array<String>) {
val numbers = listOf(1, 2, 3)
println(numbers.filter(::isOdd))//是這樣寫的
}
fun isOdd(x: Int) = x % 2 == 0
26.如何定義變量
Java 定義變量的寫法:String string = "hello"
基本等價的 Kotlin 定義變量的寫法:var string :String = "hello"
27.Java 定義 final 變量的寫法:
Java中這麼寫 final String string = "hello"
Kotlin 當中應該這麼寫 const val string:String = "hello"
28.如何定義函數
Java 當中如何定義函數,也就是方法,須要定義到一個類當中
public boolean testString(String name){...
等價的 Kotlin 寫法:
fun testString(name:String) :Boolean{...
29.如何定義數組
Java 的數組很是簡單,固然也有些抽象,畢竟是編譯期生成的類:
String[] names = new String[]{"a","b",}
Kotlin 的數組其實更真實一些,看上去更讓人容易理解:
val name:Array<String> = arrayOf{"a","b"}//避免byte short 拆箱,裝箱 寫法爲 XArray,例如 Int 的定製版數組爲 val ints = intArrayOf(1,2,3)
val emptyStrings :Array<String?> = arrayOfNulls(10)//Array T 即數組元素的類型。另外,String? 表示能夠爲 null 的 String 類型
30.如何寫變長參數
Java 的變長參數寫法以下:
void holle(String...names){...
Kotlin 的變長參數寫法以下:
fun hello(vararg names:String){...
31.如何寫三元運算符
Java 能夠寫三元運算符:
int code = isSuccessfully?200:400;
Kotlin 該怎麼寫呢?
int code = if(isSuccessfully) 200 else 400
31.如何寫 main 函數
Java 的寫法只有一種:
class MainJava{
public static void main(String []args){
...
Kotlin,main 函數的寫法以下:
class MainKotlin{
companion object{
@jvmStatic
fun main(args:Array<String>){
...
32.如何實例化類
Java中:
Dub dub = new Dub();
Kotlin中:
val dub = Dub();
33.如何寫 Getter 和 Setter 方法
Java 的 Getter 和 Setter 是一種約定俗稱,而不是語法特性,因此定義起來相對自由:
public class SetAndGet{
private int x = 0;
publc Int getX(){
return x;
public void setX(int x){
this.x = x;
Kotlin 是有屬性的:
class kotlinSetAndGet{
var x:Int = 0
set(value) {field = value}
get() = field
34.如何延遲初始化成員變量
Java 定義的類成員變量若是不初始化,那麼基本類型被初始化爲其默認值 int 0;boolean false; String null;
public class Hello{
private String name;
Kotlin 當中直譯爲:
class Hello{
private var name:String? = null;//若是不使用可控類型,須要加 lateinit 關鍵字
class Hello{
private lateinit var name:String //lateinit 是用來告訴編譯器,name 這個變量後續會妥善處置的。
35.若是我要想定義一個能夠延遲到必定實際再使用並初始化的 final 變量,這在 Java 中是作不到的
Kotlin 有辦法,使用 lazy 這個 delegate 便可:
class Hello{
private val name by lazy{
NameProvider.getName()
36.如何得到 class 的實例
java中能夠 類名.class ,對象.getClass();Class.forName("");
剛剛接觸 Kotlin 的時候,獲取 Java Class 的方法倒是容易讓人困惑:
class Hello
val clazz = Hello::class.java // 拿到的是 Kotlin 的 KClass
若是想要拿到 Java 的 Class 實例,那麼就須要前面的辦法了。
37.List集合要從新劃分了
不在是List<String>lists = new ArrayList<>();
而是private var list MutableList<Entity> ?= null

38.成員變量的寫法
companion object {
private val TAG = FirstActivity::class.java.simpleName
}//寫在compaintion裏
39.在Kotlin中寫上下文再也不是類名點this了而是
hsMain!!.OnSelectList { text -> Toast.makeText(this@MainActivity, text, Toast.LENGTH_SHORT).show()
40.Kotlin中的空是
Unit
表示至關於void
41.伸展 spread符是什麼鬼 (在數組前面加上 *),Java中但是沒有
val a = arrayOf(1, 2, 3) val list = asList(-1, 0, *a, 4)
42.Kotlin竟支持局部函數,在Java中也是沒有的
fun test(graph:Graph){
fun text(current:Vertex,visited:Set<Vertex>){
if(!visited.add(current) return
for(v in curren.neighbors)
test(v,visited)
test(graph.vertices[0],HashSet())
43. ?.和 !!. 的區別?
首先聲名在java中是沒有這個語法的,
在kotlin中說下它們之間的不一樣
if( is != null) is.change(); 在kotlin中是這樣的 is?.change()
!!.就是非空判斷了
最後是本人在學習中有點迷惑的地方,後續進行完善也但願博友知道的進行講解 QQ:277627117
val qq = et_qq!!.text.toString().trim { it <= ' ' } //這裏的it是什麼意思
fun main(args: Array<String>) {
val oddLength = compose(::isOdd, ::length)// ???
val strings = listOf("a", "ab", "abc")
println(strings.filter(oddLength))
}
fun isOdd(x: Int) = x % 2 != 0
fun length(s: String) = s.length
fun <A, B, C> compose(f: (B) -> C, g: (A) -> B): (A) -> C {
return { x -> f(g(x)) }
}
我的心的