亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

java面向?qū)ο?上)

liaosilzu2007 / 3603人閱讀

摘要:根據(jù)出現(xiàn)的位置,作為對象的默認引用有兩種情形構(gòu)造器中引用該構(gòu)造器正在初始化的對象。在構(gòu)造器中代表該構(gòu)造器正在初始化的對象。用于限定該對象調(diào)用它從父類得到的實例變量和方法。

子類繼承父類就可以繼承到父類的成員變量和方法。如果訪問控制允許,子類實例可以直接調(diào)用父類里定義的方法。

如果多個重載的構(gòu)造器里包含了相同的初始化代碼,則可以把這些初始化代碼放置在普通代碼塊里完成,初始化塊總在構(gòu)造器執(zhí)行之前被調(diào)用。

靜態(tài)初始化塊用于初始化類,在類初始化階段被執(zhí)行。

如果繼承樹里的某一個類需要被初始化時,系統(tǒng)將會同時初始化該類的所有父類。

類和對象

Static修飾的成員表明它屬于這個類本身,而不屬于該類的單個實例,因為通常把static修飾的成員變量和方法也稱為類變量,類方法。

通常把不使用static修飾的成員變量和方法也稱為實例變量和實例方法。

靜態(tài)成員不能直接訪問非靜態(tài)成員。

Static真正的作用就用于區(qū)分成員變量,方法,內(nèi)部類,初始化塊這四種成員到底屬于類本身還是屬于實例。

產(chǎn)生的實例變量是在內(nèi)存中存儲的。

引用變量里存放的僅僅是一個引用,他指向?qū)嶋H的對象。

This關(guān)鍵字總是指向調(diào)用該方法的對象。

根據(jù)this出現(xiàn)的位置,this作為對象的默認引用有兩種情形:

- 構(gòu)造器中引用該構(gòu)造器正在初始化的對象。
- 在方法中引用調(diào)用該方法的對象。

This可以代表任何對象,當this出現(xiàn)在某個方法體中時,他所代表的對象是不確定的,但它的類型是確定的:他所代表的只能是當前類的實例,只有當這個方法被調(diào)用時,他所代表的對象才被確定下來,誰在調(diào)用這個方法,this就是誰。

Static修飾的方法中不能使用this引用。

靜態(tài)成員不能訪問非靜態(tài)成員。

Java編程中不要使用對象去調(diào)用static修飾的成員變量,方法,而是應(yīng)該使用類去調(diào)用static修飾的成員變量,方法。

如果確實需要在靜態(tài)方法中訪問另一個普通方法,只能創(chuàng)建對象。

如果方法中有個局部變量和成員變量同名,但程序又需要再該方法里訪問這個被覆蓋的成員變量,則必須使用this前綴。

This在構(gòu)造器中代表該構(gòu)造器正在初始化的對象。

實例方法必須使用對象調(diào)用。

   public class A {
       int a  =  123;
       public A() {
           System.out.println("構(gòu)造A");
           System.out.println(this.a);
       }
   }
   public class B extends A {
       int a = 456789;
       public B() {
           System.out.println("構(gòu)造b");
           System.out.println(this.a+"BBB");
       }
       public static void main(String[] args) {
           new B();
       }
   }
   
   構(gòu)造A
   123
   構(gòu)造b
   456789BBB
   

方法詳解

同一個類的一個方法調(diào)用另一個方法時,如果被調(diào)方法是普通方法,則默認使用this作為調(diào)用者。如果被調(diào)方法是靜態(tài)方法,則默認使用類作為調(diào)用者。

Java里方法的傳遞方式只有一種:值傳遞。所謂值傳遞就是將實際參數(shù)值的副本傳入方法內(nèi),而且參數(shù)本身不會收到任何影響。

Java中的基本類型的參數(shù)傳遞,和引用類型的傳遞都是值傳遞,對于引用類型的傳遞也是將原來的對象的地址復(fù)制一份給參數(shù),這時候就是原來對象和參數(shù)的地址是一樣的,都指向了同一個堆內(nèi)存中的對象,對原來對象或者參數(shù)任何一方賦值null都不會影響另一方。

