Java和Kotlin的區(qū)別

1.繼承用(冒號):代替
java:MainActivity extends Activity
kotlin: MaiActivity :Activity()
2:interface 用(逗號),代替
Java:A interface B{}
kotlin:,B{}
3.override 不現(xiàn)進(jìn) 注解,而是用到了方法中

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
setContentView(R.layout.activity_exercise)
            }

4.沒有switch case,用when代替

    when(view?.id){
            R.id.iv_back -> finish()
}

5.kotlin中沒有object,只有Any
6.和Java一樣不可繼承 final類
7.跟java一樣不能繼承final類    
繼承open abstract 類暖哨,并且默認(rèn)是open,必須要寫修飾符

  1. java中沒能返回值是void,返回值寫在小括號左面 
    kotlin中如果一個參數(shù)沒有指定返回值類型苫费,則這個函數(shù)的返回值類型是 Unit 的被环,當(dāng)然你也可以顯式的指定返回類型為任何類型楼雹。
fun init(isShow: boolean){
    ........
}
  1. java 中實例化對象需要new 關(guān)鍵字
    kotlin不需要new關(guān)鍵字
    10.java 中的for 循環(huán)
for(int i = ; i < 10; i++){} 

kotlin

for (i in 0..99) {}

11.java中方法在括號

  new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        main_srl.setRefreshing(false);
                    }
                }, 5000);

kotlin是這樣寫的

  Handler().postDelayed({ main_srl!!.isRefreshing = false }, 5000) }

12.調(diào)用方法的不同
java中

    main_srl.setOnRefreshListener(

kotlin中

    main_srl!!.setOnRefreshListener {...

二.java中

  main_srl.setRefreshing(false)

kotlin中

  main_srl!!.isRefreshing = false    //雙嘆號的用法荐开?付翁??
  1. 強(qiáng)制轉(zhuǎn)換
    java
mHeader(View)

kotlin

mHeader as View

14.變量
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中的自動提升,強(qiáng)轉(zhuǎn)的說法了D馨恰S犊省!

2. | & 或 和 和 改為了 or 和 and

var testOr = Flag or Flags

var testAnd = Flag and Flags

3.變量 var val (這個類似java中的final)

4.屬性 kotlin沒有g(shù)et,set方法初斑,直接賦值辛润,直接使用
15.三元表達(dá)式
java :

fileVersion = resmessage.getFilesVersion() == null ? "0" : resmessage.getFilesVersion();

kotlin

 fileVersion = if (resmessage.getFilesVersion() == null) "0" else resmessage.getFilesVersion()

16.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"
    })
}

java 中的contains

if(path. contains("http")){
}

kotlin

if("http" in path){
}

18.循環(huán)
  java中:
  1.得到key

  for(String k:maps.keySet()){
            System.out.println(k+":"+maps.get(k));
        }

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對應(yīng)的Value值

   for(Entry entry:maps.entrySet()){
     System.out.println(entry.getKey()+":"+entry.getValue());
     }

4砂竖、通過迭代Key集合訪問Map集合,maps.keySet()返回的是一個Set<String>集合秦叛,Set直接繼承Collection晦溪,所以可以對其進(jìn)行迭代。

    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());
  }

5挣跋、通過迭代Values集合訪問Map集合,maps.values()返回的是Collection<String>狞换,所以可以對其迭代避咆。

    Iterator<String> iter= maps.values().iterator();
          while(iter.hasNext()){
              System.out.println(iter.next());
        }

6、通過迭代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++) {// 初使化樊销;循環(huán)體;循環(huán)條件
          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

19.如何定義變量
java

String  str="hello";

kotlin

var str:String ="hello"

20:final 變量的寫法
java:

final String str="hello";

kotlin

const val str:String ="hello"

21.如何定義函數(shù)
java:

public boolean testString(String name){...}

kotlin

fun testString(name:String) :Boolean{...}

22.如何定義數(shù)組
java:

String[] names = new String[]{"a","b",}

kotlin:

val name:<String>=arrayOf{"a","b"}
//避免byte short 拆箱,裝箱  寫法為 XArray围苫,例如 Int 的定制版數(shù)組為 
val ints = intArrayOf(1,2,3)
val emptyStrings :Array<String?> = arrayOfNulls(10)
//Array T 即數(shù)組元素的類型裤园。另外,String? 表示可以為 null 的 String 類型

22.如何實例化類
java:

Test test=new Test();

kotlin:

var test= Test();

23.如何寫 Getter 和 Setter 方法
java

 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
}

24.如何延遲初始化成員變量
java:定義的類成員變量如果不初始化剂府,那么基本類型被初始化為其默認(rèn)值

int 0;boolean false; String null;

Kotlin 當(dāng)中直譯為:

class Hello{
  private var name:String? = null;
}
//如果不使用可控類型拧揽,需要加 lateinit 關(guān)鍵字
class Hello{
  private lateinit var name:String }
//lateinit 是用來告訴編譯器,name 這個變量后續(xù)會妥善處置的腺占。

25.如果我要想定義一個可以延遲到一定實際再使用并初始化的 final 變量淤袜,這在 Java 中是做不到的
Kotlin 有辦法,使用 lazy( 懶加載) 這個 delegate 即可:

class Hello{
  private val name by lazy{
    NameProvider.getName()
}

26.如何獲取class的實例
java中可以 類名.class ,對象.getClass();Class.forName("");
剛剛接觸 Kotlin 的時候衰伯,獲取 Java Class 的方法卻是容易讓人困惑:

class Hello{
val clazz = Hello::class.java  
// 拿到的是 Kotlin 的 KClass
}

如果想要拿到 Java 的 Class 實例铡羡,那么就需要前面的辦法了

  1. ?.和 !意鲸!. 的區(qū)別烦周?
    首先聲名在java中是沒有這個語法的,
      在kotlin中說下它們之間的不同
      if( is != null) is.change(); 在kotlin中是這樣的 is?.change()
      !!.就是非空判斷了
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末临扮,一起剝皮案震驚了整個濱河市论矾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌杆勇,老刑警劉巖贪壳,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蚜退,居然都是意外死亡闰靴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進(jìn)店門钻注,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚂且,“玉大人,你說我怎么就攤上這事幅恋⌒铀溃” “怎么了?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵捆交,是天一觀的道長淑翼。 經(jīng)常有香客問我,道長品追,這世上最難降的妖魔是什么玄括? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮肉瓦,結(jié)果婚禮上遭京,老公的妹妹穿的比我還像新娘胃惜。我一直安慰自己,他們只是感情好哪雕,可當(dāng)我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布船殉。 她就那樣靜靜地躺著,像睡著了一般热监。 火紅的嫁衣襯著肌膚如雪捺弦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天孝扛,我揣著相機(jī)與錄音列吼,去河邊找鬼。 笑死苦始,一個胖子當(dāng)著我的面吹牛寞钥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播陌选,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼理郑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了咨油?” 一聲冷哼從身側(cè)響起您炉,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎役电,沒想到半個月后赚爵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡法瑟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年冀膝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霎挟。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡窝剖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出酥夭,到底是詐尸還是另有隱情赐纱,我是刑警寧澤,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布熬北,位于F島的核電站千所,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蒜埋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一最楷、第九天 我趴在偏房一處隱蔽的房頂上張望整份。 院中可真熱鬧待错,春花似錦、人聲如沸烈评。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讲冠。三九已至瓜客,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竿开,已是汗流浹背谱仪。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留否彩,地道東北人疯攒。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像列荔,于是被迫代替她去往敵國和親敬尺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容