1. 程式人生 > >Java 和 IOS 區別

Java 和 IOS 區別

Java介面與Objective-C正式協議類似,因為都需要實現     一組方法。Java具有抽象類,但Objective-C沒有。Java具有類變數,但Objective-C中,可以使用檔案範圍內的全域性變數併為它們提供對應的訪問器。Objective-C的公共和私有方法的形式比較鬆散。在Objective-C中,物件支援的任何方法都可以被呼叫,即使它們沒有以任何外部形式出現(例如標頭檔案中)。Java允許宣告final類,阻止更改其中的任何子類,而Objective-C則與此相反,允許在執行時向任何類新增方法。

       Objective-C中類的實現方式可以分成兩個檔案,標頭檔案和自身的實現檔案。但並不是一定要這樣劃分(例如某些小的私有類),這在本書的某些程式碼中意境有所反映。標頭檔案(帶有.h副檔名)保留類的公開資訊,例如使用此類的程式碼講使用的任何新的列舉、型別、結構,以及程式碼。其他程式碼段使用前處理器(#import)匯入該檔案。Java中缺少C前處理器。C前處理器是一種文字替換工具,它能在C、Objective-C和C++原始碼進行編譯器之前,先對它們進行自動處理,以#開頭的指令表示一個前處理器命令。C前處理器是一個功能非常強大但又危險的工具。很多程式設計人員都認為java中缺少前處理器是一個良好的特性。

        在java中,幾乎所有錯誤都是通過一場來處理的。而在Objcective-C中,錯誤處理的方式取決於所使用的API。Unix API通常會返回值-1和一個全域性錯誤編號(error),以設定某個特定的錯誤,Cocoa API通常僅在程式設計人員出現或無法清除時才丟擲異常。Objective-C語言提供的異常處理特性與java及C++類似,採用@try、@catch、和@finally結構。

         在Objective-C中,空(零)物件採用nil表示,可以向nil物件傳送訊息,而不必擔心出現NullPointerException異常。向nil物件傳送的訊息代表停止操作指令,因此,不必檢查傳送的訊息是否為NULL。

在Objective-C中,通過使用類別向現有類中新增方法,可以改變類的行為。 Objective-C中沒有類似於final的類。因為編譯器需要知道超類定義的物件的大小,所以任何類只要包含子類標頭檔案,就可以把它設定為子類。

       實際上,相對於java而言,在Objective-C中很少使用子類化行為。因為,通過類別和動態執行時機制,可以想任何物件傳送任何訊息,可以將某些功能放到含有較少功能的類中,也可以將功能呢放到最有意義的類中。例如:可以在NSString上加入類別來新增反轉字串或刪除所有空格等特徵,然後可以在任何NSString類中呼叫該方法,無論呼叫來自何處。當然,你也可以使用自己的字串子類來提供那些特性。

        一般來說,只有當建立某個全新的物件(位於物件層次結構的頂部),或者需要從根本上改變某個物件的行為,或者由於類不能實現某個功能而需要使用子類時,才需要在Cocoa中設定子類,例如:Cocoa使用NSView類機構使用者介面元件,卻無法實現它的dramRect:方法。因此,需要試這NSView的子類並重寫dramRect:方法來繪製檢視。但對其他大多數物件,通常採用委託和資料來源的方式。由於Objective-C可以想任何物件傳送任何訊息,物件不必含有特定的子類或遵從特定的介面,這樣,單個類就可以成為任意個不同物件的委託和資料來源。

       因為類別中意境聲明瞭資料來源和委託方法,因此,不必實現所有的資料來源和委託方法,在Objective-C中,Cocoa程式設計很少使用空存根方法,某些方法會在嵌入式物件中呼叫相同的方法來使編譯器能夠順利底適應一種正式協議。

        當然,功能越強,責任越大。Objective-C採用手動保留、釋放和自動釋放的記憶體管理系統,這樣容易產生一些棘手的記憶體錯誤,在其他類中新增類別是一種功能強大的工作機制,但如果隨意濫用,會降低程式碼的可讀性,導致其他人無法理解。另外,Objective-C是以C為基礎的,因此,可以使用C語言的所有特性,同事包括使用前處理器可能帶來的危險,並可能出現與指標相關的記憶體管理錯誤。

相關推薦

Java IOS 區別

Java介面與Objective-C正式協議類似,因為都需要實現     一組方法。Java具有抽象類,但Objective-C沒有。Java具有類變數,但Objective-C中,可以使用檔案範圍內的全域性變數併為它們提供對應的訪問器。Objective-C的公共和私有方

JAVAC++區別

數據類型 代碼 基礎 自身 繼承 字符串 崩潰 支持 阻止 Java和C++都是面向對象語言。也就是說,它們都能夠實現面向對象思想(封裝,繼乘,多態)。而由於c++為了照顧大量的C語言使用者, 而兼容了C,使得自身僅僅成為了帶類的C語言,多多少少影響了其面向對象的徹底性!J

java中ArrayListLinkedList區別

插入 list 新的 查找 arr tro 基於 列表 時間復雜度 ArrayList和LinkedList最主要的區別是基於不同數據結構 ArrayList是基於動態數組的數據結構,LinkedList基於鏈表的數據結構,針對這點,從時間復雜度和空間復雜度來看主要區別:

201671010139 2016-2017-2 JAVA C語言的語法區別

tro 特點 建立 優點 cor ext 虛函數 ref strong   java和c語言的語法上有很多相似的地方,但也有很多不同。 一,在初始值的區別   在C語言中,是可以不初始化使用的   而在JAVA中,是必須初始化值的 二,在抽象方法或抽象類的區別   C語言的

androidIOS長連接區別

csdn 等等 一個 bsp 存在 服務 我們 長連接 基礎 http://blog.csdn.net/zhangzeyuaaa/article/details/39028369 首先我們必須知道,所有的推送功能必須有一個客戶端和服務器的長連接,因為推送是由服務器主動向客戶

淺談java中的"=="eqals區別

short copy 覆寫 main 否則 變量 程序 bar gif 在初學Java時,可能會經常碰到下面的代碼: 1 String str1 = new String("hello"); 2 String str2 = new String("hello");

java中equals,hashcode==的區別

nat 等號 bsp alt star object 名稱 改變 set 1、== java中的數據類型,可分為兩類: 1.基本數據類型,也稱原始數據類型 byte,short,char,int,long,float,double,boolean 他們之間的比較,應用雙

JavaC++的區別

必須 java 增強 然而 開發 idt pac 結合 面向對象的語言 1.指針 JAVA語言讓編程者無法找到指針來直接訪問內存,並且增添了自動的內存管理功能,從而有效地防止了c/c++語言中指針操作失誤,如野指針所造成的系統崩潰。但也不是說JAVA沒有指針,虛擬機內部還是

java web基礎學習 ForwardRedirect區別

響應 對象 一次 servlet t對象 資源 http 發的 請求 Forward和Redirect代表了兩種請求轉發方式:直接轉發和間接轉發。對應到代碼裏,分別是RequestDispatcher類的forward()方法和HttpServletRequest類的sen

java中equals==的區別

ML int .net 重寫 com span double str 文獻 (表達可能存在錯誤,需進一步完善) 1、首先搞清楚java裏面的數據類型包括: 基本數據類型和引用數據類型 2、數據類型 基本數據類型: byte,short(2 byte),int(4 byt

Java中ArrayListLinkedList區別(轉)

java linked .com -s lan font array href spa 具體詳情參考原博客: http://pengcqu.iteye.com/blog/502676Java中ArrayList和LinkedList區別(轉)

關於Java中for循環的i++++i區別

信息 執行c println 耗時 實例 空間 申請 開始 for 我們應該都知道i++和++i的區別是: ++i是先執行 i = i +1 再使用 i 的值,而 i++ 是先使用 i 的值再執行 i = i + 1; for循環的執行順序如下: for(a;b;c) {

oracle日期格式java日期格式區別 HH24:mm:ssHH24:mi:ss的區別

-m sys 查詢 數據查詢 uri select dual article 分鐘 轉載自:https://blog.csdn.net/yubin_yubin/article/details/18655553 在日期數據庫數據查詢出來的時候經常會to_char()一下,格式

Equals == 在java中的區別

java中的資料型別,可分為兩類: 1.基本資料型別,也稱原始資料型別。byte,short,char,int,long,float,double,boolean   他們之間的比較,應用雙等號(==),比較的是他們的值。 2.複合資料型別(類)   當他們用(=

Java之JSONObject存取值以及HashMap區別, optString()getString()區別他的遍歷方式

結論: 1.JSONObject和HashMap用法上是一樣的,用put()方法存對於的Key-values鍵值對,取可用optString(key)和getString(key),get(key),存入的是什麼型別,取出來的時候就是什麼型別 2**.optString()在沒找到k

java中的equals==的區別

 1)對於==,如果作用於基本資料型別的變數,則直接比較其儲存的 “值”是否相等;     如果作用於引用型別的變數,則比較的是所指向的物件的地址   2)對於equals方法,注意:equals方法不能作用於基本資料型別的變數     如果沒有對equals方法進行重寫,則比較的是引用

記錄java中的object類以及waitsleep區別

java.lang.Object public class Object: Object 是類層次結構的根類。每個類都使用 Object 作為超類。所有物件(包括陣列)都實現這個類的方法。 它含有如下的方法: 注意wait方法和sleep方法的區別: s

Java基礎之intInteger區別

1、int和Integer的區別 1、Integer是int的包裝類,int則是java的一種基本資料型別  2、Integer變數必須例項化後才能使用,而int變數不需要  3、Integer實際是物件的引用,當new一個Integer時,實際上是生成一個指標指向此物件;而

Java SE Java EEJava ME的區別

JDK即java development kit.是面向開發人員使用的,提供了java的開發環境和執行環境。 JRE即java runtime enviroment.是面向java程式使用者,是java的執行環境。 JVM即java virtul machine.java虛擬機器

java.util.Datejava.sql.Date區別

1、java.util.Date 是 java.sql.Date 的父類; 2、java.util.Date是常用的表示時間的類;       java.sql.Date是讀寫資料庫用的時間類,它只包含日期而沒有時間部分。 案例: