程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java程序設計之“對象”篇

Java程序設計之“對象”篇

編輯:關於JAVA

Java是由SUN公司開發成功的新一代編程語言,它最大的特點就是:使用它可在各式各樣不同的機器,不同的操作平台的網絡環境中開發軟件,具有可移植性,高度的安全性,簡單,與體系結構無關,動態執行等一系列特點,Java正逐步成為Internet應用的主要的開發語言。

今天我們來討論一下Java語言當中的對象的概念

萬事萬物皆對象:

Java在程序語言設計上,徹底假設使用者僅以面向對象模式來進行程序設計,在Java中,有一個十分重要的觀念:萬事萬物皆對象,即使Java程序本身,也是一個對象。

1.操控對象的reference:

reference和對象之間的關系,好比電視和遙控器,你可以擁有某referenc,但不見得要連接至某個對象,如果你想產生一個string reference:

例如:string s;

這樣話你就產生了一個reference,但不會產生實際對象,這時,你多半想將它連接到某個新產生的對象去,可以通過new來完成。

例如:string s = new string ("asdf")

2.class:

實際上Java裡你需要做的事情無非就是:定義class,產生對象,將消息發送給對象。如果一切都是對象,為了解決某一類對象的特征,我們需要對其進行定義,這就是class.

例如:class atypename{/*class body*/}

atypename a = new atypename ();

若要指定其數據成語的值,可以用句號來指定,再接成員的名稱:

例如:

class dateonly
  {
   int i;
   float f;
   boolean b;
  }
  
  dateonly d = new dateonly ( ) ;
  d.i = 47;
  d.f = 1.1f;
  d.b = false;

不同於C++的是,在Java中,當變量是class內的基本類型(primitive type) 時,Java將保證它100%有一個省缺值,但若變量只是某個函數定義區內的局域變量時,變量將不會被初始化,你需要給他一個適當值,如果你忘了,Java編譯器將在編譯時,認定其為錯誤,而C++編譯器只會對未初始化的變量給予警告。

3.引用組件(import):

例如:import java.until.arraylist表示你想使用arraylist class,你還可以用*來代替arraylist,以避免逐一聲明(雖然方便,但影響編譯時間)

4."牧羊人"函數 static:

在Java裡,一般情況下,你需要產生某個對象,再通過該對象取用其數據和

函數,但若將某個函數或數據聲明為static.它將不在局限與所需的class object,即使沒有任何object,外界還是可以調用其static函數。

例如:

class statictest { static int i = 47; }
  statictest st = new statictest ( );
  
  這裡st.i和statictest.i作用相同,他們共同指向一塊內存。
  class staticfun
  {
   static void incr( ) { stitictest.i++ }
  }
  staticfun sf = new staticfun ( );

無論是通過對象----sf.incr()還是直接通過class---staticfun,incr ( )調用都是一樣的 。

Java相對C/C++的一些特性:

Java和C++都是混合型程序語言(hybird language),且Java奠基與C++之上,

但Java在OOP上卻更“純粹”一些,C++為了相容與C,包含了許多不適合出現在C++中的特性,這使得C++在某些方面顯得過於復雜。

1.數組(array):

在C/C++中,數組其實就是一快內存,如果在程序中訪問了數組區塊之外的地域或者在初始化之前便使用,會導致許多錯誤的發生。與C/C++不同的是,Java更注重安全性,它保證數組一定會被初始化(當產生references的數組時,其中每個references皆會被設定為null這一特殊值,Java將其視為“不指向任何對象”。在使用任何reference前,你必須先將某個對象指派給它),並使每個數組額外多出一點空間,並在執行時期對對數組索引值進行檢查,從而使程序員無法超越范圍。

2.生存空間(Scoping):

C/C++具備將較大的生存空間中的變量遮蔽起來的能力:

例如:

{
   int x = 1;
   {
   int x = 2;
   }
  }

即使上面這段程序在C/C++中合法,在Java總不能這樣做,編譯器會認為X已經被定義過了,Java認為這樣容易導致對程序的誤解和混淆。在C++中,用完對象後,必須將其摧毀,否則其可能滋生臭蟲,可什麼時候才是最佳時機呢?圍繞在變量壽命上的種種疑問,Java提供了解決方案,Java中有一種所謂的(垃圾回收器)garbage collector,機制,它會逐一檢視所有通過new產生的對象,當不在有任何reference指向它們的時,將釋放這些對象的內存,使程序員不必操心內存回收的問題,因為所有的對象,在你不需要他們的時候,將自動消失。

3.名稱的可視性(Name visibility):

所有程序語言都存在名稱管理的問題,如何區分相同名稱的模塊呢?C裡頭這個問題格外嚴重,為了避免名稱沖突的問題,C++ classes將函數包裝於內,使其他classes內的同名函數隔離,不過由於全局數據和全局函數(global function)的存在,還是有可能發生命名的沖突。於是,C++中引入"命名空間(namesapces)"的概念來解決了這一問題。

為了解決這一問題,Java采用和Internet域名相似的指定詞。事實上,Java的設計者希望你將Internet域名反寫過來。在Java1.0和1.1中,域名最末的com. edu. org. net等等,按照慣例都應該大寫,在Java2時,發現了一些問題,就又變回了小寫。

例如:com.bruceeckel.utility.foibles便置於com/bruceeckel/utility/foibles

這樣使得每個package都成為一個獨一無二的命名空間。每個class也都得到了一個獨一無二的識別名稱。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved