日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 的对象类用_java基础(第零篇)对象与类

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 的对象类用_java基础(第零篇)对象与类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:

本文講述java中對象與類的一些概念。包括對象與類的有關概念,類間五種關系,類的訪問權限等。

在java中,一切都可以用對象來描述,操作對象的標識符只不過是對象的一個引用,一個對象可以有多個引用,就像人可以有多個外號一樣,但是這個外號不一定是真實存在這個人,可能以虛假的外號欺騙世人,引用亦如此,引用不一定需要有對象與之關聯,一個引用倘若沒有引用對象,那么這個引用就是null。而對于一個真實存在的對象,如果沒有一個引用引用它,那么很不幸的,它將在不久的將來被jvm的垃圾回收器發現并回收。類是對象的一個模板和藍圖,通過類這個模板可以創建出多個相似的對象。

對象初始化的過程

在Java中,對象的創建通過new 關鍵字動態分配內存創建一個對象,也可以通過反射在運行時創建一個對象。對象在創建時的初始化過程如下:

如果該類A還未加載,則是先加載該類,執行該類的類構造器方法(),執行類構造器之前,如果該類有父類,則先執行父類的類構造器方法(),依次類推,最后當類加載完之后,就開始執行類A的實例構造器方法()進行對象初始化,執行()方法之前,需要先執行父類的()方法,依次類推。

ps: ()方法是編譯器根據類的靜態變量聲明處賦值語句和靜態初始化塊生成的一個jvm可識別的方法,在類初始化過程調用;()方法是構造方法和實例變量聲明處賦值語句,以及實例初始化塊生成的一個方法,在對象實例化的時候才會調用,每個構造方法都會對應一個()方法。

類的靜態變量賦值順序:在靜態變量聲明的地方賦值->靜態初始化塊賦值->構造方法賦值

實例變量的賦值順序:在實例變量聲明的地方賦值->在實例初始化塊賦值->在構造方法賦值

看代碼:

public class Test{

public static void main(String[] args){

new Son();

}

}

class Base{

protected int a = 1;

protected static int b = 1;

{

a = 2;

b = 2;

System.out.println("Base類的實例初始化塊執行:a為" + a + ",b為" + b);

}

static{

b = 3;

System.out.println("Base類的靜態初始化化塊執行:b為"+b);

}

public Base(){

b = 4;

a = 4;

System.out.println("Base類的構造方法執行:a為"+a + ",b為" + b);

}

}

class Son extends Base{

{

a = 6;

b = 6;

System.out.println("Son類的實例初始化塊執行:a為" + a + ",b為" + b);

}

static{

b = 7;

System.out.println("Son類的靜態初始化化塊執行:b為"+b);

}

public Son(){

a = 8;

b = 8;

System.out.println("Son類的構造方法執行:a為" + a + ",b為" + b);

}

}

運行結果:

運行結果

如果運行結果如你所料,那么你基本掌握了這個知識點了,如果不是,那你要好好補補功課了。

類的構成

類有方法和屬性構成。屬性例如商品的價格數量、人的性別年齡等。方法例如價格的稅率計算等。

類的屬性和方法的訪問權限

類的屬性和方法的訪問權限有以下幾種:

權限

同一個類

同一個包的類

同一個包的子類

不同包的子類

不同包中的類

private (私有)

×

×

×

×

default (默認)

×

×

protected (保護)

×

public (公有)

類重用

類重用的方式主要是通過類間的繼承關系和聚合組合關系實現的。

關于類的兩種重用方式的區別與特點將在下篇文章《java基礎(第一篇)繼承與組合》總結。

關于類之間的關系

類之間的關系主要有五種:

依賴(use-a)

關聯(association)

聚合(has-a)

組合(composition)

繼承(is-a)

1. 依賴關系是一種use-a的關系。

一般而言,一個類A如果操作另一個類B的對象來實現某些功能,我們就稱為A依賴于B。

表現為:方法參數傳入另一個類的實例對象,靜態方法的調用,在代碼塊和方法中定義的另一個類類型的局部變量等。

這種依賴關系是弱依賴,具有偶然性,并不是長期依賴,是在局部作用域內使用了另一個類的實例或者使用了另一個類的靜態方法時。當調用類的方法時,才出現依賴關系

代碼實例:

public class A{

//1. 參數形式

public void useOne(B b){

b.showB();//使用b做一些事情

}

public void useTwo(){

//2. 局部變量形式

new B().showB();

//3. 靜態方法形式

B.bb();

}

}

public class B{

public void showB(){

System.out.println("b hello world!");

}

public static void bb(){

System.out.println("B static hello world!");

}

}

2. 關聯關系是指在一個類中與另一個類有聯系。

表現為成員變量的使用

關聯關系分兩種:單向關聯和雙向關聯。

顧名思義,單向關聯是指僅有一方關聯了另一方,而雙向關聯指的是雙方互相存在關聯。

代碼示例:

單向關聯

public class A{

private B b = new B();

public void useB(){

//使用b做一些事情

}

}

public class B{

}

雙向關聯

public class A{

private B b = new B();

public useB(){

//使用b做一些事情

}

}

public class B{

private A a = new A();

public void useA(){

//使用a做一些事情

}

}

另外根據關聯的對象的數量又可分為以下幾種的關聯:

表示方式

說明

1..1

表示一個類的一個對象只與另一個類的一個對象有關聯

1..*

表示一個類的一個對象與另一個類的一個或多個對象有關聯

0..*

表示一個類的一個對象與另一個類的零個或多個對象有關聯

0..1

表示一個類的一個對象與另一個類的零個或一個對象有關聯

m..n

表示一個類的一個對象與另一個類的m個到n個對象有關聯

兩個類之間雖然是存在聯系,但是只是在結構上的聯系,并沒有要求在語義上有聯系。兩個類在生命周期上是平級關系,其中一個類的消失都不會促使另一個類的消亡,與下面講述的聚合關系和組合關系有所不同。

3. 聚合關系是一種has-a 的關系,是關聯關系的一種特例

表示類A的一個對象擁有另一個類A的實例。

在java中,同樣表示為成員變量的形式。但是與普通關聯關系有所不同,聚合關系在語義上并不是平級關系,聚合關系的類A 與 類 B 是一種 A has-a B 的關系。而這個b 也可以是多個類共享。

舉栗子:

電腦與連接在電腦的打印機,電腦擁有一臺打印機設備。這臺打印機設備屬于這臺電腦,同時也可以屬于其他共享這個打印機的電腦。

4. 組合關系是一種contain-a的關系,也是關聯關系的一種特例,區別同樣在于語義

表示類A的一個對象包含另一個類B的一個實例對象。

與聚合關系不同在于,聚合關系的a消亡并不會促使b消亡。而組合關系中a的消亡會導致b也跟著消亡,組合關系中a與b也是整體與部分的關系,但部分不能脫離整體而存在。

舉個栗子:

人和人的頭就是組合關系。人一旦死去,頭部也會隨之消亡。而聚合關系中的例子打印機 可以單獨存活于外,電腦死機了,打印機還是連接著其他電腦,但是人的頭部恐怕以目前的技術很難接到其他本體吧。

5. 繼承關系也稱泛化(generalization)

表示一個子類繼承了父類。在java中通過關鍵字extends 實現

這五種類之間的關系的耦合度:繼承>組合>聚合>關聯>依賴

參考

總結

以上是生活随笔為你收集整理的java 的对象类用_java基础(第零篇)对象与类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。