日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

一切都是对象---JAVA编程思想

發(fā)布時(shí)間:2025/3/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一切都是对象---JAVA编程思想 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一切都是對(duì)象

“如果我們說(shuō)另一種不同的語(yǔ)言,那么我們就會(huì)發(fā)覺(jué)一個(gè)有些不同的世界。”——Luduing Wittgerstein(1889-1951)

盡管Java是基于C++的,但是相比之下,Java是一種更“純粹”的面向?qū)ο笤O(shè)計(jì)語(yǔ)言。

Java語(yǔ)言假設(shè)我們只進(jìn)行面向?qū)ο蟮某绦蛟O(shè)計(jì);而C++不同,因?yàn)镃++是C的一個(gè)超集,所以,C++在某些方面顯得過(guò)于復(fù)雜。


2.1 用引用操縱對(duì)象

程序員必須注意將要處理的數(shù)據(jù)是什么類型。你是直接操縱元素,還是用某種基于特殊語(yǔ)法的間接表示(例如C和C++這里的指針)來(lái)操作對(duì)象?

這一切在Java里都得到了簡(jiǎn)化。一切都被視為對(duì)象,因此可采用單一固定的語(yǔ)法。盡管一切都看做對(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操作符來(lái)實(shí)現(xiàn)這一目的。形如:String s = new String("");這種形式。

程序運(yùn)行時(shí),對(duì)象是怎么進(jìn)行放置安排的呢?特別是內(nèi)存是怎樣分配的呢?

有五種不同的地方可以存儲(chǔ)數(shù)據(jù):

  • 寄存器。這是最快的存儲(chǔ)區(qū),因?yàn)樗挥诓煌谄渌鎯?chǔ)區(qū)的地方——處理器內(nèi)部。但是寄存器的數(shù)量及其有限,所以寄存器根據(jù)需求進(jìn)行分配。你不能直接控制,也不能再程序中感覺(jué)到寄存器存在的任何跡象(C和C++允許你向編譯器建議寄存器的分配方式)。
  • 堆棧位于通用RAM(隨機(jī)訪問(wèn)存儲(chǔ)器)中,但通過(guò)堆棧指針可以從處理器那里獲得直接支持。堆棧指針向下移動(dòng),則分配新內(nèi)存;向上移動(dòng),則釋放那些內(nèi)存。這是一種快速有效的分配存儲(chǔ)方法,僅次于寄存器。創(chuàng)建程序時(shí),Java系統(tǒng)必須知道存儲(chǔ)在堆棧內(nèi)所有項(xiàng)的確切生命周期,以便上下移動(dòng)堆棧指針。這一約束限制了程序的靈活性,所以雖然某些Java數(shù)據(jù)存儲(chǔ)在堆棧中——特別是對(duì)象引用,但是Java對(duì)象并不存儲(chǔ)在其中
  • 。一種通用的內(nèi)存池(也位于RAM區(qū)),用于存放所有的Java對(duì)象。堆不同于堆棧的好處是:編譯器不需要知道存儲(chǔ)的數(shù)據(jù)在堆里存活多長(zhǎng)時(shí)間。因此,在堆里分配內(nèi)存有很大的靈活性。當(dāng)需要一個(gè)對(duì)象時(shí),只需用new寫一行簡(jiǎn)單的代碼,當(dāng)執(zhí)行這行代碼時(shí),會(huì)自動(dòng)在堆里進(jìn)行存儲(chǔ)分配。當(dāng)然,為這種靈活性必須要付出相應(yīng)的代價(jià):用堆進(jìn)行存儲(chǔ)分配和清理可能比用堆棧進(jìn)行存儲(chǔ)分配需要更多時(shí)間(如果確實(shí)可以在Java中像C++中一樣在棧中創(chuàng)建對(duì)象,言外之意是說(shuō)Java沒(méi)有像C++一樣在棧中創(chuàng)建對(duì)象的本事。當(dāng)然,基本類型可以在棧中創(chuàng)建)。
  • 常量存儲(chǔ)常量值通常直接存放在程序代碼內(nèi)部,這樣做是安全的,因?yàn)樗鼈冇肋h(yuǎn)不會(huì)改變。有時(shí),在嵌入式系統(tǒng)中,常量本身會(huì)和其他部分離開,所以在這種情況下,可以選擇將其放在ROM(只讀存儲(chǔ)器)中。
  • 非RAM存儲(chǔ)。如果數(shù)據(jù)完全存活于程序之外,那么它可以不受程序的任何控制,在程序沒(méi)有運(yùn)行時(shí)也可以存在。其中兩個(gè)基本的例子就是流對(duì)象持久化對(duì)象。在流對(duì)象中,對(duì)象轉(zhuǎn)化成字節(jié)流,通常被發(fā)送給另一臺(tái)機(jī)器。在持久化對(duì)象中,對(duì)象被存放在磁盤上,因此,即使程序終止,它們?nèi)钥梢员3肿约旱臓顟B(tài)。這種存儲(chǔ)方式的技巧在于;把對(duì)象轉(zhuǎn)化成可以存放在其他媒介上的事物,在需要時(shí),可恢復(fù)成常規(guī)的、基于RAM的對(duì)象Java提供了對(duì)輕量級(jí)持久化的支持,而諸如JDBC和Hibernate這樣的機(jī)制提供了更加復(fù)雜的對(duì)在數(shù)據(jù)庫(kù)中存儲(chǔ)和讀取對(duì)象信息的支持。
  • 以上都在說(shuō)“引用”對(duì)象,我們看一個(gè)特例:基本類型

    為什么要存在基本類型呢?

    因?yàn)閚ew將對(duì)象存儲(chǔ)在“堆”里,用new創(chuàng)建一個(gè)小的、簡(jiǎn)單的變量,往往不是很有效。因此,對(duì)于這些類型,Java采用與C和C++相同的方法。也就是說(shuō),不用new來(lái)創(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è)程序要訪問(wèn)其自身內(nèi)存塊之外的數(shù)組,或在數(shù)組初始化前使用內(nèi)存(程序中常見(jiàn)的錯(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à)的。但換來(lái)的是安全性和效率的提高,因此付出的代價(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ì)語(yǔ)言中,變量生命周期的概念,占據(jù)了程序設(shè)計(jì)工作中非常重要的部分。

    作用域,大多數(shù)過(guò)程語(yǔ)言都有作用域(scope)的概念。作用域決定了在其內(nèi)定義的變量名的可見(jiàn)性和生命周期。在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++編程問(wèn)題在Java中就完全消失了。在C++中,你不僅必須要確保對(duì)象的保留時(shí)間與你需要這些對(duì)象的時(shí)間一樣長(zhǎng),而且還必須在你使用完它們之后,將其銷毀。

    不過(guò)這樣就帶來(lái)了一個(gè)問(wèn)題。靠什么才能防止這些對(duì)象填滿內(nèi)存空間,進(jìn)而阻塞你的程序呢?沒(méi)錯(cuò),就是我們的垃圾回收器,它用來(lái)釋放那些不會(huì)再被引用的對(duì)象,將內(nèi)存空間提供給新的對(duì)象使用。


    2.4 創(chuàng)建新的數(shù)據(jù)類型:類

    用class這個(gè)關(guān)鍵字,有方法和字段。不做闡述!!

    注意:局部變量沒(méi)有默認(rèn)初始化(也就是方法內(nèi)的變量),成員變量(也就是字段)有默認(rèn)初始化。


    2.5 方法、參數(shù)和返回值

    調(diào)用方法,通常被稱為發(fā)送消息給對(duì)象

    參數(shù)列表和返回值,不做闡述!


    2.6 構(gòu)建一個(gè)Java程序

    名字可見(jiàn)性,Java采用一種全新的方法來(lái)避免類名或者函數(shù)名互相沖突。就是增加一個(gè)包名(package關(guān)鍵字),一般我們將包名設(shè)為我們的域名,如(com.baidu.www,是反著寫)(因?yàn)橛蛎俏ㄒ坏?。

    運(yùn)用其他構(gòu)件,我需要引入別人的庫(kù)?那就需要用到import 你需要引入庫(kù)的包名(例如,import java.util.*)。

    static關(guān)鍵字,有些面向?qū)ο笳Z(yǔ)言采用類數(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)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。