国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java雜談之類和對象 封裝 構(gòu)造方法以及代碼塊詳解

Java雜談之類和對象 封裝 構(gòu)造方法以及代碼塊詳解

2022-01-19 10:57愛內(nèi)卷的王同學(xué) Java教程

在現(xiàn)實(shí)世界中,真實(shí)存在的東西,比如吉普車,卡丁車,貨車。我們在認(rèn)識它的時(shí)候就會在腦海中將它抽象為一種類別叫做車。 好了,那再計(jì)算機(jī)世界中,它同樣的也會這樣做

Java當(dāng)中的類和對象

 

1. 類和對象的初步認(rèn)知

java 是一門面向?qū)ο蟮恼Z言,所謂面向?qū)ο笥袆e于面向過程,面向?qū)ο笫侵恍鑼ο笾g的交互即可完成任務(wù),但是面向過程的話,需要我們將每一個(gè)步驟都詳細(xì)地做出來。比如,以洗衣服為例,如果是面向過程來襲衣服,那么我們首先需要衣服,然后放入盆中,之后加水,放洗衣粉,最后搓揉。但是如果面向?qū)ο蟮脑挘谝徊街恍枰覍ο螅页鲆路匆路郏匆聶C(jī),水這些對象,然后全部放到洗衣機(jī)里面就行了。這就是對象之間的交互。

java 當(dāng)中的類是對象的綜合,大打個(gè)比方,對象是房子,那么類就是設(shè)計(jì)圖紙,每一個(gè)對象都是類具體的個(gè)體。

 

2. 類的實(shí)例化

總之,通過上面的分析,我們不難得出這樣的結(jié)論:類似對象的統(tǒng)稱,對象就是這個(gè)類的具體化實(shí)例,一個(gè)類可以產(chǎn)生無數(shù)個(gè)對象。那么但我在寫代碼的是就要進(jìn)行類的實(shí)例化,即從類(也就是模板)中抽出一個(gè)具體的對象(相當(dāng)于實(shí)物)。

基本語法:

//創(chuàng)建類
class <class_name> {
  field;//屬性
  method;//成員方法
}
//實(shí)例化一個(gè)對象
<class_name> <對象名> = new <class_name>();

class 為定義類的關(guān)鍵字,ClassName 為類的名字,{}中為類的主體。(注意:java的類的命名是使用大駝峰,此處附上 java 組成部分的命名規(guī)則)

Java雜談之類和對象 封裝 構(gòu)造方法以及代碼塊詳解

在類中 但是在成員方法外面 的元素可以稱其為:字段 / 屬性 / 成員變量(三種皆可)。

類中的函數(shù)稱為:成員方法。

類的實(shí)例化方法:

class Person {
  public int age; //字段
  public String name;
  public String sex;
  public void eat() { //方法
      system.out.println("吃飯");
  }
  public void sleep() {
      system.out.println("睡覺");
  }
}

 

3. 類的成員

Java雜談之類和對象 封裝 構(gòu)造方法以及代碼塊詳解

字段(屬性/成員變量)

class Person { //創(chuàng)建一個(gè)類
  public String name; //成員變量
  public int age;
  public void eat() {
      int a = 0;//局部變量
      System.out.println("吃飯");
  }
}
class Test { //創(chuàng)建一個(gè)類
  public static void main(String[] args) {//主函數(shù)
      Person person = new person();
      //實(shí)例化出來一個(gè)具體對象
      System.out.println(person.name);//打印出來
      System.out.println(person.age);
      person.eat();
  }
}
//執(zhí)行結(jié)果
null
0

注意事項(xiàng):

  • 如上圖的第 13 行和第 14 行代碼,使用點(diǎn)號可以訪問實(shí)例化對象里面的字段
  • 如果成員變量沒有賦初始值

那么引用類型默認(rèn)是 NULL,基本類型默認(rèn)是0

如果是boolean類型的,默認(rèn)是false

