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

Java 全方位講解面向?qū)ο筇攸c(diǎn)與使用

 更新時(shí)間:2022年04月14日 16:53:10   作者:Tangable22  
面向?qū)ο箝_(kāi)發(fā)方法將面向?qū)ο蟮乃枷霊?yīng)用于軟件開(kāi)發(fā)過(guò)程中,指導(dǎo)開(kāi)發(fā)活動(dòng),是建立在“對(duì)象”概念基礎(chǔ)上的方法學(xué),簡(jiǎn)稱(chēng)OO( Object-Oriented)方法

面向過(guò)程和面向?qū)ο蟮膮^(qū)別

面向過(guò)程:當(dāng)事件比較簡(jiǎn)單的時(shí)候,利用面向過(guò)程,注重的是事件的具體步驟和過(guò)程,注重的是過(guò)程中的具體行為,以函數(shù)為最小單位,考慮怎么做。

面向?qū)ο螅鹤⒅卣?ldquo;參與者”,將功能封裝進(jìn)對(duì)象中,強(qiáng)調(diào)具備了功能的對(duì)象,以類(lèi)/對(duì)象為最小單位,考慮誰(shuí)來(lái)做。

案例:小明從冰箱里拿東西

面向過(guò)程:

在這里插入圖片描述

面向?qū)ο?

在這里插入圖片描述

面向過(guò)程 —> 面向?qū)ο?, 其實(shí)就是由執(zhí)行者 —> 指揮者的 一個(gè)過(guò)渡

類(lèi)和對(duì)象的關(guān)系

萬(wàn)物皆對(duì)象

對(duì)象:具體的事物,具體的實(shí)體,具體的實(shí)例,模板下具體的產(chǎn)品

類(lèi):對(duì)對(duì)象向上抽取出像的部分,公布部分,形成類(lèi),類(lèi)是抽象的,是一個(gè)模板,一般在寫(xiě)代碼的時(shí)候先寫(xiě)類(lèi),然后再根據(jù)類(lèi)創(chuàng)建對(duì)應(yīng)的對(duì)象

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

在這里插入圖片描述

類(lèi)和對(duì)象的創(chuàng)建

類(lèi)的創(chuàng)建

1.屬性(field 成員變量)

屬性用于定義該類(lèi)或該類(lèi)對(duì)象包含的數(shù)據(jù)或者說(shuō)靜態(tài)特征。屬性作用范圍是整個(gè)類(lèi)體。

屬性定義格式:

[修飾符] 屬性類(lèi)型 屬性名 = [默認(rèn)值];

2.方法

方法用于定義該類(lèi)或該類(lèi)實(shí)例的行為特征和功能實(shí)現(xiàn)。方法是類(lèi)和對(duì)象行為特征的抽象。方法很類(lèi)似于面向過(guò)程中的函數(shù)。面向過(guò)程中,函數(shù)是最基本單位,整個(gè)程序由一個(gè)個(gè)函數(shù)調(diào)用組成。面向?qū)ο笾校麄€(gè)程序的基本單位是類(lèi),方法是從屬于類(lèi)和對(duì)象的。

方法定義格式:

[修飾符] 方法返回類(lèi)型 方法名(形參列表){

? //Java語(yǔ)句

}

我們以上面王者榮耀英雄類(lèi)創(chuàng)建為例:

//創(chuàng)建英雄類(lèi)
public class Hero {
    //屬性
    String Name;//英雄姓名
    int Survive;//生存能力
    int Attack;//攻擊傷害
    int Skill;//技能效果
    int Difficulty;//上手難度

    //技能
    public void Kill(int number){
        //根據(jù)輸入的數(shù)字釋放幾技能
        System.out.println(Name+"釋放"+number+"技能?。?!");
    }
    //輸出該英雄的屬性
    public void print(){
        System.out.println("英雄:"+Name);
        System.out.println("生存能力:"+Survive);
        System.out.println("攻擊傷害:"+Attack);
        System.out.println("技能效果:"+Skill);
        System.out.println("上手難度:"+Difficulty);
    }

}

