最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中類(lèi)和對(duì)象的詳細(xì)介紹

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

面向過(guò)程和面向?qū)ο?/h3>
  • C語(yǔ)言是面向過(guò)程的,關(guān)注的是過(guò)程,分析出求解問(wèn)題的步驟,通過(guò)函數(shù)調(diào)用逐步解決問(wèn)題。
  • JAVA是基于面向?qū)ο蟮?,關(guān)注的是對(duì)象,將一件事情拆分成不同的對(duì)象,靠對(duì)象之間的交互完成。
  • 面向過(guò)程注重的是過(guò)程,在整個(gè)過(guò)程中所涉及的行為,就是功能。
  • 面向?qū)ο笞⒅氐氖菍?duì)象,也就是參與過(guò)程所涉及到的主體。是通過(guò)邏輯將一個(gè)個(gè)功能實(shí)現(xiàn)連接起來(lái)

【面向?qū)ο蟾拍睢?/p>

  1. 面向?qū)ο笫撬伎紗?wèn)題的一種思考方式,是一種思想。比如:概念與實(shí)例。理論與實(shí)踐。名和實(shí)等等。
  2. 類(lèi)就是一類(lèi)對(duì)象的統(tǒng)稱。對(duì)象就是這一類(lèi)具體化的一個(gè)實(shí)例
  3. 面向?qū)ο蟮暮锰帲簩?fù)雜的事情變簡(jiǎn)單了,只要面對(duì)一個(gè)對(duì)象就行。

【面向?qū)ο笤O(shè)計(jì)】

面向?qū)ο笤O(shè)計(jì)把握一個(gè)重要的經(jīng)驗(yàn):誰(shuí)擁有數(shù)據(jù),誰(shuí)對(duì)外提供操作這些數(shù)據(jù)(私有)的方法?。ū粍?dòng)的一方是數(shù)據(jù)的擁有者,主動(dòng)的一方是執(zhí)行者)

開(kāi)發(fā)時(shí):找對(duì)象,建對(duì)象,用對(duì)象,并維護(hù)對(duì)象之間的關(guān)系。

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

類(lèi)和類(lèi)的實(shí)例化

類(lèi)就是一類(lèi)對(duì)象的統(tǒng)稱。對(duì)象就是這一類(lèi)具體化的一個(gè)實(shí)例

一個(gè)類(lèi)可以實(shí)例化無(wú)數(shù)個(gè)對(duì)象

下面我們通過(guò)一個(gè)例子了解類(lèi)和類(lèi)的實(shí)例化

class Person {
 public int age;//成員屬性 實(shí)例變量 字段 屬性
 public String name;
 public static String sex; //靜態(tài)成員變量 方法區(qū)
 public void eat() {//成員方法
 System.out.println("吃飯!");
 }
 public void sleep() {
 System.out.println("睡覺(jué)!");
 }
 public static void func(){
 	System.out.println("靜態(tài)成員方法");
 }
}
public class Main{
 public static void main(String[] args) {
 Person person = new Person();//通過(guò)new實(shí)例化對(duì)象
 person.eat();//成員方法調(diào)用需要通過(guò)對(duì)象的引用調(diào)用
 person.sleep();
//產(chǎn)生對(duì)象 實(shí)例化對(duì)象
 Person person2 = new Person();
 Person person3 = new Person();

		//靜態(tài)成員變量和方法的調(diào)用
		System.out.println(Person.sex);
		Person.func();
 }
}

成員變量:

定義在類(lèi)的內(nèi)部,方法的外部

通過(guò)對(duì)象的引用來(lái)訪問(wèn)

如果沒(méi)有初始化,那么它的值就是一個(gè)默認(rèn)默認(rèn)值(默認(rèn)零值)

  • 如果是引用類(lèi)型,那么值就是null(包括數(shù)組,String字符串等)
  • 如果是簡(jiǎn)單類(lèi)型,那么值就是其這種類(lèi)型所對(duì)應(yīng)的默認(rèn)值
byte short int long float double char boolean
0 0 0 0L 0.0f 0.0 '\u0000'十六進(jìn)制(也可以當(dāng)作0) false

行為/方法:

【eat() sleep()】為實(shí)例成員方法

func()為靜態(tài)成員方法

對(duì)于靜態(tài)的成員變量和成員方法該該怎么訪問(wèn)呢

這里可以看到,對(duì)于靜態(tài)的,不需要實(shí)例化對(duì)象?。?!

直接調(diào)用

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

總結(jié)static:

  • 對(duì)于靜態(tài)的成員屬性或者靜態(tài)的成員方法,是不依賴于對(duì)象的。
  • 靜態(tài)的成員變量 ,只有一份,存儲(chǔ)在方法區(qū)中。
  • 靜態(tài)的方法內(nèi)部是不可以訪問(wèn)非靜態(tài)的數(shù)據(jù)的。

