成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java中的面向對象特性

開發 后端
Date t=new Date(); 有2部分,new Date()構造了一個Date類型的對象(Java對象都存儲在堆中),而對這個對象的引用存儲在對象變量t中。Java對象變量與C++的引用不同,在C++沒有空引用,并且應用不能被賦值。
  • 對象與類:

1.Date t=new Date(); 有2部分,new Date()構造了一個Date類型的對象(Java對象都存儲在堆中),而對這個對象的引用存儲在對象變量t中。Java對象變量與C++的引用不同,在C++沒有空引用,并且應用不能被賦值。可以將java的對象變量看作C++的對象指針。Java中的null引用對應C++中的NULL指針。

2.靜態方法是一種不能向對象實施操作的方法,所以不能在靜態方法中訪問域。

在兩種情況下使用靜態方法:

1).一個方法不需要訪問對象狀態,其所需參數都是通過形參提供

2).一個方法只需要訪問類的靜態域。

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

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

private Date date;

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

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

  • 靜態域與靜態方法

1.靜態域又名類變量,即所有實例共享這一個變量;

2.靜態方法是一種不能向對象實施操作的方法,所以不能在靜態方法中訪問實例域,但它可以訪問類中的靜態域。

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

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

2).當使用構造器時,無法改變所構造的對象類型。而Factory方法將返回一個DecimalFormat類對象(NumberFormat的子類).

不管是靜態變量,靜態方法,還是靜態塊,都是在類加載的時候執行的;而初始化塊等是類實例化時調用的。

一個類的運行,JVM做會以下幾件事情 1、類裝載 2、鏈接 3、初始化 4、實例化;而初始化階段做的事情是初始化靜態變量和執行靜態方法等的工作。

  • 方法參數(形參)

一個方法不能修改一個基本數據類型的參數;

一個方法可以改變一個對象參數的狀態(形參為對象變量);

一個方法不能實現讓對象參數引用一個新的對象。

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

多態:一個對象變量可以引用多種實際類型的現象

動態綁定:在運行時能自動選擇調用哪個方法的現象。

 1.對于變量(不管靜態變量還是實例變量),都是靜態綁定,靜態綁定對應聲明的對象變量類型。(編譯時)

2.而對于方法,private、static、final方法是靜態綁定,其他的都為動態綁定,動態綁定對應對象類型。(運行時)即Father f=new Son(); f.field和f.static_method()調用超類即Father的成員,要訪問子類變量,可以用getX()和setX()方法。其他形式則調用子類即Son的成員。

注:超類方法為private時編譯無法通過。

3.在覆蓋一個方法時,子類方法不能低于超類方法的可見性。

  • 抽象類

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

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

3.擴展抽象類時,若只定義超類的部分抽象方法,則子類也應為抽象類;若全部定義,則子類不是抽象的。

4.抽象類不能實例化。所以抽象類的對象變量不能引用抽象子類的對象。

注:Abstract[] a=new Abstract[]; //聲明抽象對象數組,并非實例化。

  • Object重要方法

1.equals方法

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

而覆蓋equals方法的類,根據具體實現來判斷,一般比較的是內容,如String類的equals方法。==則始終是地址。

更詳細的參考下圖。

2.hashCode

散列碼(hash code)是由對象導出的一個整數值,并且它是沒有規律的。不同的對象散列碼一般不同。如果重新定義equals

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

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

接口:

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

也不能在接口中實現方法。

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

3.同抽象類一樣,接口也不能實例化,可以聲明接口變量但必須引用實現了接口的類對象。

接口與抽象類:每個類只能擴展一個(抽象)類,而可以實現多個接口(多繼承)

克隆

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

運行時拋出CloneNotSupportedException異常,且說明了clone是本地方法。為什么不能直接調用???原因就在下面:

必須實現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();       //調用Father類的A(),輸出串"A"  
  5.              Son s1=(Son)s.clone();  
  6.              s1.A();  
  7.          }  
  8.      }</span> 

輸出結果: A A

淺拷貝:默認的克隆操作,它并沒有克隆包含在對象中的內部對象。但是若實例域中的對象是不可變或者是基本類型

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

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

要想一個類可以被clone,必須滿足兩點:

***,它必須實現了Cloneable接口,否則會拋出CloneNotSupportedException異常;

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

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

注:Object 類本身不實現接口 Cloneable,所以在類為 Object 的對象上調用 clone 方法將會導致在運行時拋出異常。

Cloneable接口并沒有定義任何方法,它只是作為一個標記,表面要進行克隆處理。

內部類:

1.成員內部類

簡述:作為外部類的一個成員存在,與外部類的屬性、方法并列。可以在外部類方法中實例化內部類對象來訪問內部類方法。

成員內部類的對象有一個隱式引用,它引用了實例化該內部對象的外部類對象。通過這個指針,可以訪問外部類對象的任何域和

方法。 但內部類不能定義靜態成員(靜態內部類除外)。

特殊語法:

外部類引用表達式OuterClass.this;

內部對象構造器:outerObject.new InnerClass(parameters);

注: 在外部類的作用域之外,則可以用OuterClass.InnerClass來引用內部類。

2.匿名內部類

語法格式:

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

SuperType是接口,則內部類就要實現這個接口;SuperType是一個類,則內部類就要擴展它。

3.靜態內部類:使用內部類只是為了隱藏,可以將內部類聲明為static,取消對外部類的引用。可以將它看作外部類的靜態成員。

4.局部內部類:

在一個方法中定義局部類。不能用public或private訪問說明符進行聲明。它的作用域被限定在聲明這個局部類的塊中。

并且除了這個方法之外,沒有其他的方法知道局部內 部類的存在,但是可以用外部類對象調用該方法來間接訪問內部類。在

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

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

【編輯推薦】

  1. 探究Java初始化的過程
  2. Java集合框架的知識總結
  3. Java與F#的并行程序處理對比
  4. Java并發編程之同步互斥問題
  5. Java中String.format的用法

 

責任編輯:林師授 來源: Seiyagoo的博客
相關推薦

2013-12-12 16:37:12

Lua腳本語言

2021-10-21 18:47:37

JavaScript面向對象

2009-10-13 14:19:03

VB.NET面向對象編

2009-05-21 09:08:52

接口C++面向對象

2009-07-14 16:51:50

Jython中的對象

2011-07-21 17:19:47

java面向對象

2023-01-10 09:38:09

面向對象系統

2010-01-20 09:48:44

面向對象

2009-06-10 22:06:29

JavaScript面向對象

2010-10-28 13:06:45

Java克隆特性

2011-06-28 11:27:19

java克隆對象

2025-02-13 07:49:49

2023-04-19 08:43:52

Python面向對象編程

2009-01-16 08:52:26

面向對象OOP編程

2010-07-20 09:13:55

Perl面向對象編程

2023-02-16 09:55:24

對象編程OOP

2018-12-19 19:30:46

JavaScript創建對象前端

2009-06-15 14:59:31

Java代碼Java

2011-07-05 14:42:46

java

2022-08-08 08:25:21

Javajar 文件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品一级电影 | 日韩成人 | 91精品国产91久久综合桃花 | 99久久精品免费看国产高清 | 国产精品不卡视频 | 久久久精品一区二区三区 | 男女国产网站 | 欧美性一区二区三区 | 精品一二三区在线观看 | 日韩中文字幕一区二区 | 日韩精品成人 | 不用播放器看的av | 色999视频 | 一区二区三区四区国产 | 在线观看三级av | 日日夜夜精品视频 | 久久久国产一区二区三区 | 91麻豆精品国产91久久久更新资源速度超快 | 一区二区精品 | 在线亚洲电影 | 免费在线成人 | 午夜精品久久久 | www日本高清 | 激情 亚洲| 美女人人操 | 国产成人在线播放 | 欧美日韩高清一区 | 91免费在线看 | 亚洲精品乱码8久久久久久日本 | 国产综合久久久久久鬼色 | 亚洲毛片在线观看 | 久久久久久久久久久蜜桃 | h在线看 | 婷婷久久综合 | a级网站 | 日韩精品一二三区 | 色悠悠久 | 中文字幕日韩一区 | av片毛片 | 久久精品日产第一区二区三区 | 精品国产一区一区二区三亚瑟 |