數(shù)組形式的形參可以處理形參列表的任意位置,但和數(shù)可變的形參只能處于形參列表的最后。

遞歸一定要向已知方向遞歸。

一個類中包含了兩個或者兩個以上的方法名相同而形參不同則被稱為方法重載。

如果需要調(diào)用test(String ...
books)方法,又只想傳入一個字符串參數(shù),則可采用傳入字符串數(shù)組的形式:object.test(new
String[]{“TEST”});

方法重載的要求:同一個類中方法名相同,形參列表不同。

Java中不能使用方法返回值類型作為區(qū)分方法重載的依據(jù)。

成員變量和局部變量

成員變量指的是在類里定義的變量,也就是field,局部變量就是在方法里定義的變量.

所有變量
成員變量
實例變量,不以static修飾
類變量,static修飾的
局部變量
代碼塊局部變量,在代碼塊中定義的
方法局部變量,在方法內(nèi)定義
形參,方法簽名中定義的變量

類變量從該類的準備階段起開始存在,直到系統(tǒng)完全銷毀這個類,類變量的作用域與這個類的生存范圍相同;而實例變量則從該類的實例被創(chuàng)建起開始存在,知道系統(tǒng)完全銷毀這個實例,實例變量的作用域與對應(yīng)實例的生存范圍相同。

成員變量無需顯示初始化,只要為了一個類定義了類變量或?qū)嵗兞?,系統(tǒng)就會在這個類的準備階段或者創(chuàng)建該類的實例時進行默認初始化,成員變量默認初始化時的賦值規(guī)則與數(shù)組動態(tài)初始化時數(shù)組元素的賦值規(guī)則完全相同。

與成員變量不同的是,局部變量除形參之外,都必須顯示初始化。必須先給方法局部變量和代碼塊局部變量指定初始值,否則不可以訪問他們。

當系統(tǒng)加載類或者創(chuàng)建該類的實例時,系統(tǒng)自動為成員變量分配內(nèi)存空間,并在分配內(nèi)存空間后,自動為成員變量指定初始值。

在程序中使用局部變量,也應(yīng)該盡可能的所有局部變量的作用范圍,作用范圍越小,他在內(nèi)存中停留的時間也就越短,程序運行性能就越好。

什么情況下考慮使用成員變量??

如果需要定義的變量是用于描述某個類或某個對象的固有信息,例如人的身高,因為每個人都必須具有這些信息,這時候就可以定義成成員變量,如果此變量對于這個類的所有實例都是相同的,如眼睛的數(shù)量,那么他就可以考慮定義成為類變量。

如果某個類中需要以一個變量來保存該類或者實例運行時的狀態(tài)信息,例如五子棋棋盤的數(shù)組,這種用于保存某個類或某個實例狀態(tài)信息的變量通常應(yīng)該使用成員變量。

如果某個信息需要在某個類的多個方法之間進行共享,則這個信息應(yīng)該使用成員變量來保存。

隱藏和封裝

為了實現(xiàn)良好的封裝,需要考慮兩方面

將對象的成員變量和實現(xiàn)細節(jié)隱藏起來,不允許外部直接訪問。

把方法暴露出來,讓方法來控制對這些成員變量進行安全的訪問和操作。

訪問控制修飾符

private:當前類訪問權(quán)限

default:包訪問權(quán)限

protected:子類訪問權(quán)限

public:公共訪問權(quán)限

訪問控制修飾符的使用原則

類里的絕大部分成員變量都應(yīng)該使用private來修飾,只有一些static修飾的,類似全局變量的成員變量,才可能考慮使用public修飾,除此之外,有些方法只用于輔助實現(xiàn)該類的其他方法,這些工具方法也應(yīng)該使用private修飾。

如果某個類型主要用作其他類的父類,該類里包含的大部分方法可能僅希望被其子類重寫,而不相被外界直接調(diào)用,則應(yīng)該使用protected修飾。