如果是char 類型的,默認(rèn)是 “\u0000”(其實(shí)就是空)

  • 訪問既包含了讀也包含了寫,讀,即可以用點(diǎn)號找到成員變量 ,寫,即可以給他賦值(本人認(rèn)為這是一句廢話,但是教科書看到了就bb一句)
  • 此外,如果將引用設(shè)為null 那么后面再用點(diǎn)號來引用的話就會發(fā)生空指針異常,代碼就會報(bào)錯(cuò)。(如下圖所示)

Java雜談之類和對象 封裝 構(gòu)造方法以及代碼塊詳解

Java雜談之類和對象 封裝 構(gòu)造方法以及代碼塊詳解

  • 第 11 行實(shí)例化時(shí)person 是一個(gè)引用變量,此時(shí)會在計(jì)算機(jī)的棧空間里面開辟一塊空間用于存放 person,在堆上開辟一塊空間用于存放對象,person 引用的就是 棧空間上面的對象。
  • 同樣地,第五行中的 a 因?yàn)樗幵诤瘮?shù)之中所以說它是一個(gè)局部變量,所以它是被存到了棧空間當(dāng)中的。

Java雜談之類和對象 封裝 構(gòu)造方法以及代碼塊詳解

方法

java 中的方法說白了就是函數(shù),本質(zhì)上就是 對象做出的一種行為

class Person {
  public int age = 18;
  public String name = "張三";
  public void show() {
      System.out.println("我叫 + name,今年 + age + 歲");
  }
}
class test {
  public static void main(String[] args) {
      Person person = new Person();
      person.show();
  }
}

如上,就是說張三這個(gè)對象他有一個(gè)要執(zhí)行的動(dòng)作叫做 show

但是若想要想創(chuàng)建一個(gè)其他對象,再用show打印的話,需要 person 用點(diǎn)號來引用類里面的相關(guān)屬性

Person person2 = new Person();
person2.name = "李四";
person2.age  = 20;
person2.show();

但是要注意的是,此處的代碼最上面 那個(gè)Person 類在示例化的時(shí)候就已經(jīng)給成員變量賦初值了,這其實(shí)是不對的,因?yàn)樯厦嬉呀?jīng)說過了,類其實(shí)是一切對象的總和,他是不可以這樣被具體化的(簡單來講其實(shí)就是不可能所有人都叫張三)。

注意事項(xiàng):在真正開發(fā)的時(shí)候我們總不可能每當(dāng)要打印的時(shí)候都去寫show 函數(shù)的,所以是有快捷方法的,那就是 toString 方法,鼠標(biāo)右鍵點(diǎn)擊一下找到generate 點(diǎn)擊之后然后就會跳轉(zhuǎn),之后就可以找到了。

其實(shí)原理就是 println 的打印酒氣本源其實(shí)是調(diào)用了一個(gè)叫做 object 的類 里面的 toString 方法,這里我們的操作就是重寫該方法,這樣改完之后下面的代碼再用 println 打印的時(shí)候就可以直接打出我們想要的效果了。

Java雜談之類和對象 封裝 構(gòu)造方法以及代碼塊詳解

如上圖兩處紅色的方框便是我們更改的,那么之后每次打印代碼輸出我們想要的效果。如下圖,上面一行是 show()函數(shù)輸出的結(jié)果,而下面一行是 重寫 toString 輸出的效果

Java雜談之類和對象 封裝 構(gòu)造方法以及代碼塊詳解

Java雜談之類和對象 封裝 構(gòu)造方法以及代碼塊詳解

static 關(guān)鍵字

(static 可以修飾的有:字段、方法、代碼塊、類)

被 static 修飾的東西不需要實(shí)例化對象,用對象去點(diǎn)xx 來訪問,他是可以直接用類名點(diǎn)xx 來訪問。

修飾字段

靜態(tài)的成員變量(或稱:類變量)是獨(dú)立放在方法區(qū)的,只有一份,以下面的例題為例

