JAVA新手學習篇之類和對象詳解
一. 面向?qū)ο?/h2>
Java 是一門面向?qū)ο蟮木幊陶Z言 (Object Oriented Program ,簡稱OOP),面向?qū)ο缶幊痰暮诵乃枷胧菍?shù)據(jù)(屬性)和操作數(shù)據(jù)的方法封裝成一個整體,即對象。對象之間通過信息傳遞來相互協(xié)作,從而實現(xiàn)特定的功能。
1.1 面向?qū)ο蠛兔嫦蜻^程
面向過程注重解決問題的步驟和操作,面向?qū)ο笫前褬?gòu)成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。
舉例說明:將大象裝進冰箱
(1) 面向過程
?第一步:打開冰箱
第二步:將大象塞進冰箱
第三步:關(guān)上冰箱
那么以上三個步驟就是就是把大象塞進冰箱的過程,我們注重這一件事的過程,那么這種解決問題的方法我們就叫做面向過程。
(2) 面向?qū)ο?/strong>
?那么此時只有人、大象、冰箱三個對象,將大象裝進冰箱的整個過程是:人、大象、冰箱三個對象之間交互完成的,我們不需要關(guān)心大象是如何被裝進冰箱的,那么這種不關(guān)注過程,通過對象之間的交互完成的解決問題的方式我們叫做面向?qū)ο蟆?/p>
注意:面向過程和面相對象并不是一門語言,而是解決問題的方法,沒有那個好壞之分,都有其專門的應用場景。
二. 類的定義和使用
什么是類呢?我們一起來簡單認識一下
2.1 什么是類
類就是用來對一個對象進行描述的,主要描述該對象有哪些屬性,哪些功能等
例如:學生
屬性:年齡、姓名、性別......
行為:上學、吃飯、考試......
那么我們知道了類的作用,那么該如何定義類呢?
2.2 類的定義格式
在JAVA中定義類的時候需要用到class關(guān)鍵字,語法格式如下:
class ClassName { //ClassName表示類的名稱
field; //表示成員變量(屬性)
method; //表示行為或者成員方法
}
那么我們來創(chuàng)建一個上述提到的學生類:
public class Student { public String name;//學生姓名 public int age ;//學生年齡 public int score ;//學生成績 public void eat() { System.out.println("正在吃飯......"); } public void exam() { System.out.println("正在考試......"); } }
那么一個簡單的學生類就創(chuàng)建好了,里面描述了學生的屬性和行為。
定義類的注意事項:
1. 類型采用大駝峰定義
2.成員前寫法統(tǒng)一為public ,后面會介紹其他的訪問修飾限定符
三. 類的實例化
通過上述描述我們知道 類 只是用來對一個實體進行描述的,通過實例化才能夠創(chuàng)造出對象,那么在JAVA中我們該如何實例化出一個對象呢?這時候就要用到new這個關(guān)鍵字來進行實例化
以上述的學生類示范:
public class Student { public String name;//學生姓名 public int age ;//學生年齡 public int score ;//學生成績 public void eat() { System.out.println(name+"正在吃飯......"); } public void exam() { System.out.println(name+"正在考試......"); } public static void main(String[] args) { Student student1=new Student(); student1.name="張三"; student1.age=10; student1.score=99; student1.eat(); student1.exam(); } }?
類實例化的注意事項:
1. new 關(guān)鍵字用于創(chuàng)建一個對象的實例 .
2. 使用 . 來訪問對象中的屬性和方法 .
3. 同一個類可以創(chuàng)建多個實例對象
四. this引用
接下來我們看看這個日期類的代碼和運行結(jié)果,讓我們帶著問題來探索this的用法。
public class Day { public int year; public int month; public int day; public void setDay(int year, int month, int day){ year = year; month = month; day = day; } public void printDay(){ System.out.println(year + "/" + month + "/" + day); } public static void main(String[] args) { Day d1 = new Day(); Day d2 = new Day(); Day d3 = new Day(); d1.setDay(2020,9,15); d2.setDay(2020,9,16); d3.setDay(2020,9,17); d1.printDay(); d2.printDay(); d3.printDay(); } }
通過運行結(jié)果可以看見,我們明明利用setDay方法d1、d2、d3都進行的賦值,那么打印出來的結(jié)果為什么還是0/0/0呢?
第一個問題:形參名與成員變量名相同時,形參究竟是給成員變量賦值呢還是形參自己對自己賦值呢?
第二個問題:此時我們的d1、d2、d3都在調(diào)用printDay方法,該方法是如何知道打印的是哪個對象的數(shù)據(jù)呢?
那么帶著這兩個問題,我們一起來探索一下this的用法。
4.1 this引用的作用
this 引用指向當前對象 ( 成員方法運行時調(diào)用該成員方法的對象),那么我們來看一下this是怎么解決上述問題的:
問題一:
public void setDay(int year, int month, int day){ this.year = year; this.month = month; this.day = day; }
通過運行結(jié)果可以看見此時的結(jié)果是正確的,這是因為之前的代碼中沒有加上this引用,那時的賦值操作是 形參自己對自己進行賦值,成員變量的值還是默認值。而此時我們加上了this引用,那么此時帶this引用的year、month、day就是當前類的成員變量, 此時的賦值操作就是形參對成員變量進行賦值。
問題二:
public void printDay(){ System.out.println(this.year + "/" + this.month + "/" + this.day); }
printDay方法通過this引用就能夠知道打印的是當前對象的數(shù)據(jù)。
總結(jié): 1. 當形參名和成員變量名字相同時,通過this引用表示該變量是當前類的成員變量
2. this是“成員方法”第一個隱藏的參數(shù),編譯器會自動傳遞,在成員方法執(zhí)行時,編譯器會負責將調(diào)用成員方法對象的引用傳遞給該成員方法,this負責來接收。
五. 構(gòu)造方法
構(gòu)造方法是一個特殊的成員方法,方法名必須與類名相同,構(gòu)造方法可以直接給成員變量進行初始化
public class Day { public int year; public int month; public int day; public Day(int year,int month,int day) { this.year=year; this.month=month; this.day=day; } public void printDay(){ System.out.println(year + "/" + month + "/" +day); } public static void main(String[] args) { Day d1=new Day(2024,10,10); d1.printDay(); } }
注意事項:
1. 名字必須與類名相同
2. 沒有返回值類型,設(shè)置為 void 也不行
3. 創(chuàng)建對象時由編譯器自動調(diào)用,并且在對象的生命周期內(nèi)只調(diào)用一次
4. 如果不寫構(gòu)造方法,編譯器會主動添加一個不帶參數(shù)的構(gòu)造方法
public class Day { public int year; public int month; public int day; public Day() { ...... } public void printDay(){ System.out.println(year + "/" + month + "/" +day); } }
那么如果我們自己寫了一個構(gòu)造方法,那么編譯器就不會自動生成構(gòu)造方法,正所謂救急不救窮。
5.1 構(gòu)造方法重載
我們可以定義多個不同參數(shù)的構(gòu)造方法,這樣就實現(xiàn)了構(gòu)造方法的重載,方便用于多種情況
public class Day { public int year; public int month; public int day; public Day() { } public Day(int year,int month,int day) { this.year=year; this.month=month; this.day=day; } public void printDay(){ System.out.println(year + "/" + month + "/" +day); } }
5.2 通過this調(diào)用其他構(gòu)造方法
. 構(gòu)造方法中,可以通過 this 調(diào)用其他構(gòu)造方法來簡化代碼
public class Day { public int year; public int month; public int day; public Day() { this(2020,10,31); } public Day(int year,int month,int day) { this.year=year; this.month=month; this.day=day; } public void printDay(){ System.out.println(year + "/" + month + "/" +day); } public static void main(String[] args) { Day d1=new Day(); d1.printDay(); } }
注意事項:
1. this(...)必須是構(gòu)造方法中第一條語句
2. 構(gòu)造方法之間不能互相調(diào)用形成環(huán)
5.3 默認初始化
在使用局部變量之前是必須進行初始化的,否則會進行報錯。但是使用成員變量時,可以不進行初始化,當我們實例化一個對象后,對象空間被申請好之后,對象中包含的成員其實已經(jīng)設(shè)置好了初始值。
結(jié)語
以上就是部分類和對象的內(nèi)容,希望大家看完本篇后能夠理解類和對象的概念,在此小新感謝大家的觀看?。?!
到此這篇關(guān)于JAVA新手學習篇之類和對象詳解的文章就介紹到這了,更多相關(guān)JAVA類和對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Java解析JSON數(shù)據(jù)并提取特定字段的實現(xiàn)步驟(以提取mailNo為例)
在現(xiàn)代軟件開發(fā)中,處理JSON數(shù)據(jù)是一項非常常見的任務,無論是從API接口獲取數(shù)據(jù),還是將數(shù)據(jù)存儲為JSON格式,解析和提取JSON中的特定字段都是開發(fā)人員需要掌握的基本技能,本文將以一個實際案例為例,詳細介紹如何使用Java解析JSON數(shù)據(jù)并提取其中的mailNo字段2025-01-01Elasticsearch?Analyzer?內(nèi)置分詞器使用示例詳解
這篇文章主要為大家介紹了Elasticsearch?Analyzer?內(nèi)置分詞器使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11關(guān)于java中可變長參數(shù)的定義及使用方法詳解
下面小編就為大家?guī)硪黄P(guān)于java中可變長參數(shù)的定義及使用方法詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12純Java實現(xiàn)數(shù)字證書生成簽名的簡單實例
下面小編就為大家?guī)硪黄僇ava實現(xiàn)數(shù)字證書生成簽名的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08