希望暴露出來給其他類自由調(diào)用的方法應(yīng)該使用public修飾,因此,類的構(gòu)造器通過使用public修飾,從而允許在其他地方創(chuàng)建該類的實例。

JDK 1.5增加了靜態(tài)導(dǎo)入import static * ,用于導(dǎo)入制定類的某個靜態(tài)成員變量,方法或全部的靜態(tài)成員變量,方法。

使用import可以省略寫包名,import static 則連類名都可以省略。

深入構(gòu)造器

當系統(tǒng)開始執(zhí)行構(gòu)造器的執(zhí)行體之前,系統(tǒng)已經(jīng)創(chuàng)建了一個對象,只是這個對象還不能被外部程序訪問到,只能在該構(gòu)造器中通過this來引用。當構(gòu)造器的執(zhí)行體執(zhí)行結(jié)束后,這個對象作為構(gòu)造器的返回值被返回,通常還會賦給另一個引用類型的變量,從而讓外部程序可以訪問該對象。

如果兩個構(gòu)造器中有相同的代碼,可以提取相同的代碼到一個構(gòu)造器,另一個構(gòu)造器中用this來引用相同代碼的構(gòu)造器。

類的繼承

方法的重寫要遵循“兩同兩小一大”規(guī)則,兩同即方法名相同,參數(shù)列表相同,兩小即子類方法返回值類型應(yīng)比父類方法返回值類型更小或相等,子類方法聲明拋出的異常類型比父類方法拋出的異常更小或相等,一大是子類方法的訪問權(quán)限應(yīng)該比父類方法的訪問權(quán)限更大或相等。

在子類中調(diào)用父類中被覆蓋的方法,則可以使用super或者父類類名作為調(diào)用者來調(diào)用父類中被覆蓋的方法。

重載主要發(fā)生在同一個類的多個同名方法之間,重寫發(fā)生在子類和父類的同名方法之間。

如果需要在子類方法中調(diào)用父類被覆蓋的實例方法,則可使用super限定來調(diào)用父類被覆蓋的實例方法。

Super用于限定該對象調(diào)用它從父類得到的實例變量和方法。This和super 都不可以出現(xiàn)在類方法中。

如果在某個方法中訪問名為a的成員變量,但是沒有顯示指定調(diào)用者,那么系統(tǒng)的查找順序為:

查找該方法中是否有名為a 的局部變量

查找當前類中是否有名為a 的成員變量

查找a的直接父類中是否包含a的成員變量,依次上溯a的所有父類,未找到則編譯出錯。

當程序創(chuàng)建一個子類對象時,系統(tǒng)不僅會為該類中定義的實例變量分配內(nèi)存,也會為它從父類繼承得到的所有實例變量分配內(nèi)存,即使子類定義了與父類同名的實例變量。

子類調(diào)用父類構(gòu)造器的情況

子類構(gòu)造器顯示使用super來指定執(zhí)行的父類構(gòu)造器。

子類構(gòu)造器中使用this來調(diào)用其它構(gòu)造器,程序會執(zhí)行另一個構(gòu)造器之前調(diào)用父類構(gòu)造器。

沒有super和this顯式調(diào)用,會默認調(diào)用父類的無參構(gòu)造。

創(chuàng)建任何對象總是從該類所在繼承樹最頂層類的構(gòu)造器開始執(zhí)行,然后依次向下執(zhí)行,最后才執(zhí)行本類的構(gòu)造器。

Java引用變量有兩種類型:一種是編譯時類型,一個是運行時類型。編譯時類型由聲明該變量時使用的類型決定。運行時類型由實際賦給該變量的對象決定,這就是所謂的多態(tài)。

對象的實例方法具有多態(tài)性,對象的實例變量則不具備多態(tài)性。

引用變量在編譯階段只能調(diào)用其編譯時類型所具有的方法,但運行時則執(zhí)行他運行時類型所具有的方法。

