国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

java基礎解疑??!

2019-11-14 23:01:21
字體:
來源:轉載
供稿:網友
java基礎解疑?。〗庖?:抽象關鍵字為什么不能和 PRivate、 static、 final 共存

①private 是私有的意思,當它修飾方法的時候子類是不能夠繼承父類私有方法的,但是 abstract 修飾的方法必須要被子類繼承并且實現,所有兩者沖突。 static 是靜態的意思,所謂靜態就是被共享,而當它修飾方法的時候就是靜態方法,靜態方法是不用創建對象就可以調用的,當在有繼承關系的時候,abstract 修飾的是抽象,不可以被實例化,抽象方法必須由子類去實現,就又和 static 沖突了。 final 是最終的意思,也就是不能被繼承或者重寫,而 abstract修飾的方法必須要由子類重寫,所以也是沖突的。所以 abstract 只能和 public 以及protected 一起使用。

②Static:

A)靜態變量,被 static 修飾的變量類似一個全局變量( Java 中沒有此概念)。當這個類被虛擬機第一次加載的時候,就會為該變量分配了內存空間。當該類創建實例時,并不會生成對 static 變量的拷貝。而是多個該類的實例共享使用該變量。所有該類的對象都可以操作這塊存儲空間。如果用 final 修飾就另當別論了。創建完成就需要進行初始化, 定義時可以直接初始化。 如果需要通過計算來初始化你的 static 變量,可以聲明一個 static塊, Static 塊僅在該類被加載時執行一次,且在類被第一次裝載時。注意: static 定義的變量初始化會優先于任何其它非static 變量,不論順序如何。 在涉及到繼承的時候,會先初始化父類的 static 變量,然后是子類的,依次類推。可以使用”類名.變量名“直接使用,并且被該類所有實例化對象共享。 可以被類中所有方法使用(static與非 static)。 該類中某一個對象修改了變量的值,其他所有該類對象中的對應值都會隨之改變。定義時初始化,或者通過靜態代碼塊初始化B)靜態方法,被 static 修飾的方法我們稱之為類方法??梢运劳ㄟ^類直接調用該方法,而沒必要創建該類的實例后調用該方法。注意: 可以使用”類名.方法名“直接使用。 只能調用其他Static 方法。 只能使用 static成員變量。 不能以任何形式引用 this 和 super用途:靜態方法常常為應用程序中的其它類提供一些實用工具,在 Java 的類庫中大量的靜態方法正是出于此目的而定義的。 Arrays 和 CollectionsC) 靜態類, 通常一個普通類不允許聲明為靜態的,只有一個內部類才可以。這時這個聲明為靜態的內部類可以直接作為一個普通類來使用,而不需實例一個外部類。補充: static 表示“全局”或者“靜態”的意思,用來修飾成員變量和成員方法,也可以形成靜態 static 代碼塊,但是 Java 語言中沒有全局變量的概念。被 static 修飾的成員變量和成員方法獨立于該類的任何對象。它不依賴類特定的實例,被類的所有實例共享。只要這個類被加載, Java 虛擬機就能根據類名在運行時數據區的方法區內定找到他們。因此, static 對象可以在它的任何對象創建之前訪問,無需引用任何對象。用 public 修飾的 static 成員變量和成員方法本質是全局變量和全局方法,當聲明它類的對象時,不生成 static 變量的副本,而是類的所有實例共享同一個 static 變量。static 變量前可以有 private 修飾,表示這個變量可以在類的靜態代碼塊中,或者類的其他靜態成員方法中使用(當然也可以在非靜態成員方法中使用--廢話),但是不能在其他類中通過類名來直接引用,這一點很重要。實際上你需要搞明白,private是訪問權限限定,static 表示不要實例化就可以使用,這樣就容易理解多了。 static 前面加上其它訪問權限關鍵字的效果也以此類推。static 修飾的成員變量和成員方法習慣上稱為靜態變量和靜態方法,可以直接通過類名來訪問,訪問語法為: 類名.靜態方法名(參數列表...); 類名.靜態變量名。 用 static 修飾的代碼塊表示靜態代碼塊,當 Java 虛擬機( JVM)加載類時,就會執行該代碼塊。static 變量 : 按照是否靜態的對類成員變量進行分類可分兩種:一種是被 static 修飾的變量,叫靜態變量或類變量;另一種是沒有被 static 修飾的變量,叫實例變量。兩者的區別是: 對于靜態變量在內存中只有一個拷貝(節省內存), JVM 只為靜態分配一次內存,在加載類的過程中完成靜態變量的內存分配,可用類名直接訪問(方便),當然也可以通過對象來訪問(但是這是不推薦的)。對于實例變量,沒創建一個實例,就會為實例變量分配一次內存,實例變量可以在內存中有多個拷貝,互不影響(靈活)。