class TestDemo{
 public int a;
 public static int count;
}
public class Main{
 public static void main(String[] args) {
 TestDemo t1 = new TestDemo();
 t1.a++;
 TestDemo.count++;
 System.out.println(t1.a);
 System.out.println(TestDemo.count);
 System.out.println("============");
 t2 = new TestDemo();
 t2.a++;
 TestDemo.count++;
 System.out.println(t2.a);
 System.out.println(TestDemo.count);
}
}

Java雜談之類和對象 封裝 構(gòu)造方法以及代碼塊詳解

所以由a 和count 的存儲方式就可以很容易得出答案,每當(dāng)我們新實(shí)例化一個(gè)對象,a 就會隨之重創(chuàng),所以a 是會變的,但是 count只有一份,只存于方法區(qū),所以 當(dāng)重新 new 一個(gè)對象的時(shí)候,count 會繼承上一次的值。

修飾方法

  • 靜態(tài)方法還是開辟棧幀的
  • 靜態(tài)方法是可以直接被調(diào)用的,不需要像普通方法那樣想實(shí)例化對象再用對象來引用。也因此主函數(shù)的前面是要加 static的 ,因?yàn)閟tatic 是可以讓主函數(shù)直接通過jvm 來調(diào)用的,如果不用這種方式的話那么將必須在主函數(shù)里面 new 一個(gè)對象,讓對象來調(diào)用主函數(shù),但是主函數(shù)目前的問題是,new 對象必須在主函數(shù)里面,但問題是我現(xiàn)在主函數(shù)進(jìn)都進(jìn)不來,要想進(jìn)來就必須調(diào)用主函數(shù),要調(diào)用就必須在主函數(shù)里面 new 對象,很明顯,這是一個(gè)自相矛盾的事情,要想解決這個(gè)矛盾就必須給主函數(shù)加上 static。
  • 非靜態(tài)方法可以直接調(diào)用靜態(tài)方法和非靜態(tài)方法(就是直接在其內(nèi)部寫上函數(shù)名加括號就代表調(diào)用),但是靜態(tài)方法不可直接調(diào)用非靜態(tài)方法,能直接調(diào)用的只有靜態(tài)方法,也就是說主函數(shù)要想直接調(diào)用其他方法,那就必須要讓其他函數(shù)加上 static ,不然的話還要再創(chuàng)建對象,就很麻煩。

修飾代碼塊(暫不講)

修飾類(暫不講)

 

4. 封裝

本質(zhì)上是使用private 和 public 和這兩個(gè)關(guān)鍵字來實(shí)現(xiàn)函數(shù)的封裝。因?yàn)槲覀冎皩懙拇a都是就直接用 public 來修飾的,這樣的,我們就必須要特地去了解類里面的情況,這會讓代碼寫起來非常麻煩,并且如果類的創(chuàng)建者篡改了原來類里面成員變量的名字,那么后面的代碼也要跟著改,安全系數(shù)很低。所以只要我們用 private 來封裝成員變量,讓使用者不能直接和成員變量產(chǎn)生聯(lián)系,而是和類里面的函數(shù)產(chǎn)生聯(lián)系。如果成員變量產(chǎn)生變更,類的調(diào)用者不需要做出任何修改。

總而言之,當(dāng)被 private 修飾之后它的權(quán)限就被降低了,只能在當(dāng)前類里面使用。被 private 修飾的只能用類名來引用。

  • getter 和 setter

但是當(dāng)我們修改自己的封裝的字段的時(shí)候,不可能每次都把 getName()和setName ()寫出來,所以就可以直接使用快捷的方式,鼠標(biāo)右擊 選中g(shù)enerate 再選中 自己要操作的項(xiàng)即可。(以下為示例),還有 this 表示當(dāng)前所在對象的引用。

Java雜談之類和對象 封裝 構(gòu)造方法以及代碼塊詳解

 

