偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Java中的面向?qū)ο筇匦?/h1>

開發(fā) 后端
Date t=new Date(); 有2部分,new Date()構(gòu)造了一個(gè)Date類型的對(duì)象(Java對(duì)象都存儲(chǔ)在堆中),而對(duì)這個(gè)對(duì)象的引用存儲(chǔ)在對(duì)象變量t中。Java對(duì)象變量與C++的引用不同,在C++沒(méi)有空引用,并且應(yīng)用不能被賦值。
  • 對(duì)象與類:

1.Date t=new Date(); 有2部分,new Date()構(gòu)造了一個(gè)Date類型的對(duì)象(Java對(duì)象都存儲(chǔ)在堆中),而對(duì)這個(gè)對(duì)象的引用存儲(chǔ)在對(duì)象變量t中。Java對(duì)象變量與C++的引用不同,在C++沒(méi)有空引用,并且應(yīng)用不能被賦值??梢詫ava的對(duì)象變量看作C++的對(duì)象指針。Java中的null引用對(duì)應(yīng)C++中的NULL指針。

2.靜態(tài)方法是一種不能向?qū)ο髮?shí)施操作的方法,所以不能在靜態(tài)方法中訪問(wèn)域。

在兩種情況下使用靜態(tài)方法:

1).一個(gè)方法不需要訪問(wèn)對(duì)象狀態(tài),其所需參數(shù)都是通過(guò)形參提供

2).一個(gè)方法只需要訪問(wèn)類的靜態(tài)域。

3.不要在getXX方法中返回可變對(duì)象的引用。如:

  1. public Date getDate(){  
  2.  
  3. return date;  
  4.  
  5. }  

private Date date;

原因:破壞封裝性,令一變量如newDate=A.getDate(),則newDate就可以修改Date類的私有域。

若要返回引用,應(yīng)該首先進(jìn)行克隆(clone): return (Date)date.clone()。

  • 靜態(tài)域與靜態(tài)方法

1.靜態(tài)域又名類變量,即所有實(shí)例共享這一個(gè)變量;

2.靜態(tài)方法是一種不能向?qū)ο髮?shí)施操作的方法,所以不能在靜態(tài)方法中訪問(wèn)實(shí)例域,但它可以訪問(wèn)類中的靜態(tài)域。

為什么NumberFormat類不利用構(gòu)造器完成這些操作呢?兩個(gè)原因:

1).無(wú)法命名構(gòu)造器。構(gòu)造器的名稱必須與類名相同。但這里,希望得到的貨幣實(shí)例和百分比實(shí)例采用不同的名字;

2).當(dāng)使用構(gòu)造器時(shí),無(wú)法改變所構(gòu)造的對(duì)象類型。而Factory方法將返回一個(gè)DecimalFormat類對(duì)象(NumberFormat的子類).

不管是靜態(tài)變量,靜態(tài)方法,還是靜態(tài)塊,都是在類加載的時(shí)候執(zhí)行的;而初始化塊等是類實(shí)例化時(shí)調(diào)用的。

一個(gè)類的運(yùn)行,JVM做會(huì)以下幾件事情 1、類裝載 2、鏈接 3、初始化 4、實(shí)例化;而初始化階段做的事情是初始化靜態(tài)變量和執(zhí)行靜態(tài)方法等的工作。

  • 方法參數(shù)(形參)

一個(gè)方法不能修改一個(gè)基本數(shù)據(jù)類型的參數(shù);

一個(gè)方法可以改變一個(gè)對(duì)象參數(shù)的狀態(tài)(形參為對(duì)象變量);

一個(gè)方法不能實(shí)現(xiàn)讓對(duì)象參數(shù)引用一個(gè)新的對(duì)象。

注:Java重載(返回類型不是方法簽名的一部分).

多態(tài):一個(gè)對(duì)象變量可以引用多種實(shí)際類型的現(xiàn)象

動(dòng)態(tài)綁定:在運(yùn)行時(shí)能自動(dòng)選擇調(diào)用哪個(gè)方法的現(xiàn)象。

 1.對(duì)于變量(不管靜態(tài)變量還是實(shí)例變量),都是靜態(tài)綁定,靜態(tài)綁定對(duì)應(yīng)聲明的對(duì)象變量類型。(編譯時(shí))

2.而對(duì)于方法,private、static、final方法是靜態(tài)綁定,其他的都為動(dòng)態(tài)綁定,動(dòng)態(tài)綁定對(duì)應(yīng)對(duì)象類型。(運(yùn)行時(shí))即Father f=new Son(); f.field和f.static_method()調(diào)用超類即Father的成員,要訪問(wèn)子類變量,可以用getX()和setX()方法。其他形式則調(diào)用子類即Son的成員。

