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

手把手帶你粗略了解Java--類(lèi)和對(duì)象

 更新時(shí)間:2021年08月19日 16:01:47   作者:一朵花花  
這篇文章主要給大家介紹了關(guān)于java中類(lèi)和對(duì)象的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

認(rèn)識(shí)類(lèi)和對(duì)象

1.類(lèi)、對(duì)象是什么?

類(lèi)在Java中,也叫做自定義類(lèi)型。

類(lèi)就是一類(lèi)對(duì)象的統(tǒng)稱(chēng),對(duì)象就是這一類(lèi)具體化的一個(gè)個(gè)例

可以把類(lèi)想象成一個(gè)模板,把對(duì)象想象成實(shí)體,比如:建房子,會(huì)有圖紙,然后根據(jù)圖紙去建房子,一張圖紙可建很多同樣的房子。而圖紙就是"類(lèi)",建的房子就是"實(shí)體",通過(guò)一個(gè)類(lèi)可以產(chǎn)生多個(gè)對(duì)象

2.什么是面向?qū)ο螅?/h3>

之前在初始Java篇簡(jiǎn)單講述了Java的面向?qū)ο笮裕瑢?duì)比了面向?qū)ο蠛兔嫦蜻^(guò)程的不同

這里就不多說(shuō)了 :https://blog.csdn.net/m0_47988201/article/details/118996045?spm=1001.2014.3001.5501.

面向?qū)ο笫撬伎紗?wèn)題的一種方式,是一種思想

總的來(lái)說(shuō),面向?qū)ο缶褪怯么a(類(lèi)),來(lái)描述客觀世界事物的一種方式,一個(gè)類(lèi)主要包含一個(gè)事物的屬性和行為

面向?qū)ο蟮暮锰幨牵簩?fù)雜的事情簡(jiǎn)單化,只要面對(duì)一個(gè)對(duì)象就行

之后,會(huì)從這三點(diǎn)進(jìn)行深入學(xué)習(xí):找對(duì)象—?jiǎng)?chuàng)對(duì)象—使用對(duì)象

3.一個(gè)對(duì)象的產(chǎn)生過(guò)程是?

①給對(duì)象分配內(nèi)存;

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

🔺OOP語(yǔ)言的三大特征?

OOP:面向?qū)ο缶幊?br />

三大特性:繼承、封裝、多態(tài)

類(lèi)和對(duì)象的實(shí)例化

類(lèi)的定義:

在Java中定義類(lèi),需要 class 關(guān)鍵字

類(lèi)中包含的內(nèi)容稱(chēng)為類(lèi)的成員;屬性主要是用來(lái)描述類(lèi)的,稱(chēng)之為類(lèi)的成員屬性或者類(lèi)成員變量;方法主要說(shuō)明類(lèi)具有哪些功能,稱(chēng)為類(lèi)的成員方法

類(lèi)的成員包括:字段、方法、代碼塊、內(nèi)部類(lèi)和接口等,此處只介紹前三個(gè)

語(yǔ)法格式:

class ClassName {
field ; …// 字段(成員屬性) / 成員變量
method;// 行為 / 成員方法
}

舉例:

class Person{
    //字段
	String name;
	int age;
    //行為
    public void eat(){
        System.out.println("eat()!");
    }
    public void sleep(){
        System.out.println("sleep()!");
    }
}

注意:

  • 類(lèi)名使用大駝峰命名法
  • 字段 / 成員變量定義在方法外面、類(lèi)的里面
  • 實(shí)例成員變量存放在對(duì)象里
  • Java中訪問(wèn)修飾限定符:
  • private:私有的;public:共有的;protected:受保護(hù)的;什么都不寫(xiě):默認(rèn)權(quán)限 / 包訪問(wèn)權(quán)限
  • 一般一個(gè)文件當(dāng)中只定義一個(gè)類(lèi)
  • main方法所在的類(lèi)必須要使用public修飾p
  • ublic修飾的類(lèi)必須要和文件名相同