通過引用變量來訪問其包含的實例變量時,系統(tǒng)總是試圖訪問他編譯時類型所定義的成員變量,而不是它運行時類型所定義的成員變量。

強制類型轉(zhuǎn)換:基本類型之間的轉(zhuǎn)換只能在數(shù)值類型之間進行,引用類型之間的轉(zhuǎn)換只能在具有繼承關(guān)系的兩個類型之間轉(zhuǎn)換。

Instanceof用于判斷前面的對象是否是后面的類。Instanceof運算符前面操作數(shù)的編譯時類型要么與后面的類相同,要么與后面的類具有父子繼承關(guān)系。A是否是B的子類。

繼承和組合

繼承帶來的最大壞處就是破壞封裝。

設(shè)計父類遵循的規(guī)則

盡量隱藏父類的內(nèi)部數(shù)據(jù),盡量所有的成員變量都用private修飾,不會被子類隨意改變。

不要讓子類可以隨意訪問,修改父類的方法。父類中那些僅為輔助其他的工具方法,應(yīng)該使用private修飾,如果希望被外部類調(diào)用,那么就使用public修飾,如果不希望子類重寫該方法,加final,如果允許子類重寫,那么protected。

盡量不要再父類構(gòu)造器中調(diào)用將要被子類重寫的方法。

何時需要從父類派生新的子類問題??

子類需要額外增加屬性,而不僅僅是屬性值的改變。例如person 派生出student。

子類需要增加自己獨有的行為方式,包括增加新的方法或重寫父類的方法。

組合就是用一個個的類來描述一個整體的各個部分,然后用零散的類來組成一個完整的整體,對這個類進行更詳盡的描述。

用繼承還是組合??

對于Cat和Animal,繼承顯然更加合適,因為用一個動物組成一個Cat毫無意義,繼承是is-a關(guān)系,組合是has-a關(guān)系。

初始化塊

初始化塊的修飾符只能是static,使用static修飾的代碼塊叫做靜態(tài)初始化塊,里面可以包含任何可執(zhí)行語句。

當java創(chuàng)建一個對象時,系統(tǒng)先為該對象的所有實例變量分配內(nèi)存,前提是該類已經(jīng)被加載過了,接著程序開始對這些實例變量執(zhí)行初始化,其初始化順序是,先執(zhí)行初始化塊或者聲明實例變量時制定的初始值,在執(zhí)行構(gòu)造器里制定的初始值。

初始化塊總是在構(gòu)造器之前執(zhí)行。

實際上初始化塊是一個假象,使用javac命令編譯過后。該java類中的初始化塊會消失,初始化塊中代碼會被還原到每個構(gòu)造器中,且位于構(gòu)造器所有代碼的前面。

系統(tǒng)將會在類初始化階段執(zhí)行靜態(tài)初始化塊,而不是在創(chuàng)建對象的時候才執(zhí)行,因此靜態(tài)初始化塊總是比普通初始化塊先執(zhí)行。

Java系統(tǒng)加載并初始化某個類時,總是保證該類的所有父類全部加載并初始化。

當JVM第一主動使用某一個類時,系統(tǒng)會在類準備階段為該類的所有靜態(tài)成員變量分配內(nèi)存,在初始化階段則負責初始化這些靜態(tài)成員變量,初始化靜態(tài)成員變量就是執(zhí)行類初始化代碼或者聲明類成員變量時制定的初始值,他們的執(zhí)行順序與源代碼中的排列順序相同。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/69293.html