注:超類方法為private時(shí)編譯無(wú)法通過(guò)。

3.在覆蓋一個(gè)方法時(shí),子類方法不能低于超類方法的可見(jiàn)性。

  • 抽象類

1.包含一個(gè)或多個(gè)抽象方法的類本身必須被聲明為抽象的;

2.除了抽象方法之外,抽象類還可以包含具體數(shù)據(jù)和具體方法;

3.擴(kuò)展抽象類時(shí),若只定義超類的部分抽象方法,則子類也應(yīng)為抽象類;若全部定義,則子類不是抽象的。

4.抽象類不能實(shí)例化。所以抽象類的對(duì)象變量不能引用抽象子類的對(duì)象。

注:Abstract[] a=new Abstract[]; //聲明抽象對(duì)象數(shù)組,并非實(shí)例化。

  • Object重要方法

1.equals方法

在Object中equals比較的是引用(即內(nèi)存地址),等同于==;所以,在沒(méi)有覆蓋equals方法的類中,比較的是引用;

而覆蓋equals方法的類,根據(jù)具體實(shí)現(xiàn)來(lái)判斷,一般比較的是內(nèi)容,如String類的equals方法。==則始終是地址。

更詳細(xì)的參考下圖。

2.hashCode

散列碼(hash code)是由對(duì)象導(dǎo)出的一個(gè)整數(shù)值,并且它是沒(méi)有規(guī)律的。不同的對(duì)象散列碼一般不同。如果重新定義equals

方法,就必須重新定義hashcode方法,以便用戶可以將對(duì)象插入到散列表中。Equals與hashCode的定義必須一致:如果

x.equals(y)返回true,那么x.hashCode()就必須與y.hashCode()具有相同的值。

接口:

1.接口中的所有方法自動(dòng)地具有public屬性;接口不能含有實(shí)例域(final常量除外,且常量屬性自動(dòng)為public static final),

也不能在接口中實(shí)現(xiàn)方法。

2.同繼承一樣,實(shí)現(xiàn)接口時(shí),必須提供不低于上面一層(接口或超類)的訪問(wèn)權(quán)限。所以必須把方法聲明為public。

3.同抽象類一樣,接口也不能實(shí)例化,可以聲明接口變量但必須引用實(shí)現(xiàn)了接口的類對(duì)象。

接口與抽象類:每個(gè)類只能擴(kuò)展一個(gè)(抽象)類,而可以實(shí)現(xiàn)多個(gè)接口(多繼承)

克隆

Object類中clone是protected方法,對(duì)本包和所有的子類(包括包外)可見(jiàn)。但是用自己編寫的類調(diào)用clone方法測(cè)試了一下,

運(yùn)行時(shí)拋出CloneNotSupportedException異常,且說(shuō)明了clone是本地方法。為什么不能直接調(diào)用???原因就在下面:

必須實(shí)現(xiàn)Cloneable接口,并且可以不提供clone方法。

部分代碼示例:

  1. <span style="font-size: 15px;">     public class Son extends Father implements Cloneable{  
  2.           public static void main(String[] args) throws Exception{  
  3.              Son s=new Son();  
  4.              s.A();       //調(diào)用Father類的A(),輸出串"A"  
  5.              Son s1=(Son)s.clone();  
  6.              s1.A();  
  7.          }  
  8.      }</span> 

輸出結(jié)果: A A

淺拷貝:默認(rèn)的克隆操作,它并沒(méi)有克隆包含在對(duì)象中的內(nèi)部對(duì)象。但是若實(shí)例域中的對(duì)象是不可變或者是基本類型

(不需要重定義clone方法,但推薦重定義并調(diào)用Object的clone:super.clone());

深拷貝:在淺拷貝的基礎(chǔ)上,克隆對(duì)象中的內(nèi)部對(duì)象(必須重定義clone方法)。

要想一個(gè)類可以被clone,必須滿足兩點(diǎn):

***,它必須實(shí)現(xiàn)了Cloneable接口,否則會(huì)拋出CloneNotSupportedException異常;

第二,它必須提供一個(gè)public的clone方法,也就是重寫Object.clone()方法,否則編譯不能通過(guò)。

另外,對(duì)于存在可變域的類,在clone方法中需要對(duì)這些可變域進(jìn)行拷貝(深拷貝)。