實(shí)例化類(lèi)的存儲(chǔ)結(jié)構(gòu)

初始化成員變量的方式

1、就地初始化(在類(lèi)內(nèi)進(jìn)攻初始化)

2、默認(rèn)初始化

3、類(lèi)外初始化(用的比較多)

public class Main{
 public static void main(String[] args) {
 Person person1 = new Person();
 person1.name = "星星";
 person1.age = 20;

 Person person2 = new Person();
 person2.name = "狒狒";
 person2.age = 40;
 }
}

封裝

在我們寫(xiě)代碼的時(shí)候經(jīng)常會(huì)涉及兩種角色: 類(lèi)的實(shí)現(xiàn)者和類(lèi)的調(diào)用者. 封裝的本質(zhì)就是讓類(lèi)的調(diào)用者不必太多的了解類(lèi)的實(shí)現(xiàn)者是如何實(shí)現(xiàn)類(lèi)的,只要知道如何使用類(lèi)就行了.

這樣就降低了類(lèi)使用者的學(xué)習(xí)和使用成本, 從而降低了復(fù)雜程度

private/ public 這兩個(gè)關(guān)鍵字表示 “訪問(wèn)權(quán)限控制” .

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

舉個(gè)例子

class Person {
 private String name = "張三";
 private int age = 18;
 public void show() {
  System.out.println("我叫" + name + ", 今年" + age + "歲");
 }
}
class Test {
 public static void main(String[] args) {
  Person person = new Person();
  person.show();
 }
}
  • 此時(shí)字段已經(jīng)使用 private 來(lái)修飾. 類(lèi)的調(diào)用者(main方法中)不能直接使用. 而需要借助 show 方法. 此時(shí)類(lèi)的使用者就不必了解 Person 類(lèi)的實(shí)現(xiàn)細(xì)節(jié).
  • 同時(shí)如果類(lèi)的實(shí)現(xiàn)者修改了字段的名字, 類(lèi)的調(diào)用者不需要做出任何修改(類(lèi)的調(diào)用者根本訪問(wèn)不到 name, age這樣的字段)

getter和setter方法

getter:得到屬性值的方法

setter:修改屬性值的方法

我們用這兩者方法將類(lèi)的屬性封裝起來(lái),從而來(lái)達(dá)到訪問(wèn)屬性的目的

class Person {
 private String name;//實(shí)例成員變量
 private int age;
 public void setName(String name){
//name = name;//不能這樣寫(xiě)
  this.name = name;//this引用,表示調(diào)用該方法的對(duì)象
 }
 public String getName(){
  return name;
 }
 public void show(){
  System.out.println("name: "+name+" age: "+age);
 }
}
class Main {
 public static void main(String[] args) {
  Person person = new Person();
  person.setName("caocao");
  String name = person.getName();
  System.out.println(name);
  person.show();
 }
}

this關(guān)鍵字

我們?cè)趧偛诺拇a可以看到setter方法

private String name;
public void setName(String name){
		//name = name;//不能這樣寫(xiě)
  this.name = name;//this引用,表示調(diào)用該方法的對(duì)象
}

this表示當(dāng)前對(duì)象引用, 可以借助 this 來(lái)訪問(wèn)對(duì)象的字段和方法

三個(gè)用法:

  • this.屬性; //訪問(wèn)當(dāng)前對(duì)象的屬性
  • this.方法;//調(diào)用當(dāng)前對(duì)象的方法
  • this(); //調(diào)用當(dāng)前對(duì)象的構(gòu)造方法 (ps:必須放在第一行,且只能存在一個(gè)構(gòu)造方法內(nèi)部)

構(gòu)造方法

構(gòu)造方法是一種特殊方法, 使用關(guān)鍵字new實(shí)例化新對(duì)象時(shí)會(huì)被自動(dòng)調(diào)用, 用于完成初始化操作

實(shí)例化一個(gè)對(duì)象/創(chuàng)建一個(gè)對(duì)象分幾步

Student stu = new Student() ;//實(shí)例化一個(gè)對(duì)象

兩步

  1. 為對(duì)象分配內(nèi)存
  2. 調(diào)用合適的構(gòu)造方法,說(shuō)明構(gòu)造方法不止一個(gè),可能更多

語(yǔ)法規(guī)則

  1. 方法名稱必須與類(lèi)名稱相同
  2. 構(gòu)造方法沒(méi)有返回值類(lèi)型聲明
  3. 每一個(gè)類(lèi)中一定至少存在一個(gè)構(gòu)造方法(沒(méi)有明確定義,則系統(tǒng)自動(dòng)生成一個(gè)無(wú)參構(gòu)造)