5. 構(gòu)造方法

構(gòu)造方法特點(diǎn):沒有返回值,方法的名字和類名是相同的。

//以下為一個(gè)無參數(shù)的構(gòu)造方法示例
public Person() {
  
}

構(gòu)造方法的作用是用來初始化對象的,即在對象還未創(chuàng)建的時(shí)候?yàn)閷ο蟮某蓡T變量賦初值,因?yàn)閷ο蟮膭?chuàng)建是要分兩步走的,先為對象分配內(nèi)存,再為對象分配合適的構(gòu)造方法,也就是說當(dāng)我們想要在構(gòu)造方法當(dāng)中提前給對象賦值的時(shí)候是可以用 this的,而且由于 this 本質(zhì)上是在對象創(chuàng)建后 jvm 給該對象分配的相應(yīng)的指針,但是也正是也因?yàn)閠his 可以在構(gòu)造函數(shù)之中使用(此時(shí)的對象還沒有完全創(chuàng)建好)這就可以說明 this 其實(shí)是對象的引用,并非對象本身。

在我們實(shí)例化對象的時(shí)候,編譯器會默認(rèn)攜帶一個(gè)無參數(shù)構(gòu)造方法,但是如果同一個(gè)類里面已經(jīng)有了其他構(gòu)造方法,那么就不會自動(dòng)攜帶這種方法。以下三段代碼皆為構(gòu)造方法,并且他們的關(guān)系是重載。

Java雜談之類和對象 封裝 構(gòu)造方法以及代碼塊詳解

 

6. this 用法

this. 成員變量

this. 成員方法

this ( ) 用 this 來調(diào)用構(gòu)造函數(shù),構(gòu)造函數(shù)里面有幾個(gè)參數(shù) this 的括號里面就有幾個(gè)參數(shù)(注意,this 調(diào)用構(gòu)造方法必須放在第一行)

另外,之所以說 this 是一個(gè)引用對象而不是對象是因?yàn)椋瑢ο蟮漠a(chǎn)生要分兩步走,第一步是為對象分配內(nèi)存,第二步是調(diào)用合適的構(gòu)造方法,這兩步完成了之后才能說我們的對象被創(chuàng)建了,但是,如果說我們的 this 在一個(gè)構(gòu)造方法之中創(chuàng)建的,就可以很明顯看出 this 不是對象而是引用對象,因?yàn)榇藭r(shí)的 this 還在構(gòu)造函數(shù)的代碼中,也就是說 this 使用時(shí)構(gòu)造函數(shù)對象還沒有被創(chuàng)建出來,所以說這個(gè)時(shí)候的 this 僅僅只是對象的引用。
大多數(shù)時(shí)候類里面使用 this 的時(shí)候,對象還沒有被創(chuàng)建出來,這里的 this 就是當(dāng)前類的對象的引用。

此外,靜態(tài)方法當(dāng)中不能出現(xiàn) this (靜態(tài)只能靠類名來引用)。

 

關(guān)于引用的幾個(gè)注意事項(xiàng):

  • 引用是否只能存在于棧上?

答:不一定,因?yàn)楫?dāng)你在類里面創(chuàng)建一個(gè)成員變量是數(shù)組的時(shí)候,在你的對象實(shí)例化之后,數(shù)組的那個(gè)引用變量就會被放到對象上面,但是數(shù)組的引用變量本質(zhì)上還是引用它會指向自己數(shù)組里面的元素的。

class Person {
  private String name;
  private int age;
  private int[] elem = new int[10];
}//以下為原理圖

Java雜談之類和對象 封裝 構(gòu)造方法以及代碼塊詳解

  • 引用可以指向引用嗎?

答:不可以,引用只能指向?qū)ο蟆?/p>

Person person = new person();
person1 = new person();
person1 = new person();
person1 = new person();
person1 = new person();