實(shí)例化對(duì)象:

在Java中,通過(guò)關(guān)鍵字new,配合類(lèi)名可以實(shí)例化一個(gè)對(duì)象

用類(lèi)類(lèi)型創(chuàng)建對(duì)象的過(guò)程,稱(chēng)為類(lèi)的實(shí)例化

//實(shí)例化對(duì)象
Person person1 = new Person();
Person person2 = new Person();
Person person3 = new Person();
Person person4 = new Person();

在這里插入圖片描述

①如何訪問(wèn)對(duì)象中的實(shí)例成員變量?

通過(guò)對(duì)象的引用即可訪問(wèn)對(duì)象的引用 . 成員變量

public static void main(String[] args) {
	//實(shí)例化一個(gè)對(duì)象
	Person person = new Person();
	//訪問(wèn)對(duì)象中的實(shí)例成員變量
	//通過(guò)對(duì)象的引用
	System.out.println(person.age);
	System.out.println(person.name);
}

在這里插入圖片描述

②如何訪問(wèn)靜態(tài)的數(shù)據(jù)成員?

類(lèi)名 . 靜態(tài)成員變量

public static void main(String[] args) {
	Person per = new Person();
	System.out.println(Person.size);
}

注意:

  • 同一個(gè)類(lèi)可以創(chuàng)建多個(gè)實(shí)例
  • new關(guān)鍵字用于創(chuàng)建一個(gè)對(duì)象的實(shí)例實(shí)例
  • 成員變量,沒(méi)有初始化,默認(rèn)值為對(duì)應(yīng)的 0 值
  • 引用類(lèi)型默認(rèn)為null,簡(jiǎn)單類(lèi)型默認(rèn)為 0
  • 特殊:char類(lèi)型—"\u0000";boolean類(lèi)型—false
  • 使用 . 來(lái)訪問(wèn)對(duì)象中的屬性和方法
  • 靜態(tài)成員變量不屬于對(duì)象,屬于類(lèi),且只有一份

方法:

實(shí)例成員方法:

public void eat(){
    System.out.println("eat()!");
}
public void sleep(){
    System.out.println("sleep()!");
}

靜態(tài)成員方法

靜態(tài)成員方法
public static func(){
	System.out.println("static::func()!");
}

🔺構(gòu)造方法

構(gòu)造方法的方法名和類(lèi)名相同,且沒(méi)有返回值

構(gòu)造方法作用: 實(shí)例化一個(gè)對(duì)象

class Person{
    private String name;
    private int age;
    public  Person(){
        System.out.println("Person!");
    }
	public Person(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println("Person<String,int>");
    }
public class Test {
    public static void main(String[] args) {
        //寫(xiě)這行代碼的時(shí)候,就會(huì)調(diào)用構(gòu)造方法
        Person person1 = new Person();
        Person person2 = new Person("Huahua",18);
	 }
}

注意:

  • 當(dāng)沒(méi)有提供構(gòu)造方法的時(shí)候,編譯器會(huì)自動(dòng)提供一個(gè)沒(méi)有參數(shù)的構(gòu)造方法
  • 若類(lèi)中定義了構(gòu)造方法,則默認(rèn)的無(wú)參構(gòu)造不再產(chǎn)生
  • 什么時(shí)候調(diào)用構(gòu)造方法取決于new對(duì)象時(shí)是否給參數(shù)
  • 構(gòu)造方法支持重載,規(guī)則和普通方法一致

①訪問(wèn)實(shí)例成員方法

通過(guò)對(duì)象的引用進(jìn)行訪問(wèn):對(duì)象的引用 . 實(shí)例成員方法

public static void main(String[] args) {
	Person per = new Person();
	per.eat();
	per.sleep();
}

②訪問(wèn)靜態(tài)成員方法

類(lèi)名 . 靜態(tài)成員方法

public static void main(String[] args) {
	Person.func();
}

static 關(guān)鍵字

1.修飾屬性:

Java靜態(tài)屬性和類(lèi)相似,和具體的實(shí)例無(wú)關(guān)

即:同一個(gè)類(lèi)的不同實(shí)例共用同一個(gè)靜態(tài)屬性

class Test{
    public int a = 0;
    public static int count;
}

靜態(tài)成員變量只有一份:

public static void main(String[] args) {
    Test T = new Test();
    T.a++;
    Test.count++;
    System.out.println(T.a+" "+Test.count);
}

輸出結(jié)果:

在這里插入圖片描述

分析原因:

在這里插入圖片描述

2.修飾方法:

在方法前應(yīng)用 ststic 關(guān)鍵字,就把該方法稱(chēng)為靜態(tài)方法

靜態(tài)成員方法
public static func(){
	System.out.println("static::func()!");
}

注意:

