欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

全面理解Java類和對象

 更新時(shí)間:2016年06月06日 17:15:38   投稿:jingxian  
下面小編就為大家?guī)硪黄胬斫釰ava類和對象。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

面向?qū)ο蟮某绦蚴怯蓪ο蠼M成的,每個(gè)對象包含對用戶公開的特定功能部分和隱藏的實(shí)現(xiàn)部分。在面向?qū)ο蟪绦蛟O(shè)計(jì)(OOP)中,不必關(guān)心對象的具體實(shí)現(xiàn)。在傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)中,算法是第一位的,數(shù)據(jù)結(jié)構(gòu)是第二位的,即首先確定如何操作數(shù),再考慮如何組織數(shù)據(jù),以方便操作。而OOP則顛倒了這種次序,將數(shù)據(jù)放在第一位,然后再考慮操作數(shù)據(jù)的算法。

一、類

類是構(gòu)造對象的模板和藍(lán)圖。通俗地說,類相當(dāng)于建筑的圖紙,而對象相當(dāng)于建筑物。由類構(gòu)造對象的過程稱為創(chuàng)建對象的實(shí)例。

Java中通過關(guān)鍵字class定義“類”,后跟類名。例如:

class Person{
  // 類的主體內(nèi)容
}

定義了一個(gè)Person類。

1.字段和方法

定義一個(gè)類時(shí),可以在類里設(shè)置兩種類型的元素:數(shù)據(jù)成員和成員函數(shù)。其中數(shù)據(jù)成員是一種對象,可以是任何類型。如果是指向?qū)ο蟮木浔瑒t必須初始化這個(gè)句柄,通過構(gòu)造器與一個(gè)實(shí)際對象連接起來。如果是基本數(shù)據(jù)類型,則可以在類定義的位置直接初始化。

每個(gè)對象都為自己的數(shù)據(jù)成員保有存儲空間;數(shù)據(jù)成員不會(huì)在對象之間共享。

class Person{
  String name;
  double salary;
}

通過new關(guān)鍵字創(chuàng)建一個(gè)對象。如:

Person p = new Person();

(1)主成員的默認(rèn)值

某個(gè)主數(shù)據(jù)類型屬于一個(gè)類成員,那么即是不明確進(jìn)行初始化,也可以保證他們獲得一個(gè)默認(rèn)值。

主類型 默認(rèn)值
Boolean false
Char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d

如果一個(gè)變量作為類的成員變量,那么對于主類型一定會(huì)得到初始化,要特別注意初始化的值。對于局部變量則會(huì)得到一些隨機(jī)值,如:int x;不會(huì)自動(dòng)初始化為0。

(2)方法

方法的基本組成部分包括名字、自變量、返回類型以及主體。方法的基本形式為:

返回類型 方法名(/*自變量列表*/) {/* 方法體 */}

返回類型是指調(diào)用方法之后返回的數(shù)值類型。方法名是對具體方法的標(biāo)識和引用。自變量列表列出****了想傳遞給方法的信息類型和名稱。

在Java中方法的調(diào)用形式為對象名.方法名

1. 用句柄操作對象

盡管Java是完全面向?qū)ο蟮?/strong>。但是,操作的標(biāo)識符實(shí)際指向一個(gè)對象的“句柄”,又稱“引用”。句柄是可以獨(dú)立存在的,并不是說,擁有一個(gè)句柄就必須有一個(gè)對象與之對應(yīng)。比如,int i;定義了一個(gè)整型變量i,并不表示它一定有值。如,創(chuàng)建一個(gè)String類型的句柄:

String s;

這里只是創(chuàng)建了句柄,并沒有創(chuàng)建對象。由于s并沒有與之關(guān)聯(lián)的對象,如果調(diào)用s將出現(xiàn)異常。所以,創(chuàng)建時(shí)需要進(jìn)行初始化。

String s = "hello";

在Java中,通過new關(guān)鍵字創(chuàng)建對象,它將返回對象的引用(即句柄)。所以

String s = new String("hello");

創(chuàng)建了一個(gè)內(nèi)容為"hello"的String對象,并將該對象的句柄(引用)交給了s保存。

2. 數(shù)據(jù)存儲的位置

1.寄存器。最快的保存區(qū)域,位于處理器內(nèi)部。寄存器的大小有限,由編譯器的分配大小。

2.堆棧。駐留在常規(guī)RAM(隨機(jī)訪問存儲器)區(qū)域,通過“堆棧指針”可以改變大小。堆棧指針向下移動(dòng),會(huì)創(chuàng)建新的內(nèi)存空間;向上移動(dòng),則釋放內(nèi)存空間。創(chuàng)建程序時(shí),Java編譯器必須準(zhǔn)確地知道堆棧內(nèi)保存的所有數(shù)據(jù)的“長度”和“存在的時(shí)間”,編譯器由此生成相應(yīng)的代碼,以便移動(dòng)指針。Java對象的句柄保存在其中,但是Java對象并不保存在堆棧中。

3.堆。常規(guī)用途的內(nèi)存池,其中保存了Java對象。編譯器不知道也不需要知道從“內(nèi)存堆”或“堆”里分配多少存儲空間、數(shù)據(jù)存留多長時(shí)間。

4.靜態(tài)存儲。靜態(tài)指位于固定的位置(在RAM中)。程序運(yùn)行期間,靜態(tài)存儲的數(shù)據(jù)將隨時(shí)供調(diào)用。通過static關(guān)鍵字指出一個(gè)對象的特定元素是靜態(tài)的。Java本身本不可能置于靜態(tài)存儲空間。