對(duì)象的創(chuàng)建

接下來(lái)我們對(duì)我們創(chuàng)建好的類(lèi)來(lái)創(chuàng)建對(duì)象

public class TestCode01 {
    //main方法,程序的入口
    public static void main(String[] args) {
        //創(chuàng)建一個(gè)對(duì)象(英雄)-->馬克波羅
        Hero make = new Hero();
        make.Name = "馬克波羅";
        make.Survive = 4;
        make.Attack = 6;
        make.Skill = 6;
        make.Difficulty = 5;
        //再創(chuàng)建一個(gè)英雄-->瀾
        Hero lan = new Hero();
        lan.Name = "瀾";
        lan.Survive = 3;
        lan.Attack = 5;
        lan.Skill = 4;
        lan.Difficulty = 6;
        lan.Kill(1);
        //輸出兩個(gè)英雄的屬性
        make.print();
        System.out.println("-------------");
        lan.print();
        //釋放技能
        make.Kill(3);
        System.out.println("-------------");
        lan.Kill(2);
    }
}

結(jié)果: 每個(gè)英雄都有相同的屬性,每個(gè)屬性又有不同的值,通過(guò)類(lèi)我們可以創(chuàng)建很多個(gè)對(duì)象,每個(gè)對(duì)象又有不同的屬性值。

比如:王者里的一百多個(gè)英雄,每個(gè)都有不同的特點(diǎn)。

在這里插入圖片描述

創(chuàng)建對(duì)象的過(guò)程:

(1)在第一次遇到一個(gè)類(lèi)的時(shí)候,對(duì)這個(gè)類(lèi)要進(jìn)行加載,只加載一次。

(2)創(chuàng)建對(duì)象,在堆中開(kāi)辟空間

(3)對(duì)對(duì)象進(jìn)行初始化操作,屬性賦值都是默認(rèn)的初始值。

(4)new關(guān)鍵字調(diào)用構(gòu)造器,執(zhí)行構(gòu)造方法,在構(gòu)造器中對(duì)屬性重新進(jìn)行賦值

構(gòu)造器

對(duì)象都是new出來(lái)的,new關(guān)鍵字實(shí)際上在調(diào)用一個(gè)方法,這個(gè)方法叫做構(gòu)造方法(構(gòu)造器)

調(diào)用構(gòu)造器的時(shí)候,如果你的類(lèi)中沒(méi)有寫(xiě)構(gòu)造器,那么系統(tǒng)會(huì)默認(rèn)給你分配一個(gè)構(gòu)造器(空構(gòu)造器)

構(gòu)造方法格式:

[修飾符] 構(gòu)造器名字(){

}

構(gòu)造器和方法的區(qū)別:

  • 沒(méi)有方法的返回值
  • 方法體內(nèi)部不能有return語(yǔ)句
  • 構(gòu)造器的名字很特殊,必須跟類(lèi)名一致

構(gòu)造器的作用:不是為了創(chuàng)建對(duì)象,因?yàn)樵谡{(diào)用構(gòu)造器之前,這個(gè)對(duì)象就已經(jīng)創(chuàng)建好了,并且屬性有默認(rèn)的初始化的值。

調(diào)用構(gòu)造器的目的是給屬性進(jìn)行賦值操作的。

注意:我們一般不會(huì)在空構(gòu)造器中進(jìn)行初始化操作,因?yàn)槟菢拥脑捗總€(gè)對(duì)象的屬性就一樣了。

下面例子:

class Hero{
    //屬性
    String Name;//英雄姓名
    int Survive;//生存能力
    int Attack;//攻擊傷害
    int Skill;//技能效果
    int Difficulty;//上手難度