class Person {
 private String name;//實(shí)例成員變量
 private int age;
 private String sex;
 //默認(rèn)構(gòu)造函數(shù) 構(gòu)造對(duì)象
 public Person() {
  this.name = "caocao";
  this.age = 10;
  this.sex = "男";
 }
 //帶有3個(gè)參數(shù)的構(gòu)造函數(shù)
 public Person(String name,int age,String sex) {
  this.name = name;
  this.age = age;
  this.sex = sex;
 }
 public void show(){
  System.out.println("name: "+name+" age: "+age+" sex: "+sex);
 }
}
public class Main{
 public static void main(String[] args) {
  Person p1 = new Person();//調(diào)用不帶參數(shù)的構(gòu)造函數(shù) 如果程序沒(méi)有提供會(huì)調(diào)用不帶參數(shù)的構(gòu)造函數(shù)
  p1.show();
  Person p2 = new Person("zhangfei",80,"男");//調(diào)用帶有3個(gè)參數(shù)的構(gòu)造函數(shù)
  p2.show();
 }
}

toString方法

  Person person = new Person("caocao",19);
  System.out.println(person);

如果打印引用,他會(huì)默認(rèn)調(diào)用toString方法,執(zhí)行這樣一個(gè)結(jié)果:

我們可以重寫(xiě)toString方法,來(lái)打印自己想要的結(jié)果

例如:

class Person {
 private String name;
 private int age;
 public Person(String name,int age) {
  this.age = age;
  this.name = name;
 }
 public void show() {
  System.out.println("name:"+name+" " + "age:"+age);
 }
 //重寫(xiě)Object的toString方法
 @Override
 public String toString() {
  return "Person{" +
    "name='" + name + '\'' +
    ", age=" + age +
    '}';
 }
}

public class Main {
 public static void main(String[] args) {
  Person person = new Person("caocao",19);
  person.show();
  System.out.println(person);
 }
}

這樣打印引用的化,就會(huì)按照想要的內(nèi)容進(jìn)行輸出。

匿名對(duì)象

匿名只是表示沒(méi)有名字的對(duì)象.

  • 沒(méi)有引用的對(duì)象稱為匿名對(duì)象.
  • 匿名對(duì)象只能在創(chuàng)建對(duì)象時(shí)使用.
  • 如果一個(gè)對(duì)象只是用一次, 后面不需要用了, 可以考慮使用匿名對(duì)象
new Person("caocao",19).show();//通過(guò)匿名對(duì)象調(diào)用方法

特點(diǎn):不依賴于對(duì)象,我們只需要通過(guò)類(lèi)名就可以調(diào)用其屬性或者方法

代碼塊

  • 本地代碼塊
  • 靜態(tài)代碼塊
  • 實(shí)例代碼塊/構(gòu)造代碼塊
  • 同步代碼塊(多線程)

本地代碼塊: 在方法中的代碼塊

public class Main{
 public static void main(String[] args) {
  { //直接使用{}定義,普通方法塊
   int x = 10 ;
   System.out.println("x1 = " +x);
  }
  int x = 100 ;
  System.out.println("x2 = " +x);
 }
}

靜態(tài)代碼塊: 一般用于初始化靜態(tài)成員屬性

//靜態(tài)代碼塊
static {
count = 10;//只能訪問(wèn)靜態(tài)數(shù)據(jù)成員
System.out.println("I am static init()!");
}

實(shí)例代碼塊: 定義在類(lèi)中的代碼塊,構(gòu)造代碼塊一般用于初始化實(shí)例成員變量

//實(shí)例代碼塊
{
this.name = "bit";
this.age = 12;
this.sex = "man";
System.out.println("I am instance init()!");
}

執(zhí)行順序

靜態(tài)代碼塊實(shí)例代碼塊構(gòu)造方法

總結(jié)

