一切都是对象---JAVA编程思想
一切都是對(duì)象
“如果我們說另一種不同的語言,那么我們就會(huì)發(fā)覺一個(gè)有些不同的世界。”——Luduing Wittgerstein(1889-1951)
盡管Java是基于C++的,但是相比之下,Java是一種更“純粹”的面向?qū)ο笤O(shè)計(jì)語言。
Java語言假設(shè)我們只進(jìn)行面向?qū)ο蟮某绦蛟O(shè)計(jì);而C++不同,因?yàn)镃++是C的一個(gè)超集,所以,C++在某些方面顯得過于復(fù)雜。
2.1 用引用操縱對(duì)象
程序員必須注意將要處理的數(shù)據(jù)是什么類型。你是直接操縱元素,還是用某種基于特殊語法的間接表示(例如C和C++這里的指針)來操作對(duì)象?
這一切在Java里都得到了簡(jiǎn)化。一切都被視為對(duì)象,因此可采用單一固定的語法。盡管一切都看做對(duì)象,但操縱的標(biāo)識(shí)符實(shí)際上是對(duì)象的一個(gè)“引用”。形如:String s中的s就是引用。
2.2 必須由你創(chuàng)建所有對(duì)象
一旦創(chuàng)建了一個(gè)引用,就希望它能與一個(gè)新的對(duì)象相關(guān)聯(lián)。通常用new操作符來實(shí)現(xiàn)這一目的。形如:String s = new String("");這種形式。
程序運(yùn)行時(shí),對(duì)象是怎么進(jìn)行放置安排的呢?特別是內(nèi)存是怎樣分配的呢?
有五種不同的地方可以存儲(chǔ)數(shù)據(jù):
以上都在說“引用”對(duì)象,我們看一個(gè)特例:基本類型
為什么要存在基本類型呢?
因?yàn)閚ew將對(duì)象存儲(chǔ)在“堆”里,用new創(chuàng)建一個(gè)小的、簡(jiǎn)單的變量,往往不是很有效。因此,對(duì)于這些類型,Java采用與C和C++相同的方法。也就是說,不用new來創(chuàng)建變量,而是創(chuàng)建一個(gè)并非是引用的“自動(dòng)”變量。這個(gè)變量直接存儲(chǔ)“值”,并置于堆棧中,因此更加高效。
Java的基本數(shù)據(jù)類型所占存儲(chǔ)空間的大小:
這里指出:Boolean只有true或flase,以及Java SE5的自動(dòng)包裝,還有高精度數(shù)字BigInteger和BigDecimal的類型。
BigInteger支持任意精度的整數(shù)。
BigDecimal支持任何進(jìn)度的定點(diǎn)數(shù)。
Java中的數(shù)組
幾乎所有的程序都支持?jǐn)?shù)組。在C和C++中使用數(shù)組是危險(xiǎn)的,因?yàn)镃和C++中的數(shù)組就是內(nèi)存塊。如果一個(gè)程序要訪問其自身內(nèi)存塊之外的數(shù)組,或在數(shù)組初始化前使用內(nèi)存(程序中常見的錯(cuò)誤),都會(huì)產(chǎn)生難以預(yù)料的后果(改天可以試試,嘿嘿)。
Java的主要目標(biāo)之一是安全性。Java會(huì)確保數(shù)組被初始化,并且會(huì)檢查數(shù)組下標(biāo)是否越界。雖然這種范圍檢查是以每個(gè)數(shù)組上少量的內(nèi)存開銷及運(yùn)行時(shí)的下標(biāo)檢查為代價(jià)的。但換來的是安全性和效率的提高,因此付出的代價(jià)是值得的。
創(chuàng)建一個(gè)數(shù)組對(duì)象時(shí),實(shí)際上就是創(chuàng)建了一個(gè)引用數(shù)組,并且每個(gè)引用都會(huì)自動(dòng)的被初始化為一個(gè)特定值null。
2.3 永遠(yuǎn)不需要銷毀對(duì)象
大多數(shù)程序設(shè)計(jì)語言中,變量生命周期的概念,占據(jù)了程序設(shè)計(jì)工作中非常重要的部分。
作用域,大多數(shù)過程語言都有作用域(scope)的概念。作用域決定了在其內(nèi)定義的變量名的可見性和生命周期。在C、C++和Java中,作用域由花括號(hào)的位置決定。
對(duì)象的作用域,Java對(duì)象不具備和基本類型一樣的生命周期。當(dāng)用new創(chuàng)建一個(gè)Java對(duì)象時(shí),它可以存活于作用域之外。如下:
{String s = new String(""); }引用s在作用域終點(diǎn)就消失了。然而,s指向的String對(duì)象仍繼續(xù)占據(jù)內(nèi)存空間。
事實(shí)證明,由new創(chuàng)建的對(duì)象,只要你需要,就會(huì)一直保留下去。這樣,許多C++編程問題在Java中就完全消失了。在C++中,你不僅必須要確保對(duì)象的保留時(shí)間與你需要這些對(duì)象的時(shí)間一樣長(zhǎng),而且還必須在你使用完它們之后,將其銷毀。
不過這樣就帶來了一個(gè)問題。靠什么才能防止這些對(duì)象填滿內(nèi)存空間,進(jìn)而阻塞你的程序呢?沒錯(cuò),就是我們的垃圾回收器,它用來釋放那些不會(huì)再被引用的對(duì)象,將內(nèi)存空間提供給新的對(duì)象使用。
2.4 創(chuàng)建新的數(shù)據(jù)類型:類
用class這個(gè)關(guān)鍵字,有方法和字段。不做闡述!!
注意:局部變量沒有默認(rèn)初始化(也就是方法內(nèi)的變量),成員變量(也就是字段)有默認(rèn)初始化。
2.5 方法、參數(shù)和返回值
調(diào)用方法,通常被稱為發(fā)送消息給對(duì)象。
參數(shù)列表和返回值,不做闡述!
2.6 構(gòu)建一個(gè)Java程序
名字可見性,Java采用一種全新的方法來避免類名或者函數(shù)名互相沖突。就是增加一個(gè)包名(package關(guān)鍵字),一般我們將包名設(shè)為我們的域名,如(com.baidu.www,是反著寫)(因?yàn)橛蛎俏ㄒ坏?。
運(yùn)用其他構(gòu)件,我需要引入別人的庫?那就需要用到import 你需要引入庫的包名(例如,import java.util.*)。
static關(guān)鍵字,有些面向?qū)ο笳Z言采用類數(shù)據(jù)和類方法。類數(shù)據(jù)和類方法是作為整個(gè)類存在的,而不是類的某個(gè)特定對(duì)象存在的(類與對(duì)象都直接使用靜態(tài)成員和靜態(tài)方法)。
2.9 編碼風(fēng)格
“駝峰風(fēng)格”,類名的首字母大寫;如果類名由幾個(gè)單詞構(gòu)成,那么把它們連在一起并且每個(gè)單詞首字母大寫。字段名與類名相似,除了第一個(gè)單詞的首字母不大寫以外,其他都單詞首字母都大寫。
本章完
總結(jié)
以上是生活随笔為你收集整理的一切都是对象---JAVA编程思想的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字社交圈里的白酒“新”消费——腾讯20
- 下一篇: 中国企业海外人才发展白皮书