  • 靜態(tài)方法內(nèi)部不能訪問(wèn)非靜態(tài)成員
  • 靜態(tài)方法屬于類(lèi),不屬于類(lèi)的對(duì)象
  • 可以直接調(diào)用靜態(tài)方法,而無(wú)需創(chuàng)建類(lèi)的實(shí)例
  • 靜態(tài)方法可以更改靜態(tài)數(shù)據(jù)成員的值
  • 靜態(tài)方法中不能調(diào)用任何非靜態(tài)方法

this 關(guān)鍵字

this 表示當(dāng)前對(duì)象的引用

this 使用方法:

1、this . 屬性名稱(chēng) 訪問(wèn)屬性,指的是訪問(wèn)類(lèi)中的成員變量,用來(lái)區(qū)分成員變量和局部變量

2、this . 方法名稱(chēng) 用來(lái)訪問(wèn)本類(lèi)的成員方法

3、this();訪問(wèn)本類(lèi)的構(gòu)造方法,()中可以有參數(shù)的 如果有參數(shù) 就是調(diào)用指定的有參構(gòu)造

舉例1

訪問(wèn)屬性 和 訪問(wèn)方法

class  Person{
    private String name;
    private int age;
    //調(diào)用屬性
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //調(diào)用方法
    public void eat{
    	System.out.println(this.getName());
    }
    public String getName{
    	return name;
    }
}

舉例2

訪問(wèn)構(gòu)造方法

class Person{
    private String name;
    private int age;
    public  Person(){
    	// 訪問(wèn)構(gòu)造方法
        this("Huahua",3);
        System.out.println("Person!");
    }
    public Person(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println("Person<String,int>");
    }
}

注意事項(xiàng):

  • this() 不能使用在普通方法中 只能寫(xiě)在構(gòu)造方法中
  • this() 必須是構(gòu)造方法中的第一條語(yǔ)句

getter 和 setter方法

當(dāng)我們使用 private 來(lái)修飾字段的時(shí)候,就無(wú)法直接使用這個(gè)字段了,這就需要使用 getter 和 setter 方法

class Person{
    private String name;
    //setter方法給設(shè)施變量的值
    public String getName{
       	return name;
    }
    public void setName(String name){
        this.name = name;
    }
}

注意事項(xiàng):

  • getName 即為 getter 方法,表示獲取這個(gè)成員的值
  • setName 即為 setter 方法,表示設(shè)置這個(gè)成員的值
  • 不是所有的字段都一定要提供 setter / getter 方法,而是要根據(jù)實(shí)際情況決定提供哪種方法
  • 當(dāng) setter 方法的形參名字和類(lèi)中的成員屬性的名字一樣時(shí),如果不適用 this,相當(dāng)于自賦值,this表示當(dāng)前實(shí)例的引用
  • 在IDEA中,可以使用Alt+F12,快速生成 setter / getter 方法

封裝

封裝:用 private 來(lái)修飾屬性 / 方法

類(lèi)和對(duì)象階段,主要研究的就是封裝特性

class Student{
    private String name;
    public int age;
    public void func1(){
        System.out.println("func1()");
    }
}

如果一個(gè)屬性 / 方法被 private 修飾之后,限定只能在類(lèi)當(dāng)中來(lái)使用

封裝的實(shí)現(xiàn)步驟:

1、修改屬性的可見(jiàn)性——設(shè)為private

2、創(chuàng)建getter / setter方法——用于屬性的讀寫(xiě)

3、在getter / setter方法中加入屬性控制語(yǔ)句——對(duì)屬性值的合法性進(jìn)行判斷

舉例:

class Student{
    //成員變量私有化
    private int age;
    //setter方法給設(shè)施變量的值
    public void setAge(int age){
        if(age < 0){
            System.out.println("年齡無(wú)效!");
        }
        else{
            this.age = age;
        }
    }
    //提供一個(gè)公開(kāi)的接口
    //使用getter方法獲取賦值
    public int getAge(){
        return age;
    }
}
public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        //檢驗(yàn)
        student.setAge(-10);
        System.out.println(student.getAge());
    }
}