到此這篇關(guān)于java中類(lèi)和對(duì)象的文章就介紹到這了,更多相關(guān)java類(lèi)和對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Clojure?與Java對(duì)比少數(shù)據(jù)結(jié)構(gòu)多函數(shù)勝過(guò)多個(gè)單獨(dú)類(lèi)的優(yōu)點(diǎn)

    Clojure?與Java對(duì)比少數(shù)據(jù)結(jié)構(gòu)多函數(shù)勝過(guò)多個(gè)單獨(dú)類(lèi)的優(yōu)點(diǎn)

    這篇文章主要介紹了Clojure?與Java對(duì)比少數(shù)據(jù)結(jié)構(gòu)多函數(shù)勝過(guò)多個(gè)單獨(dú)類(lèi)的優(yōu)點(diǎn),在Clojure中,我們一次又一次地使用相同的數(shù)據(jù)結(jié)構(gòu),并在其上運(yùn)行許多函,更多相關(guān)介紹需要的朋友可以參考一下下面文章內(nèi)容
    2022-06-06
  • 詳解Java設(shè)計(jì)模式之抽象工廠模式

    詳解Java設(shè)計(jì)模式之抽象工廠模式

    設(shè)計(jì)模式是軟件設(shè)計(jì)中的一種常見(jiàn)方法,通過(guò)定義一系列通用的解決方案,來(lái)解決常見(jiàn)的軟件設(shè)計(jì)問(wèn)題,其中,抽象工廠模式是一種非常常見(jiàn)的設(shè)計(jì)模式,文中有詳細(xì)的代碼示例供大家參考,感興趣的同學(xué)可以借鑒閱讀
    2023-05-05
  • 淺析java中的取整(/)和求余(%)

    淺析java中的取整(/)和求余(%)

    這篇文章主要介紹了淺析java中的取整(/)和求余(%),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • java org.springframework.boot 對(duì)redis操作方法

    java org.springframework.boot 對(duì)redis操作方法

    在Spring Boot項(xiàng)目中操作Redis,你可以使用Spring Data Redis,Spring Data Redis是Spring提供的一個(gè)用于簡(jiǎn)化Redis數(shù)據(jù)訪問(wèn)的模塊,它提供了一個(gè)易于使用的編程模型來(lái)與Redis交互,本文給大家介紹java org.springframework.boot 對(duì)redis操作方法,感興趣的朋友一起看看吧
    2025-04-04
  • java中的final關(guān)鍵字詳解及實(shí)例

    java中的final關(guān)鍵字詳解及實(shí)例

    這篇文章主要介紹了 java中的final關(guān)鍵字詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • SpringBoot與Spring中數(shù)據(jù)緩存Cache超詳細(xì)講解

    SpringBoot與Spring中數(shù)據(jù)緩存Cache超詳細(xì)講解

    我們知道內(nèi)存讀取速度遠(yuǎn)大于硬盤(pán)讀取速度,當(dāng)需要重復(fù)獲取相同數(shù)據(jù)時(shí),一次一次的請(qǐng)求數(shù)據(jù)庫(kù)或者遠(yuǎn)程服務(wù),導(dǎo)致在數(shù)據(jù)庫(kù)查詢或者遠(yuǎn)程方法調(diào)用上小號(hào)大量的時(shí)間,最終導(dǎo)致程序性能降低,這就是數(shù)據(jù)緩存要解決的問(wèn)題,學(xué)過(guò)計(jì)算機(jī)組成原理或者操作系統(tǒng)的同學(xué)們應(yīng)該比較熟悉
    2022-10-10
  • java正則匹配讀取txt文件提取特定開(kāi)頭和結(jié)尾的字符串

    java正則匹配讀取txt文件提取特定開(kāi)頭和結(jié)尾的字符串

    通常我們可以直接通過(guò)文件流來(lái)讀取txt文件的內(nèi)容,但有時(shí)候也會(huì)遇到問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于java正則匹配讀取txt文件提取特定開(kāi)頭和結(jié)尾的字符串的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 利用Springboot+Caffeine實(shí)現(xiàn)本地緩存實(shí)例代碼

    利用Springboot+Caffeine實(shí)現(xiàn)本地緩存實(shí)例代碼

    Caffeine是一個(gè)基于Java8開(kāi)發(fā)的提供了近乎最佳命中率的高性能的緩存庫(kù),下面這篇文章主要給大家介紹了關(guān)于利用Springboot+Caffeine實(shí)現(xiàn)本地緩存的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 解決JDK異常處理No appropriate protocol問(wèn)題

    解決JDK異常處理No appropriate protocol問(wèn)題

    這篇文章主要介紹了解決JDK異常處理No appropriate protocol問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Netty分布式NioEventLoop任務(wù)隊(duì)列執(zhí)行源碼分析

    Netty分布式NioEventLoop任務(wù)隊(duì)列執(zhí)行源碼分析

    這篇文章主要為大家介紹了Netty分布式NioEventLoop任務(wù)隊(duì)列執(zhí)行源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03

最新評(píng)論

陇南市| 浦县| 兴化市| 宝鸡市| 永丰县| 彩票| 潞西市| 永和县| 原平市| 分宜县| 蒙自县| 巴林右旗| 伊通| 卫辉市| 馆陶县| 长宁区| 南溪县| 长海县| 云浮市| 湖南省| 河北区| 乌拉特后旗| 呼伦贝尔市| 崇信县| 安图县| 昌黎县| 繁峙县| 班戈县| 光泽县| 瑞安市| 镇宁| 沙湾县| 兰考县| 于田县| 宁安市| 海淀区| 德兴市| 无极县| 金山区| 上思县| 贵定县|