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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java 对象与类

發(fā)布時(shí)間:2025/3/14 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 对象与类 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

類(lèi)與類(lèi)之間的關(guān)系

一、繼承關(guān)系????? 繼承指的是一個(gè)類(lèi)(稱(chēng)為子類(lèi)、子接口)繼承另外的一個(gè)類(lèi)(稱(chēng)為父類(lèi)、父接口)的功能,并可以增加它自己的新功能的能力。在Java中繼承關(guān)系通過(guò)關(guān)鍵字extends明確標(biāo)識(shí),在設(shè)計(jì)時(shí)一般沒(méi)有爭(zhēng)議性。在UML類(lèi)圖設(shè)計(jì)中,繼承用一條帶空心三角箭頭的實(shí)線(xiàn)表示,從子類(lèi)指向父類(lèi),或者子接口指向父接口。?


二、實(shí)現(xiàn)關(guān)系????? 實(shí)現(xiàn)指的是一個(gè)class類(lèi)實(shí)現(xiàn)interface接口(可以是多個(gè))的功能,實(shí)現(xiàn)是類(lèi)與接口之間最常見(jiàn)的關(guān)系。在Java中此類(lèi)關(guān)系通過(guò)關(guān)鍵字implements明確標(biāo)識(shí),在設(shè)計(jì)時(shí)一般沒(méi)有爭(zhēng)議性。在UML類(lèi)圖設(shè)計(jì)中,實(shí)現(xiàn)用一條帶空心三角箭頭的虛線(xiàn)表示,從類(lèi)指向?qū)崿F(xiàn)的接口。?


三、依賴(lài)關(guān)系????? 簡(jiǎn)單的理解,依賴(lài)就是一個(gè)類(lèi)A使用到了另一個(gè)類(lèi)B,而這種使用關(guān)系是具有偶然性的、臨時(shí)性的、非常弱的,但是類(lèi)B的變化會(huì)影響到類(lèi)A。比如某人要過(guò)河,需要借用一條船,此時(shí)人與船之間的關(guān)系就是依賴(lài)。表現(xiàn)在代碼層面,為類(lèi)B作為參數(shù)被類(lèi)A在某個(gè)method方法中使用。在UML類(lèi)圖設(shè)計(jì)中,依賴(lài)關(guān)系用由類(lèi)A指向類(lèi)B的帶箭頭虛線(xiàn)表示。?



四、聚合關(guān)系????? 聚合是關(guān)聯(lián)關(guān)系的一種特例,它體現(xiàn)的是整體與部分的關(guān)系,即has-a的關(guān)系。此時(shí)整體與部分之間是可分離的,它們可以具有各自的生命周期,部分可以屬于多個(gè)整體對(duì)象,也可以為多個(gè)整體對(duì)象共享。比如計(jì)算機(jī)與CPU、公司與員工的關(guān)系等,比如一個(gè)航母編隊(duì)包括海空母艦、驅(qū)護(hù)艦艇、艦載飛機(jī)及核動(dòng)力攻擊潛艇等。

顯式參數(shù)和隱式參數(shù)

? ? ? 顯式參數(shù),就是平時(shí)見(jiàn)到的在方法名括號(hào)中間的參數(shù),就是所謂能看得見(jiàn)的參數(shù)。