    public Hero(){
        Survive=4;
        Attack=5;
        Skill=6;
        Difficulty=7;
    }
    public void print(){
        System.out.println("英雄:"+Name);
        System.out.println("生存能力:"+Survive);
        System.out.println("攻擊傷害:"+Attack);
        System.out.println("技能效果:"+Skill);
        System.out.println("上手難度:"+Difficulty);
    }
}
public class TestCode01 {
    public static void main(String[] args) {
        //創(chuàng)建兩個(gè)英雄對(duì)象
        Hero make = new Hero();
        make.Name="馬克";
        Hero lan=new Hero();
        lan.Name="瀾";
        //輸出兩個(gè)屬性
        make.print();
        lan.print();
    }
}

因?yàn)槲覀冊(cè)跇?gòu)造器里面賦值了,所以我們創(chuàng)建對(duì)象的時(shí)候?qū)傩跃鸵粯恿?/p>

在這里插入圖片描述

實(shí)際上,我們只要保證空構(gòu)造器的存在就可以了,里面的東西不用寫(xiě),我們要用構(gòu)造器賦值就要對(duì)構(gòu)造器重載

構(gòu)造器重載

一般保證空構(gòu)造器的存在,空構(gòu)造器中一般不會(huì)進(jìn)行屬性的賦值操作

在這里插入圖片描述

一般我們會(huì)重載構(gòu)造器,在重載的構(gòu)造器中進(jìn)行屬性賦值操作

在這里插入圖片描述

在重載構(gòu)造器以后,假如空構(gòu)造器忘寫(xiě)了,系統(tǒng)也不會(huì)給你分配默認(rèn)的空構(gòu)造器了,那么你要調(diào)用的話就會(huì)出錯(cuò)了。所以我們重載構(gòu)造器時(shí),一般要保留默認(rèn)構(gòu)造器

在這里插入圖片描述

當(dāng)形參名字和屬性名字重名的時(shí)候,會(huì)出現(xiàn)就近原則:在要表示對(duì)象的屬性前加上this.來(lái)修飾 ,因?yàn)閠his代表的就是你創(chuàng)建的那個(gè)對(duì)象

在這里插入圖片描述

this的使用

this就是指當(dāng)前的對(duì)象

this可以修飾屬性

當(dāng)屬性名字和形參發(fā)生重名的時(shí)候,或者 屬性名字 和局部變量重名的時(shí)候,都會(huì)發(fā)生就近原則,所以如果我要是直接使用變量名字的話就指的是離的近的那個(gè)形參或者局部變量,這時(shí)候如果我想要表示屬性的話,在前面要加上:this.修飾(如果不發(fā)生重名問(wèn)題的話,實(shí)際上你要是訪問(wèn)屬性也可以省略this.)

在這里插入圖片描述

this修飾方法

在同一個(gè)類(lèi)中,方法可以互相調(diào)用,this.可以省略不寫(xiě)。

在這里插入圖片描述

this可以修飾構(gòu)造器

同一個(gè)類(lèi)中的構(gòu)造器可以相互用this調(diào)用,注意:this修飾構(gòu)造器必須放在第一行

在這里插入圖片描述

static修飾

static可以修飾:屬性、方法、代碼塊、內(nèi)部類(lèi)

static修飾屬性

在類(lèi)加載的時(shí)候,會(huì)將靜態(tài)內(nèi)容也加載到方法區(qū)的靜態(tài)域中,靜態(tài)的內(nèi)容先于對(duì)象存在,并且這個(gè)靜態(tài)內(nèi)容被所有該類(lèi)的對(duì)象共享。

  • 在類(lèi)加載的時(shí)候一起加載入方法區(qū)中的靜態(tài)域中
  • 先于對(duì)象存在
  • 訪問(wèn)方式: 對(duì)象名.屬性名 類(lèi)名.屬性名(推薦)

在這里插入圖片描述

static修飾屬性的應(yīng)用場(chǎng)景:某些特定的數(shù)據(jù)想要在內(nèi)存中共享,只有一塊 -->這個(gè)情況下,就可以用static修飾的屬性。