輸出結(jié)果:

在這里插入圖片描述

Java中的訪問(wèn)修飾符:

訪問(wèn)修飾符 本類(lèi) 同包 子類(lèi) 其他
private
public
protected
默認(rèn)

封裝的作用:

  • 對(duì)象的數(shù)據(jù)封裝特性,提高了程序的可復(fù)用性和可維護(hù)性,降低了程序員保持?jǐn)?shù)據(jù)與操作內(nèi)容的負(fù)擔(dān)
  • 對(duì)象的數(shù)據(jù)封裝特性還可以把對(duì)象的私有數(shù)據(jù)和公共數(shù)據(jù)分離開(kāi),保護(hù)了私有數(shù)據(jù),減少了可能的模塊間干擾,達(dá)到降低程序復(fù)雜性、提高可控性的目的

建議:以后在設(shè)計(jì)類(lèi)的時(shí)候,無(wú)特殊要求,所有的屬性雖好都設(shè)置為私有的private ,一定要體現(xiàn)封裝

代碼塊

使用 { } 定義的一段代碼稱(chēng)為代碼塊

重點(diǎn)掌握代碼塊執(zhí)行的先后順序

分為四種:

普通代碼塊:在方法或語(yǔ)句中出現(xiàn)的{ }就稱(chēng)為普通代碼塊
實(shí)例代碼塊 (構(gòu)造代碼塊)
靜態(tài)代碼塊
同步代碼塊

實(shí)例代碼塊:

定義在類(lèi)中且沒(méi)有加static關(guān)鍵字的代碼塊

如果存在多個(gè)構(gòu)造代碼塊,執(zhí)行順序由他們?cè)诖a中出現(xiàn)的次序決定,先出現(xiàn)先執(zhí)行

特性:

{
 System.out.println("實(shí)例代碼塊......");
}

注意事項(xiàng):

  • 實(shí)例代碼塊優(yōu)先于構(gòu)造方法執(zhí)行,因?yàn)榫幾g完成后,編譯器會(huì)將實(shí)例代碼塊中的代碼拷貝到每個(gè)構(gòu)造方法第一條語(yǔ)句前
  • 實(shí)例代碼塊只有在創(chuàng)建對(duì)象時(shí)才會(huì)執(zhí)行

靜態(tài)代碼塊:

static {
 System.out.println("靜態(tài)代碼塊......");
}

注意事項(xiàng):

  • 靜態(tài)代碼塊不能存在于任何方法體內(nèi)
  • 靜態(tài)代碼塊不能直接訪問(wèn)實(shí)例變量和實(shí)例方法,需要通過(guò)類(lèi)的實(shí)例對(duì)象來(lái)訪問(wèn)
  • 靜態(tài)代碼塊不管生成多少個(gè)對(duì)象,其只會(huì)執(zhí)行一次
  • 靜態(tài)成員變量是類(lèi)的屬性,因此是在JVM加載類(lèi)時(shí)開(kāi)辟空間并初始化的
  • 如果一個(gè)類(lèi)中包含多個(gè)靜態(tài)代碼塊,在編譯代碼時(shí),編譯器會(huì)按照定義的先后次序依次合并,最終放在生成的<>方法中,該方法在類(lèi)加載時(shí)調(diào)用,并且只調(diào)用一次

