欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?精煉解讀類和對象原理

 更新時間:2022年03月14日 17:23:52   作者:K媾?  
面向?qū)ο竽耸荍ava語言的核心,是程序設(shè)計的思想。Java語言的面向?qū)ο蠹夹g(shù)包括了面向?qū)ο蠛兔嫦蜻^程的基本概念,面向?qū)ο蟮奶卣鳎琂ava語言的類,對象,修飾符,抽象類等一系列的知識點(diǎn)

面向?qū)ο?、面向過程

什么是類?

什么是對象?

這是非常抽象的兩個概念?。。。。。。。?/p>

在說清楚類和對象的概念之前,給大家講一下什么是面向?qū)ο?、面向過程,以此來推出我們類和對象的概念。

面向過程:以洗衣服為例:拿盆、放水、放衣服、放洗衣粉、手搓、換水、擰干、晾衣服,這個過程就是面向過程。?

面向?qū)ο螅阂韵匆路槔喝税岩路胚M(jìn)洗衣機(jī),倒入洗衣粉,洗完晾干,不需要關(guān)心洗衣服整個過程是怎么完成的,只需要找對象,創(chuàng)建對象,使用對象。在好比我們使用toString函數(shù),我們并不關(guān)心toString函數(shù)具體的實(shí)現(xiàn)過程,我們直接交給Arrays幫我們實(shí)現(xiàn)就可以了,這就是面向?qū)ο蟆?/p>

對象從哪來的?對象就是從類來的,有類之后才有對象,人,洗衣機(jī)?,洗衣粉,都是單獨(dú)的一個類。由類再產(chǎn)生對象,我們就叫做創(chuàng)建對象。對象都創(chuàng)建好了,每個對象都具備一些行為一些屬性,然后對象之間相互完成就可以了。這就是面向?qū)ο蠛兔嫦蜻^程。

要面向?qū)ο?,我們就要找到對象,而對象是由類來的,類是從哪來的?我們是需要去抽象的。比如說:我們都是人,人的話都有共同的屬性,姓名、性別、年齡、吃飯、睡覺,每個人都會具備這些,相當(dāng)于這就是一個模板,通過這個模板可以產(chǎn)生很多的對象,這些對象都具備這些相同的屬性。就是來抽象這個人,由這個人來創(chuàng)建對象,而這個人就是一個類。真正的要有這樣一個人,讓他是一個對象,是一個實(shí)體,就需要把他創(chuàng)建出來,通過new來創(chuàng)建。

定義類

class Person{
 
    
}//定義一個類,這個類叫Person,類名一定要是大駝峰
 
 
 
 
 
class Person{
    //類里面包含字段,也叫做屬性,也叫做成員變量
    //也包含方法
    //一個類就是由方法和字段組成的
    public String name;//屬性
    public int age;//屬性
    //什么是方法?可以解讀為這個人的行為
    public void eat(){
        System.out.println(name+" 正在吃飯");
    }
    public void sleep(){
        System.out.println(name+" 正在睡覺");
    }
 
}

由類產(chǎn)生對象的過程,術(shù)語我們叫做實(shí)例化,通過new關(guān)鍵字來實(shí)例化對象。

public class TestDemo {
    public static void main(String[] args) {
        Person person//定義一個變量person,此時類Person也相當(dāng)于類型的意思,和int a = 10,a的類型是int一樣
 
    }
}

由類Person定義的變量person是引用變量,意味著它的初值可以給null

public class TestDemo {
    public static void main(String[] args) {
        Person person = null;
 
    }
}

實(shí)例化對象

public class TestDemo {
    public static void main(String[] args) {
        Person person = new Person();//由類Person實(shí)例化了一個對象
 
    }
}

一個類可以實(shí)例化多個對象

public class TestDemo {
    public static void main(String[] args) {
        Person person = new Person();//由類Person實(shí)例化了一個對象
        Person person1 = new Person();
        Person person2 = new Person();
        Person person3 = new Person();
        Person person4 = new Person();
 
    }
}

類的成員

普通成員變量

字段是定義在類的內(nèi)部方法的外部,如果定義到方法里頭叫做局部變量,定義到方法外頭叫做成員變量?

?如何訪問成員變量,成員變量分為兩種:(普通成員變量、靜態(tài)成員變量)。普通的成員變量的訪問方式通過引用來訪問。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

成員變量沒有賦初值的情況下都有一個默認(rèn)的值

?如何給成員變量賦值

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

如果是一個普通的成員變量,它的內(nèi)存在對象里面,而不是說所有對象共用一份。每個對象都各有一份自己的name和age

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

方法也分為兩種:一種叫做普通成員方法,一種叫做靜態(tài)成員方法

普通的成員方法訪問方式也是一樣的,通過對象的引用來訪問我的方法。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

靜態(tài)成員變量

被static修飾的的變量叫靜態(tài)成員變量,也叫做類變量,是放在方法區(qū)的

靜態(tài)成員變量的訪問方式是通過類名.靜態(tài)的成員屬性/方法。

不依賴對象

class Person{
 
    public String name;
    public int age;
 