5.常數(shù)存儲。常數(shù)值通常置于程序代碼內(nèi)部,永遠(yuǎn)不會(huì)改變。

6.非RAM存儲。若數(shù)據(jù)完全獨(dú)立于一個(gè)程序之外,則程序不運(yùn)行時(shí)仍可存在,并在程序的控制范圍之內(nèi)。例如,流式對象和固定對象。

二、對象

對象的三個(gè)主要特性:

•對象的行為——可以對對象施加哪些操作,或可以對對象施加哪些方法?

•對象的狀態(tài)——當(dāng)時(shí)加那些方法時(shí),對象如何響應(yīng)?

•對象標(biāo)識——如何辨別具有相同行為與狀態(tài)的不同對象?

對象的行為是由可調(diào)用的方法定義的。每個(gè)對象都保存著描述當(dāng)前特征的信息,這就是對象的狀態(tài)。對象的狀態(tài)不會(huì)自發(fā)改變。一個(gè)設(shè)計(jì)良好的類,它的對象只能通過調(diào)用方法實(shí)現(xiàn),如果不經(jīng)過方法調(diào)用就可以改變對象的狀態(tài),說明封裝性受到了破壞。

封裝:將數(shù)據(jù)和行為組合在一個(gè)包中,并對對象的使用者隱藏了數(shù)據(jù)的實(shí)現(xiàn)方法。封裝的關(guān)鍵在于絕對不能讓類中的方法直接地訪問其他類的實(shí)例域。程序僅通過對象的方法域?qū)ο髷?shù)據(jù)進(jìn)行交互。

對象中的數(shù)據(jù)稱為實(shí)例域(instance field)或?qū)傩?。操縱數(shù)據(jù)的過程稱為方法(method)。對于每個(gè)特定的對象都有一組特定的實(shí)例域值(屬性值),這些值的集合就是該對象的當(dāng)前狀態(tài)。

類之間的關(guān)系

類之間常見的關(guān)系:

•依賴(“use-a”): 一個(gè)類的方法操縱另一個(gè)類的對象。

•聚合(“has-a”): 一個(gè)類的對象包含另一個(gè)類的對象。

•繼承(“is-a”): 用于表示特殊與一般的關(guān)系。如果類A擴(kuò)展類B(A繼承B),類A不但包含類B的方法,還有擴(kuò)展的方法。

一個(gè)對象并沒有實(shí)際包含一個(gè)對象,而僅僅引用一個(gè)對象。

在Java中,任何對象變量的值都是都是對存儲在另外一個(gè)地方的一個(gè)對象的引用。new操作符的返回值也是一個(gè)引用。

以上這篇全面理解Java類和對象就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java switch使用原理及實(shí)例解析

    Java switch使用原理及實(shí)例解析

    這篇文章主要介紹了Java switch使用及實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • spring cloud 配置中心native配置方式

    spring cloud 配置中心native配置方式

    這篇文章主要介紹了spring cloud 配置中心native配置方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 關(guān)于Spring Cloud 本地屬性覆蓋的問題

    關(guān)于Spring Cloud 本地屬性覆蓋的問題

    這篇文章主要介紹了關(guān)于Spring Cloud 本地屬性覆蓋的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 利用HttpUrlConnection 上傳 接收文件的實(shí)現(xiàn)方法

    利用HttpUrlConnection 上傳 接收文件的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄肏ttpUrlConnection 上傳 接收文件的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • SpringBoot JPA出現(xiàn)錯(cuò)誤:No identifier specified for en解決方案

    SpringBoot JPA出現(xiàn)錯(cuò)誤:No identifier specified&nb

    這篇文章主要介紹了SpringBoot JPA出現(xiàn)錯(cuò)誤:No identifier specified for en解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Struts2 Result 返回JSON對象詳解

    Struts2 Result 返回JSON對象詳解

    這篇文章主要講解Struts2返回JSON對象的兩種方式,講的比較詳細(xì),希望能給大家做一個(gè)參考。
    2016-06-06
  • SpringBoot實(shí)現(xiàn)多種來源的Zip多層目錄打包下載

    SpringBoot實(shí)現(xiàn)多種來源的Zip多層目錄打包下載

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何實(shí)現(xiàn)多種來源的?Zip?多層目錄打包下載,包括本地文件和HTTP混合,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • springboot實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    springboot實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Java本地緩存Caffeine的簡單使用

    Java本地緩存Caffeine的簡單使用

    這篇文章主要介紹了Java本地緩存Caffeine的簡單使用,Caffeine 是基于 JAVA 8 的高性能本地緩存庫,并且在 spring5后,spring 官方放棄了 Guava,而使用了性能更優(yōu)秀的 Caffeine 作為默認(rèn)緩存組件,需要的朋友可以參考下
    2023-12-12
  • 利用Java計(jì)算某個(gè)日期是星期幾

    利用Java計(jì)算某個(gè)日期是星期幾

    不知道大家有沒有遇到過同樣的問題,誰誰的生日又要到了,看看是星期幾?每年都要遇到好幾次,所以想索性利用Java寫個(gè)小工具,一次查詢某具體日期在n年中分別是星期幾。這樣不就方便了嗎?本文里給出了詳細(xì)的示例代碼,感興趣的朋友們下面來一起看看吧。
    2016-10-10

最新評論