靜態(tài) / 實(shí)例代碼塊異同點(diǎn)

相同點(diǎn): 都是JVM加載類(lèi)后且在構(gòu)造函數(shù)執(zhí)行之前執(zhí)行,在類(lèi)中可定義多個(gè),一般在代碼塊中對(duì)一些static變量進(jìn)行賦值

不同點(diǎn)靜態(tài)代碼塊在非靜態(tài)代碼塊之前執(zhí)行,靜態(tài)代碼塊只在第一次 new 時(shí)執(zhí)行一次,之后不在執(zhí)行。而非靜態(tài)代碼塊每new一次就執(zhí)行一次

總結(jié)

本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能給多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • java實(shí)現(xiàn)字符串排列組合問(wèn)題

    java實(shí)現(xiàn)字符串排列組合問(wèn)題

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)字符串排列組合問(wèn)題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Java中的參數(shù)傳遞詳細(xì)介紹

    Java中的參數(shù)傳遞詳細(xì)介紹

    大家好,本篇文章主要講的是Java中的參數(shù)傳遞詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Java泛型通配符的使用詳解

    Java泛型通配符的使用詳解

    本文主要介紹了Java泛型通配符的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • SpringMVC之異常處理解讀

    SpringMVC之異常處理解讀

    這篇文章主要介紹了SpringMVC之異常處理解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring中的@Lazy注解用法實(shí)例

    Spring中的@Lazy注解用法實(shí)例

    這篇文章主要介紹了Spring中的@Lazy注解用法實(shí)例,在Spring中常用于單實(shí)例Bean對(duì)象的創(chuàng)建和使用,單實(shí)例Bean懶加載容器啟動(dòng)后不創(chuàng)建對(duì)象,而是在第一次獲取Bean創(chuàng)建對(duì)象時(shí),初始化,需要的朋友可以參考下
    2023-08-08
  • SpringBoot配置文件中敏感信息加密的三種方法

    SpringBoot配置文件中敏感信息加密的三種方法

    當(dāng)我們將項(xiàng)目部署到服務(wù)器上時(shí),一般會(huì)在jar包的同級(jí)目錄下加上application.yml配置文件,這樣可以在不重新?lián)Q包的情況下修改配置,這種方式存在安全隱患,如果配置文件泄露,就會(huì)造成數(shù)據(jù)庫(kù)密碼泄露,所以本文給大家介紹了SpringBoot配置文件中敏感信息加密的三種方法
    2024-05-05
  • Mybatis千萬(wàn)級(jí)數(shù)據(jù)查詢(xún)的解決方式,避免OOM問(wèn)題

    Mybatis千萬(wàn)級(jí)數(shù)據(jù)查詢(xún)的解決方式,避免OOM問(wèn)題

    這篇文章主要介紹了Mybatis千萬(wàn)級(jí)數(shù)據(jù)查詢(xún)的解決方式,避免OOM問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • java中如何使用HttpClient調(diào)用接口

    java中如何使用HttpClient調(diào)用接口

    這篇文章主要介紹了java中如何使用HttpClient調(diào)用接口,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Hibernate中使用HQLQuery查詢(xún)?nèi)繑?shù)據(jù)和部分?jǐn)?shù)據(jù)的方法實(shí)例

    Hibernate中使用HQLQuery查詢(xún)?nèi)繑?shù)據(jù)和部分?jǐn)?shù)據(jù)的方法實(shí)例

    今天小編就為大家分享一篇關(guān)于Hibernate中使用HQLQuery查詢(xún)?nèi)繑?shù)據(jù)和部分?jǐn)?shù)據(jù)的方法實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • 淺談Springboot整合RocketMQ使用心得

    淺談Springboot整合RocketMQ使用心得

    本篇文章主要介紹了Springboot整合RocketMQ使用心得,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01

最新評(píng)論