static修飾方法:

  • static和public都是修飾符,并列的沒(méi)有先后順序,先寫(xiě)誰(shuí)后寫(xiě)誰(shuí)都行
  • 在靜態(tài)方法中不能使用this關(guān)鍵字
  • 在靜態(tài)方法中不能訪問(wèn)非靜態(tài)的方法
  • 在靜態(tài)方法中不能訪問(wèn)非靜態(tài)的屬性
  • 靜態(tài)的方法可以用 對(duì)象名.方法名去調(diào)用 也可以 用 類(lèi)名.方法名 (推薦)
  • 在同一個(gè)類(lèi)中可以直接調(diào)用靜態(tài)方法

在這里插入圖片描述

代碼塊

代碼塊的分類(lèi): 普通塊、構(gòu)造塊、靜態(tài)塊、同步塊(多線程)

代碼塊執(zhí)行順序: 最先執(zhí)行靜態(tài)塊–>再執(zhí)行構(gòu)造塊,(不常用)–>再執(zhí)行構(gòu)造器–>再執(zhí)行方法中的普通塊

public class Test {
    //屬性
    int a;
    static int sa;
    //方法
    public void a(){
        System.out.println("-----a");
        {
            //普通塊限制了局部變量的作用范圍
            System.out.println("這是普通塊");
            System.out.println("----000000");
            int num = 10;
            System.out.println(num);
        }

    }
    public static void b(){
        System.out.println("------b");
    }
    //構(gòu)造塊
    {
        System.out.println("------這是構(gòu)造塊");
    }
    //靜態(tài)塊
    static{
        System.out.println("-----這是靜態(tài)塊");
        //在靜態(tài)塊中只能方法:靜態(tài)屬性,靜態(tài)方法
        System.out.println(sa);
        b();
    }
    //構(gòu)造器
    public Test(){
        System.out.println("這是空構(gòu)造器");
    }
    public Test(int a){
        this.a = a;
    }
    //這是一個(gè)main方法,是程序的入口:
    public static void main(String[] args) {
        Test t = new Test();
        t.a();
        Test t2 = new Test();
        t2.a();
    }
}

包(import)

包的作用: 為了解決重名的作用,解決權(quán)限問(wèn)題

包名的定義:

  • 名字全部小寫(xiě)
  • 中間用.隔開(kāi)
  • 一般都是公司域名倒著寫(xiě):com.jd 、com.taobao
  • 加上模塊名字 :com.taobao.login
  • 不能使用系統(tǒng)中的關(guān)鍵字:null
  • 包聲明的位置一般都在非注釋代碼的第一行

在這里插入圖片描述

導(dǎo)包:

(1)使用不同包下的類(lèi)要需要導(dǎo)包, 例如:import java.util.Date;

(2)在導(dǎo)包以后,還想用其他包下同名的類(lèi),就必須要手動(dòng)自己寫(xiě)所在的包。

(3)同一個(gè)包下的類(lèi)想使用不需要導(dǎo)包,可以直接使用。

(4)在java.lang包下的類(lèi),可以直接使用無(wú)需導(dǎo)包

(5)可以直接導(dǎo)入*

靜態(tài)導(dǎo)入:

//靜態(tài)導(dǎo)入:
import static java.lang.Math.*;
//導(dǎo)入:java.lang下的Math類(lèi)中的所有靜態(tài)的內(nèi)容

public class Test {
    //這是一個(gè)main方法,是程序的入口:
    public static void main(String[] args) {
        System.out.println(random());
        System.out.println(PI);
        System.out.println(round(5.6));
    }
    //在靜態(tài)導(dǎo)入后,同一個(gè)類(lèi)中有相同的方法的時(shí)候,會(huì)優(yōu)先走自己定義的方法。
    public static int round(double a){
        return 1000;
    }
}