    public static int count;
 
    public void eat(){
        System.out.println(name+" 正在吃飯");
    }
    public void sleep(){
        System.out.println(name+" 正在睡覺");
    }
 
}
 
public class TestDemo {
    public static void main(String[] args) {
        Person.count++;
        System.out.println(Person.count);
        System.out.println("================");
        Person.count++;
        System.out.println(Person.count);
 
    }
}

打印結(jié)果;

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

count是被static修飾的靜態(tài)成員變量,是放在方法區(qū)的,不屬于某個對象,屬于類。正確的訪問靜態(tài)成員變量或者方法只要? 類名.靜態(tài)成員變量/方法? ? 就可以了,所有靜態(tài)的東西在方法區(qū)里只存一份,所以加2遍都是加的count本身,所以第二次打印的結(jié)果是2。

普通的方法內(nèi)部不能夠定義靜態(tài)的變量

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

1.static定義的變量是類變量,屬于類,(定義在方法內(nèi)部就屬于方法了,所以是錯誤的)

2.eat方法的調(diào)用,需要對應(yīng)的引用來調(diào)用。但如果可以定義static的變量,類Person就可以調(diào)用,所以兩者直接是矛盾的,eat需要對應(yīng)的引用來調(diào)用。size只需要類就可以調(diào)用。所以普通的方法內(nèi)部, 不能夠定義靜態(tài)的變量。

靜態(tài)的方法也不可以定義靜態(tài)變量

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

static定義的變量是類變量,屬于類,(定義在方法內(nèi)部就屬于方法了,這樣是做不到的,所以是錯誤的)

總結(jié):靜態(tài)的成員變量是不可以在方法中定義的?

普通方法里面是可以調(diào)用靜態(tài)方法的

class Person{
 
    public String name;
    public int age;
 
    public static int count;
 
    public void eat(){
 
        System.out.println(name+" 正在吃飯");
    }
    public void sleep(){
        staticFunc();
        System.out.println(name+" 正在睡覺");
    }
    public static void staticFunc(){
        System.out.println("static::func");
    }
 
}
 
public class TestDemo {
    public static void main(String[] args) {
        Person person = new Person();
         person.eat();
         person.sleep();
    }
}

?打印結(jié)果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

?靜態(tài)方法內(nèi)部不能調(diào)用普通方法

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

?靜態(tài)內(nèi)部不可以調(diào)用普通方法,因為靜態(tài)的方法不依賴于對象,?通過類名就可以調(diào)用,但沒有對象普通方法沒法調(diào)用。

main函數(shù)為什么是靜態(tài)的

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

?一個引用不可以同時指向多個對象

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

引用肯定是在棧上嗎?肯定不是

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

?看綠線,畫圖解析

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

小寫的person屬于TestDemo這個類的成員變量?

final修飾

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

private實(shí)現(xiàn)封裝

private/ public 這兩個關(guān)鍵字表示 "訪問權(quán)限控制"

被 public 修飾的成員變量或者成員方法, 可以直接被類的調(diào)用者使用.

被 private 修飾的成員變量或者成員方法, 不能被類的調(diào)用者使用.

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

提供接口

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

?打印結(jié)果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

this代表當(dāng)前對象的引用

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

構(gòu)造方法

構(gòu)造方法:方法名和類名是相同的,且構(gòu)造方法比較特殊,沒有返回值

構(gòu)造方法是干嘛的?我們需要知道一個對象的產(chǎn)生(對象的實(shí)例化)?分為幾步

1.為對象分配內(nèi)存

2.調(diào)用合適的構(gòu)造方法

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

4720b171695a4d61bed004a27b44b813.jpg

這就是一個構(gòu)造方法

前面的訪問修飾符可以是public,

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

?調(diào)用構(gòu)造方法:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

打印結(jié)果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

不帶參數(shù)和帶一個參數(shù)和帶兩個參數(shù)的構(gòu)造方法

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

?調(diào)用構(gòu)造方法:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

this的區(qū)別

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

第一種:

16243bfef65f4bc2ae826a9d72d35292.jpg

?第二種:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_17,color_FFFFFF,t_70,g_se,x_16

代表當(dāng)前對象的eat方法

?第三種:

調(diào)用不帶參數(shù)的構(gòu)造方法,

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_19,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

?打印結(jié)果 :

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

this函數(shù)必須放到第一行,只能存放在構(gòu)造函數(shù)當(dāng)中

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

代碼塊

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_13,color_FFFFFF,t_70,g_se,x_16

本地代碼塊:

兩個括號

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

?實(shí)例代碼塊和靜態(tài)代碼塊:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

靜態(tài)代碼塊不管生成多少個對象,其只會執(zhí)行一次,且是最先執(zhí)行的。 靜態(tài)代碼塊執(zhí)行完畢后, 實(shí)例代碼塊(構(gòu)造塊)執(zhí)行,再然后是構(gòu)造函數(shù)執(zhí)行。?

太累了,拜拜?。。。。?!

到此這篇關(guān)于Java?精煉解讀類和對象原理的文章就介紹到這了,更多相關(guān)Java 類和對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論