從上面這串代碼可以明顯看出,person1 這個(gè)引用指向的對象一再被賦予新的對象,但是盡管如此這并不意味著 person1 就同時(shí)指向了多個(gè)對象,最終有效的對象只有第五行,也就是說,person1 指向了第五行的那個(gè)對象,其他的都沒用了。

一個(gè)引用被賦值null 代表它不指向任何對象

person = null;//示例

 

7. 代碼塊

代碼塊分為

  • 本地代碼塊(定義在方法里面的)//非重點(diǎn)
  • 實(shí)例代碼塊(構(gòu)造代碼塊)
{
  this.age = 19;
}//用于初始化成員變量
  • 靜態(tài)代碼塊
static {
  
}//用于提請準(zhǔn)備數(shù)據(jù)
  • 同步代碼塊(暫不講)

在程序執(zhí)行的時(shí)候,執(zhí)行順序?yàn)椋红o態(tài)代碼塊先執(zhí)行(即便放在最后面也是如此),之后實(shí)例代碼塊再執(zhí)行,最后執(zhí)行構(gòu)造方法。還有,就是在一個(gè)類之中,靜態(tài)的代碼只執(zhí)行一次。

并且當(dāng)一段代碼之中只有相同類型的,就會安從上往下的順序執(zhí)行。例如,如果一個(gè)類之中既有靜態(tài)的字段,又有靜態(tài)代碼塊,那么誰在前面,誰先執(zhí)行。
(構(gòu)造代碼塊)

{
  this.age = 19;
}//用于初始化成員變量
  • 靜態(tài)代碼塊
static {
  
}//用于提前準(zhǔn)備數(shù)據(jù)
  • 同步代碼塊(暫不講)

在程序執(zhí)行的時(shí)候,執(zhí)行順序?yàn)椋红o態(tài)代碼塊先執(zhí)行(即便放在最后面也是如此),之后實(shí)例代碼塊再執(zhí)行,最后執(zhí)行構(gòu)造方法。還有,就是在一個(gè)類之中,靜態(tài)的代碼只執(zhí)行一次。

并且當(dāng)一段代碼之中只有相同類型的,就會安從上往下的順序執(zhí)行。例如,如果一個(gè)類之中既有靜態(tài)的字段,又有靜態(tài)代碼塊,那么誰在前面,誰先執(zhí)行。

到此這篇關(guān)于Java雜談之類和對象 封裝 構(gòu)造方法以及代碼塊詳解的文章就介紹到這了,更多相關(guān)Java 類與對象內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/qq_54693675/article/details/119785230

延伸 · 閱讀

精彩推薦
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經(jīng)有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對java開發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對象的轉(zhuǎn)換詳解

    xml與Java對象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
主站蜘蛛池模板: 香蕉夜色 | 中文字幕一区在线观看视频 | 亚洲欧美日韩精品久久亚洲区 | 毛片免费在线播放 | 日韩在线观看 | 91精品国产综合久久福利软件 | 成人久久18免费观看 | 荷兰欧美一级毛片 | 日韩欧美在 | 亚洲高清一区二区三区 | 天堂久久精品 | www.欧美 | 北条麻妃在线一区二区 | 四虎免费在线播放 | 2019中文字幕视频 | 一级黄色片子看看 | 久久久亚洲精 | 亚洲美女久久 | 久久亚洲一区二区 | 中文字幕第一页在线 | 久久久久久免费毛片精品 | 这里只有精品在线视频观看 | 欧美日本精品 | 亚洲www视频 | av国产精品 | 欧美精品久久 | 久久亚洲一区 | 欧美一区2区三区4区公司二百 | 天天操天天射天天 | 亚洲国产综合在线观看 | 亚洲男人的天堂网站 | 日韩一区二区三区在线 | 亚洲伦理电影 | 综合久久综合 | 亚洲成年人影院 | 亚洲色图综合 | 欧美视频区 | 日本久久香蕉 | 一区二区三区视频 | www.久久.com | 每日更新亚洲 |