static 方法: 靜態方法可以直接通過類名調用,任何的實例也都可以調用,因此靜態方法中不能用 this 和 super 關鍵字,不能直接訪問所屬類的實例變量和實例方法 (就是不帶static 的成員變量和成員成員方法

③final

特點: A) 用 final 修飾的變量表示常量,只能被賦一次值,不能修改。 final 修飾的基本類型變量:值不能被修改。 final 修飾的引用類型變量(對象):對象地址不能被修改,對象內部的成員可以被修改。 被定義為 final 的對象引用只能指向唯一一個對象,不可以將它再指向其他對象,但是一個對象內部的值卻是可以改變的。被 final 修飾的變量是一個常量,必須被賦值后才能使用??梢栽诙x時賦值,也可在構造方法中賦值。(只要在構造方法結束前給賦值就可以。) B) 用 final 修飾的方法不能被子類的方法覆蓋; C) 用 final 修飾的類不能被繼承,沒有子類。 final 類不能被繼承,因此 final 類的成員方法沒有機會被覆蓋,默認都是 final 的。但是 final 類中的成員變量可以被定義為 final或非 final 形式。在設計類時,如果類不需要有子類,類的實現細節不允許改變,那么就設計為 final 類。 D) final 不能用來修飾構造方法。

④static 和 final: static、 final 用來修飾成員變量和成員方法。 對于變量,表示一旦給值就不可修改,并且通過類名可以訪問。對于方法,表示不可覆蓋,并且可以通過類名直接訪問

解疑2:抽象類和接口的區別

A)抽象類:含有 abstract 修飾符的 class 即為抽象類, abstract 類不能創建的實例對象。含有 abstract 方法的類必須定義為 abstract class, abstract class 類中的方法不必是抽象的。 abstract class 類中定義抽象方法必須在具體(Concrete)子類中實現,所以,不能有抽象構造方法或抽象靜態方法。如果的子類沒有實現抽象父類中的所有抽象方法,那么子類也必須定義為 abstract 類型。

B)接口:可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認為 public abstract 類型,接口中的成員變量類型默認為 public static final。

C)區別:

  • 抽象類可以有構造方法,接口中不能有構造方法。
  • 抽象類中可以有普通成員變量,接口中沒有普通成員變量
  • 抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有
  • 非抽象的普通方法。
  • 抽象類中的抽象方法的訪問類型可以是 public, protected,但接口中的抽象方法只能public 類型的,并且默認即為 public abstract 類型。
  • 抽象類中可以包含靜態方法,接口中不能包含靜態方法
  • 抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以任意,但接口中定義的變量只能是 public static final 類型,并且默認即為 public staticfinal 類型。
  • 一個類可以實現多個接口,但只能繼承一個抽象類。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌拉特后旗| 连州市| 岳阳市| 京山县| 庄浪县| 洛阳市| 海阳市| 牙克石市| 嵩明县| 莫力| 怀安县| 扎兰屯市| 油尖旺区| 桐庐县| 买车| 江北区| 道孚县| 新沂市| 南川市| 舟山市| 交口县| 泽库县| 志丹县| 溧阳市| 修武县| 西峡县| 怀化市| 错那县| 三穗县| 贵德县| 长寿区| 广宁县| 和政县| 澄城县| 山东省| 扎赉特旗| 都昌县| 清丰县| 新建县| 龙山县| 海丰县|