? ? ? 隱式參數(shù),是在類(lèi)的方法中調(diào)用了類(lèi)的實(shí)例域。這個(gè)被調(diào)用的實(shí)例域就是隱式參數(shù)。在以下的這個(gè)類(lèi)中調(diào)用了a.ariseSalary(100),就用到了隱式參數(shù)。比如:

  • public class Abc
  • {
  • ????private double salary;
  • ????public Abc(){
  • ????}
  • ????public void ariseSalary(double em){
  • ????????double employ = salary * em;
  • ????????salary += employ;
  • ????}
  • }
  • ?

  • Abc a = new Abc();
  • a.ariseSalary(100);
  • ?

    在上面的類(lèi)中,如果調(diào)用了這個(gè)方法salary是實(shí)例域,ariseSalary方法中的salary就是隱式參數(shù)。如果在隱式參數(shù)的前面加上this,隱式參數(shù)就更清晰:

  • public void ariseSalary(double em){
  • ????double employ = this.salary * em;
  • ????this.salary += employ;
  • }
  • ?推薦在隱式參數(shù)的前面加上this操作符。this操作符代表的是本類(lèi)

    ?

    面向?qū)ο蟮奶匦允?#xff1a;封裝,繼承,多態(tài)??

    不要在一個(gè)get方法中返回一個(gè)可修改對(duì)象,這樣破壞了封裝,應(yīng)該返回這個(gè)對(duì)象的clone。

    一個(gè)方法可以訪(fǎng)問(wèn)它所屬的類(lèi)的所有對(duì)象的私有數(shù)據(jù)。

  • package com.zjf.spring.mybatis.model;
  • public class Person {
  • ?private Integer id;
  • ????public boolean equals(Person obj) {
  • ???????return this.id.equals(obj.id);
  • ????}
  • }
  • id是obj對(duì)象私有屬性,但是因?yàn)槭窃赑erson類(lèi)里的方法,而obj是Person對(duì)象,所以可以使用obj.id。

    final域

    final實(shí)體域

    final實(shí)體域必須保證在每一個(gè)構(gòu)造器執(zhí)行之后要被初始化。否則編譯錯(cuò)誤。也就是要么定義的時(shí)候直接賦值,要么在公共構(gòu)造器代碼塊初始化它,要么在每個(gè)構(gòu)造器都初始化它。否則編譯通不過(guò)。

    而且構(gòu)造完之后就不能改變了,這里的不能改變是指對(duì)象引用不能變,但是如果這是一個(gè)可變對(duì)象,它的內(nèi)容是不能保證不變的。

    所以final一般用在基本數(shù)據(jù)類(lèi)型,或者不可變類(lèi)上。用在可變的類(lèi)上,會(huì)造成混亂。

    final靜態(tài)域

    和實(shí)體域類(lèi)似,final靜態(tài)域必須在定義的時(shí)候初始化,或者在靜態(tài)代碼塊中初始化。

    方法參數(shù)

    java語(yǔ)言總是采用值傳遞。也就是說(shuō),方法得到的是所有參數(shù)值的一個(gè)拷貝。

    這里說(shuō)的拷貝,是局限在堆棧上的。

    對(duì)于基本類(lèi)型很好理解。對(duì)于對(duì)象的話(huà),我們可以理解。

    如:我們要把Person p傳遞給一個(gè)方法,其實(shí)我們是這么操作的。

    Person p1 = p,然后把p1傳遞過(guò)去。

    p1是p在堆棧總的拷貝,但是他們指向同一個(gè)堆的位置。

    如果,Person是可變對(duì)象,這個(gè)時(shí)候我們執(zhí)行了p1的方法做了修改,p的內(nèi)容也會(huì)變化。

    但是,如果我們,執(zhí)行p1 = new Person,這個(gè)時(shí)候不會(huì)對(duì)p有任何影響。

    這就是java所說(shuō)的:值拷貝,方法不能修改傳遞給它的參數(shù)。

    值傳遞區(qū)別與c中的引用傳遞,如果是引用傳遞,其實(shí)是把p直接傳遞過(guò)去了。

    域的初始化

    如果沒(méi)有在構(gòu)造器中對(duì)實(shí)體域進(jìn)行初始化,java會(huì)自動(dòng)初始化。數(shù)字為0,布爾為false,對(duì)象引用為null。

    盡量不要這么做。

    默認(rèn)構(gòu)造器

    僅當(dāng)類(lèi)沒(méi)有提供任何構(gòu)造器的時(shí)候,java會(huì)提供一個(gè)默認(rèn)無(wú)參構(gòu)造器。

    構(gòu)造器相互調(diào)用

    一個(gè)構(gòu)造器調(diào)用另外一個(gè)通過(guò)this方法,而且必須在構(gòu)造器的第一行代碼,而且只能調(diào)用一個(gè),只能調(diào)用一次。

    初始化塊

  • package com.zjf;
  • public class FinalTest {
  • ???private final int j ;
  • ???//初始化塊
  • ???{
  • ??????j = 0;
  • ???}
  • ???public FinalTest() {
  • ???}
  • }
  • 初始化順序

  • 所有的域被初始化為默認(rèn)值(0,false,null)
  • 按照代碼出現(xiàn)的順序,依次執(zhí)行初始化語(yǔ)句和初始化塊。
  • 調(diào)用構(gòu)造器。
  • 關(guān)于第二點(diǎn),舉例如下:

  • package com.zjf;
  • public class FinalTest {
  • ???//初始化塊
  • ???{
  • ??????j = 0;
  • ???}
  • ???public FinalTest() {
  • ??????System.out.println(j);
  • ???}
  • ???private int j = 1;
  • ???public static void main(String[] args) {
  • ??????new FinalTest();
  • ???}
  • }
  • 結(jié)果為1

    如果把初始化塊放到下面:

  • package com.zjf;
  • public class FinalTest {
  • ???public FinalTest() {
  • ??????System.out.println(j);
  • ???}
  • ???private int j = 1;
  • ???public static void main(String[] args) {
  • ??????new FinalTest();
  • ???}
  • ???// 初始化塊
  • ???{
  • ??????j = 0;
  • ???}
  • }
  • 結(jié)果為0。

    靜態(tài)構(gòu)造器

    static

    {

    //靜態(tài)代碼

    }

    在類(lèi)(不是對(duì)象)初始化的時(shí)候調(diào)用。

    finalize方法

    finalize方法會(huì)在對(duì)象被垃圾回收之前被調(diào)用,但是何時(shí)被垃圾回收依賴(lài)于不同的垃圾回收機(jī)制,所以不能保證這個(gè)方法什么時(shí)候會(huì)被執(zhí)行,所以盡量不要使用這個(gè)方法。

    public private 包作用域

    如果沒(méi)有public 也沒(méi)有private 就是包作用域。

    類(lèi)上只能投public和包作用域。

    如果方法和屬性可以有public ,private和包作用域。

    包作用域要求包一模一樣,即使是子包也不可以。

    轉(zhuǎn)載于:https://www.cnblogs.com/xiaolang8762400/p/7041465.html

    總結(jié)

    以上是生活随笔為你收集整理的java 对象与类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。