到此這篇關(guān)于Java 全方位講解面向?qū)ο筇攸c(diǎn)與使用的文章就介紹到這了,更多相關(guān)Java 面向?qū)ο髢?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于spring 方法級(jí)緩存的多種實(shí)現(xiàn)

    基于spring 方法級(jí)緩存的多種實(shí)現(xiàn)

    下面小編就為大家?guī)?lái)一篇基于spring 方法級(jí)緩存的多種實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • springboot集成nacos讀取nacos配置數(shù)據(jù)的原理

    springboot集成nacos讀取nacos配置數(shù)據(jù)的原理

    這篇文章主要介紹了springboot集成nacos讀取nacos配置數(shù)據(jù)的原理,文中有詳細(xì)的代碼流程,對(duì)大家學(xué)習(xí)springboot集成nacos有一定的幫助,需要的朋友可以參考下
    2023-05-05
  • Java干貨知識(shí)深入理解內(nèi)部類(lèi)

    Java干貨知識(shí)深入理解內(nèi)部類(lèi)

    這篇文章主要介紹了Java干貨知識(shí)深入理解內(nèi)部類(lèi),定義在另一個(gè)類(lèi)或方法中的類(lèi)就叫做內(nèi)部類(lèi),需要的朋友可以參考下
    2019-06-06
  • Java?Collections工具類(lèi)中常用算法解析

    Java?Collections工具類(lèi)中常用算法解析

    在軟件開(kāi)發(fā)中,算法是非常重要的一部分,它們可以提供高效的數(shù)據(jù)處理和操作,這篇文章主要為大家介紹了Collections?工具類(lèi)集合框架中常用算法,感興趣的可以了解一下
    2023-06-06
  • SpringBoot實(shí)現(xiàn)掃碼登錄的示例代碼

    SpringBoot實(shí)現(xiàn)掃碼登錄的示例代碼

    本文主要介紹了SpringBoot實(shí)現(xiàn)掃碼登錄的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Spring整合redis的操作代碼

    Spring整合redis的操作代碼

    這篇文章主要介紹了Spring整合redis的操作代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Java中Calendar類(lèi)的一些常用方法小結(jié)

    Java中Calendar類(lèi)的一些常用方法小結(jié)

    項(xiàng)目當(dāng)中,我們經(jīng)常會(huì)涉及到對(duì)時(shí)間的處理,Date類(lèi)最主要的作用就是獲得當(dāng)前時(shí)間,同時(shí)這個(gè)類(lèi)里面也具有設(shè)置時(shí)間以及一些其他的功能,但更推薦使用 Calendar 類(lèi)進(jìn)行時(shí)間和日期的處理,這篇文章主要給大家介紹了關(guān)于Java中Calendar類(lèi)的一些常用方法,需要的朋友可以參考下
    2021-11-11
  • SpringCloud Alibaba使用Seata處理分布式事務(wù)的技巧

    SpringCloud Alibaba使用Seata處理分布式事務(wù)的技巧

    在傳統(tǒng)的單體項(xiàng)目中,我們使用@Transactional注解就能實(shí)現(xiàn)基本的ACID事務(wù)了,隨著微服務(wù)架構(gòu)的引入,需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行分庫(kù)分表,每個(gè)服務(wù)擁有自己的數(shù)據(jù)庫(kù),這樣傳統(tǒng)的事務(wù)就不起作用了,那么我們?nèi)绾伪WC多個(gè)服務(wù)中數(shù)據(jù)的一致性呢?跟隨小編一起通過(guò)本文了解下吧
    2021-06-06
  • RabbitMQ 的七種隊(duì)列模式和應(yīng)用場(chǎng)景

    RabbitMQ 的七種隊(duì)列模式和應(yīng)用場(chǎng)景

    最近學(xué)習(xí)RabbitMQ,本文就記錄一下RabbitMQ 的七種隊(duì)列模式和應(yīng)用場(chǎng)景,方便以后使用,也方便和大家共享,相互交流
    2021-05-05
  • 使用springboot配置和占位符獲取配置文件中的值

    使用springboot配置和占位符獲取配置文件中的值

    這篇文章主要介紹了使用springboot配置和占位符獲取配置文件中的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評(píng)論