相關(guān)文章

  • Java學習筆記——面向對象

    摘要:對象既是該類事物實實在在存在的個體。類與對象的關(guān)系圖類就是汽車汽車就是堆內(nèi)存中的對象。成員變量成員變量成員函數(shù)的車,輪胎數(shù)個,跑起來了對象的創(chuàng)建創(chuàng)建對象中創(chuàng)建對象,使用關(guān)鍵字在堆內(nèi)存中開辟了空間,產(chǎn)生了一個實體。 聲明:本文首發(fā)于我的個人微信公眾號【Java編程社區(qū)】,查看更多文章與學習資源請移步我的公眾號Java編程社區(qū) 萬物皆對象 學習Java,我們都聽過這句話:萬物皆對象。那么什...

    DoINsiSt 評論0 收藏0
  • 7. 初步理解面向對象 【連載 7】

    摘要:是一種典型的面向?qū)ο缶幊陶Z言。這篇文章主要是來初步理解一下面向?qū)ο蟮乃季S為下面的內(nèi)容先給一個基礎(chǔ)。針對面向?qū)ο缶幊痰母鄡?nèi)容,會在后面的文章里面詳細解釋。他們都稱之為對象。之后,我們再用編程語言,把這種映射編寫出來,就是的面向?qū)ο缶幊汤病? showImg(https://segmentfault.com/img/remote/1460000012983458?w=900&h=500);...

    keelii 評論0 收藏0
  • 談?wù)勎宜斫獾?em>面向對象

    摘要:眾多面向?qū)ο蟮木幊趟枷腚m不盡一致,但是無論哪種面向?qū)ο缶幊陶Z言都具有以下的共通功能。原型編程以類為中心的傳統(tǒng)面向?qū)ο缶幊蹋且灶悶榛A(chǔ)生成新對象。而原型模式的面向?qū)ο缶幊陶Z言沒有類這樣一個概念。 什么是面向?qū)ο螅窟@個問題往往會問到剛畢業(yè)的新手or實習生上,也是往往作為一個技術(shù)面試的開頭題。在這里我們不去談如何答(fu)好(yan)問(guo)題(qu),僅談?wù)勎宜斫獾拿嫦驅(qū)ο蟆?從歷...

    avwu 評論0 收藏0
  • 夯實Java:從面向對象說起

    摘要:面向?qū)ο笈c面向過程的區(qū)別要知道,二者并不是非此即彼,而是相輔相成的。而面向過程,則在微觀上對對象內(nèi)部進行具體的實現(xiàn)。面向?qū)ο蟮娜筇匦哉f到面向?qū)ο?,就不得不說其三大特性封裝繼承和多態(tài)。封裝封裝是面向?qū)ο笞罨A(chǔ)的特性。 作者:伯特出處:github.com/ruicbAndroid/LoulanPlan聲明:本文出自伯特的《LoulanPlan》,轉(zhuǎn)載務(wù)必注明作者及出處。 剛學習 Jav...

    hearaway 評論0 收藏0
  • Java知識點總結(jié)(面向對象

    摘要:知識點總結(jié)面向?qū)ο笾R點總結(jié)面向?qū)ο竺嫦驅(qū)ο蟾拍钍窍鄬τ诿嫦蜻^程而言,過程其實就是函數(shù),對象是將函數(shù)和屬性進行了封裝。指向了該對象關(guān)鍵字代表對象。靜態(tài)變量所屬于類,所以也稱為類變量成員變量存在于堆內(nèi)存中。 Java知識點總結(jié)(面向?qū)ο螅?@(Java知識點總結(jié))[Java, Java面向?qū)ο骫 [toc] 面向?qū)ο蟾拍?是相對于面向過程而言,過程其實就是函數(shù),對象是將函數(shù)和屬性進行了封...

    itvincent 評論0 收藏0
  • 超詳細的Java面試題總結(jié)(一)之Java基礎(chǔ)知識篇

    摘要:最近在備戰(zhàn)面試的過程中,整理一下面試題。成員變量如果沒有被賦初值,則會自動以類型的默認值而賦值一種情況例外被修飾但沒有被修飾的成員變量必須顯示地賦值而局部變量則不會自動賦值。   最近在備戰(zhàn)面試的過程中,整理一下面試題。大多數(shù)題目都是自己手敲的,網(wǎng)上也有很多這樣的總結(jié)。自己感覺總是很亂,所以花了很久把自己覺得重要的東西總結(jié)了一下。 面向?qū)ο蠛兔嫦蜻^程的區(qū)別 面向過程:  優(yōu)點:性能比面...

    vpants 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<