注:Object 類本身不實(shí)現(xiàn)接口 Cloneable,所以在類為 Object 的對(duì)象上調(diào)用 clone 方法將會(huì)導(dǎo)致在運(yùn)行時(shí)拋出異常。

Cloneable接口并沒(méi)有定義任何方法,它只是作為一個(gè)標(biāo)記,表面要進(jìn)行克隆處理。

內(nèi)部類:

1.成員內(nèi)部類

簡(jiǎn)述:作為外部類的一個(gè)成員存在,與外部類的屬性、方法并列??梢栽谕獠款惙椒ㄖ袑?shí)例化內(nèi)部類對(duì)象來(lái)訪問(wèn)內(nèi)部類方法。

成員內(nèi)部類的對(duì)象有一個(gè)隱式引用,它引用了實(shí)例化該內(nèi)部對(duì)象的外部類對(duì)象。通過(guò)這個(gè)指針,可以訪問(wèn)外部類對(duì)象的任何域和

方法。 但內(nèi)部類不能定義靜態(tài)成員(靜態(tài)內(nèi)部類除外)。

特殊語(yǔ)法:

外部類引用表達(dá)式OuterClass.this;

內(nèi)部對(duì)象構(gòu)造器:outerObject.new InnerClass(parameters);

注: 在外部類的作用域之外,則可以用OuterClass.InnerClass來(lái)引用內(nèi)部類。

2.匿名內(nèi)部類

語(yǔ)法格式:

  1. new SuperType(construction parameters)  
  2.  
  3. {  
  4.  
  5. inner class methods and data  
  6.  
  7. }  

SuperType是接口,則內(nèi)部類就要實(shí)現(xiàn)這個(gè)接口;SuperType是一個(gè)類,則內(nèi)部類就要擴(kuò)展它。

3.靜態(tài)內(nèi)部類:使用內(nèi)部類只是為了隱藏,可以將內(nèi)部類聲明為static,取消對(duì)外部類的引用。可以將它看作外部類的靜態(tài)成員。

4.局部?jī)?nèi)部類:

在一個(gè)方法中定義局部類。不能用public或private訪問(wèn)說(shuō)明符進(jìn)行聲明。它的作用域被限定在聲明這個(gè)局部類的塊中。

并且除了這個(gè)方法之外,沒(méi)有其他的方法知道局部?jī)?nèi) 部類的存在,但是可以用外部類對(duì)象調(diào)用該方法來(lái)間接訪問(wèn)內(nèi)部類。在

內(nèi)部類中可以訪問(wèn)內(nèi)部類的局部變量(即方法內(nèi)的變量),但是變量必須是final的。

原文鏈接:http://www.cnblogs.com/Seiyagoo/archive/2012/03/12/2392358.html

【編輯推薦】

  1. 探究Java初始化的過(guò)程
  2. Java集合框架的知識(shí)總結(jié)
  3. Java與F#的并行程序處理對(duì)比
  4. Java并發(fā)編程之同步互斥問(wèn)題
  5. Java中String.format的用法

 

責(zé)任編輯:林師授 來(lái)源: Seiyagoo的博客
相關(guān)推薦

2013-12-12 16:37:12

Lua腳本語(yǔ)言

2021-10-21 18:47:37

JavaScript面向對(duì)象

2009-10-13 14:19:03

VB.NET面向?qū)ο缶?/a>

2009-05-21 09:08:52

接口C++面向?qū)ο?/a>

2009-07-14 16:51:50

Jython中的對(duì)象

2011-07-21 17:19:47

java面向?qū)ο?/a>

2023-01-10 09:38:09

面向對(duì)象系統(tǒng)

2010-01-20 09:48:44

面向?qū)ο?/a>

2009-06-10 22:06:29

JavaScript面向?qū)ο?/a>

2010-10-28 13:06:45

Java克隆特性

2011-06-28 11:27:19

java克隆對(duì)象

2023-04-19 08:43:52

Python面向?qū)ο缶幊?/a>

2009-01-16 08:52:26

面向?qū)ο?/a>OOP編程

2010-07-20 09:13:55

Perl面向?qū)ο缶幊?/a>

2018-12-19 19:30:46

JavaScript創(chuàng)建對(duì)象前端

2025-02-13 07:49:49

2023-02-16 09:55:24

對(duì)象編程OOP

2009-06-15 14:59:31

Java代碼Java

2013-03-11 09:23:22

Go語(yǔ)言面向?qū)ο?/a>

2021-06-08 09:47:44

Java面向對(duì)象
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)