JAVA學習筆記(二)

前言:

這幾天看了Java的基本語法和一些特性,今天就比較下和OC與C的不同點,方便自己記憶。

一、基本語法

先從最大的不同點開始,在Java中一個.java文件相當于OC/C的.h和.m,Java類的屬性、方法都在一個代碼塊中,比如下面這段代碼

public class Animal {//Animal類
    //屬性
    String name;
    //屬性的getter與setter方法
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    //實例方法
    public void eatFood(){
        System.out.println(this.name + "吃飯");
    }
    //方法的重載
    public void eatFood(String foodName) {
        System.out.println(this.name + foodName);
    }

    @Override
    public String toString(){
        return "12345678";
    }
}

而不同于OC的語法,把屬性、方法等的聲明與實現(xiàn)分割到.h與.m文件中,不過據(jù)我所知,C++、C#等高級語言在這塊和Java如出一致,也許只有OC秉承著C的精神還把聲明與實現(xiàn)分成兩個文件。

1.權限修飾符

在OC中我們通過public、private、protecteddefault(缺?。?/code>的修飾符確定屬性的權限,方法通過是否在.h中聲明來區(qū)分是否可以被別的類調用。而在Java中,publicprivate、protected不僅可以確定屬性的權限,還可以確定類與方法的權限。
對于屬性和方法而言,修飾符確定的權限如下:

修飾符 類內部 同一個包 子類 任何地方
private YES
default YES YES
protected YES YES YES
public YES YES YES YES

對于類而言只能使用publicdefault,public可以在任何地方被訪問(前提當然是引用類所在的包),default只可以被同一個包內部的類訪問。

2.運算符與條件判斷語句

這兩個放一塊說是因為基本上和OC一樣,只是Java的switch語句可以以字符串作為判斷條件。數(shù)組上也和C語言一致,在初始化的時候大小就固定,不能在擴充。

3.重載

這是OC與Java很大的一個不同點,因為OC是沒有重載這個概念的,在Java中同一個類中滿足、方法名相同、參數(shù)列表不同這三個條件就構成重載,比如下面這個兩個方法,一個無參,一個有個String類型的參數(shù),個人覺得很實用:

    public void eatFood(){
        System.out.println(this.name + "吃飯");
    }
    public void eatFood(String foodName) {
        System.out.println(this.name + foodName);
    }

4.this與super

這里和OC很像,this表示調用this所在代碼塊的對象,和OC中的self一致,super表示調用super所在代碼塊的對象的父對象,和OC中的super一致。

5.其他一些諸如局部變量、形參、實參等概念據(jù)我所知的幾種語言是一致的,在此不在贅述

二、類的成員

1.類的屬性

在第一段代碼和上述的描述中我們可以看到類的屬性和OC一樣,有getter與setter方法,需要注意的是直接調用屬性是不會走getter或setter方法的,需要手動的去調用getter與setter方法,也許是因為Java沒有OC中@property自動合成_屬性而導致這樣設計的原因吧。

2.類方法與實例方法

在Java中,類方法通過static聲明,比如下面的代碼

public class Animal {//Animal類
    //實例方法
    public void eatFood(String foodName) {
        System.out.println(this.name + foodName);
    }
    //類方法
    public static void eat(String foodName) {
        System.out.println(foodName);
    }
}

在調用上也和OC非常相似,OC通過[對象 消息]調用方法,而Java通過對象.消息調用方法

public class TestAnimal {
    public static void main(String args[]){
        Animal animal = new Dog();

        animal.eatFood();
        animal.eatFood("骨頭");
        Animal.eat("骨頭");
    }
}

3.構造器

乍看上去很高端的樣子,其實和OC中alloc] init]的作用是一致的,為對象分配內存空間初始化,語法是這樣的,比如Animal類的構造器為public Animal(),每個類默認有無參的構造器,有參的構造器可以是這樣的public Animal(String name),多個構造器之間構成重載。

三、面向對象的特征性

我們都知道OOP有三大特征性:封裝、繼承與多態(tài),那么Java相比OC有什么不同呢?先拋出結論,個人覺得是沒什么區(qū)別的,個人認為封裝、繼承與多態(tài)更側重于思想,而不局限于語言,語法上雖然有點區(qū)別,但是只是表面上不同罷了。

1.封裝

Java中有個包(package)的概念倒值得一說,為了更好地組織類,Java 提供了包機制,和C++的命名空間有點類似。通常Javaer把功能相似或相關的類或接口組織在同一個包中,方便類的查找和使用。不同的包中的類的名字是可以相同的,這相比于OC而言,實在是個很大的亮點。

2.繼承

Java通過 class Dog extends Animal來實現(xiàn)繼承,Dog類繼承于Animal類,和OC一樣,Java中的父類引用也可以指向子類對象,子類繼承父類公開的屬性和方法,并且Java也支持單繼承,OC通過擴展與類別解決OC單繼承的局限性,而Java通過接口解決單繼承的局限性,23333。

3.多態(tài)

什么是多態(tài),當編譯時的類型與運行時的類型不一致,就會出現(xiàn)多態(tài),子類對象可以通過父類引用可以調用父類被重寫的方法,應用上非常廣泛。

總結:

這幾天差不多就看了這些東西吧,有些東西沒寫出來,太零散了,總得來說語法上沒多大差別,下周爭取說一些Java特有的東西。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1.十進制-->二進制:十進制轉為二進制主要是對十進制數(shù)進行除2運算 2.二進制-->十進制:二進制乘以2的過程 ...
    晨星資源閱讀 469評論 0 0
  • 面向對象主要針對面向過程。 面向過程的基本單元是函數(shù)。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,228評論 0 4
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,853評論 18 399
  • 今天上午爸爸帶著我們和其他人一起去電影院看新的電影叫做《紅海行動》,可是我們到的時候已經(jīng)開始了很長時間了...
    博涵2008閱讀 253評論 0 0

友情鏈接更多精彩內容