柚子快報(bào)激活碼778899分享:學(xué)習(xí) JAVA篇之類和對象
柚子快報(bào)激活碼778899分享:學(xué)習(xí) JAVA篇之類和對象
目錄
一. 面向?qū)ο?/p>
1.1 面向?qū)ο蠛兔嫦蜻^程
二. 類的定義和使用
2.1 什么是類
2.2 類的定義格式
?三. 類的實(shí)例化
四. this引用?
4.1 this引用的作用
?五. 構(gòu)造方法
5.1 構(gòu)造方法重載
5.2 通過this調(diào)用其他構(gòu)造方法
?5.3 默認(rèn)初始化
結(jié)語
一. 面向?qū)ο?/p>
Java
是一門面向?qū)ο蟮木幊陶Z言
(Object Oriented Program
,簡稱OOP),面向?qū)ο缶幊痰暮诵乃枷胧菍?shù)據(jù)(屬性)和操作數(shù)據(jù)的方法封裝成一個(gè)整體,即對象。對象之間通過信息傳遞來相互協(xié)作,從而實(shí)現(xiàn)特定的功能。
1.1 面向?qū)ο蠛兔嫦蜻^程
面向過程注重解決問題的步驟和操作,面向?qū)ο笫前褬?gòu)成問題事務(wù)分解成各個(gè)對象,建立對象的目的不是為了完成一個(gè)步驟,而是為了描敘某個(gè)事物在整個(gè)解決問題的步驟中的行為。
舉例說明:將大象裝進(jìn)冰箱
(1) 面向過程
?
第一步:打開冰箱
第二步:將大象塞進(jìn)冰箱
第三步:關(guān)上冰箱
那么以上三個(gè)步驟就是就是把大象塞進(jìn)冰箱的過程,我們注重這一件事的過程,那么這種解決問題的方法我們就叫做面向過程。
(2) 面向?qū)ο?/p>
?
那么此時(shí)只有人、大象、冰箱三個(gè)對象,將大象裝進(jìn)冰箱的整個(gè)過程是:人、大象、冰箱三個(gè)對象之間交互完成的,我們不需要關(guān)心大象是如何被裝進(jìn)冰箱的,那么這種不關(guān)注過程,通過對象之間的交互完成的解決問題的方式我們叫做面向?qū)ο蟆?/p>
注意:面向過程和面相對象并不是一門語言,而是解決問題的方法,沒有那個(gè)好壞之分,都有其專門的應(yīng)用場景。
二. 類的定義和使用
什么是類呢?我們一起來簡單認(rèn)識一下
2.1 什么是類
類就是用來對一個(gè)對象進(jìn)行描述的,主要描述該對象有哪些屬性,哪些功能等
例如:學(xué)生
屬性:年齡、姓名、性別......
行為:上學(xué)、吃飯、考試......
?那么我們知道了類的作用,那么該如何定義類呢?
2.2 類的定義格式
在JAVA中定義類的時(shí)候需要用到class關(guān)鍵字,語法格式如下:
class ClassName {? ? //ClassName表示類的名稱
? ? ? ? field;? ? ? ?//表示成員變量(屬性)
? ? ? ? method;? ? ? //表示行為或者成員方法 }
?那么我們來創(chuàng)建一個(gè)上述提到的學(xué)生類:
public class Student {
public String name;//學(xué)生姓名
public int age ;//學(xué)生年齡
public int score ;//學(xué)生成績
public void eat()
{
System.out.println("正在吃飯......");
}
public void exam()
{
System.out.println("正在考試......");
}
}
那么一個(gè)簡單的學(xué)生類就創(chuàng)建好了,里面描述了學(xué)生的屬性和行為。
定義類的注意事項(xiàng):
1. 類型采用大駝峰定義
2.成員前寫法統(tǒng)一為public ,后面會介紹其他的訪問修飾限定符
?三. 類的實(shí)例化
通過上述描述我們知道 類 只是用來對一個(gè)實(shí)體進(jìn)行描述的,通過實(shí)例化才能夠創(chuàng)造出對象,那么在JAVA中我們該如何實(shí)例化出一個(gè)對象呢?這時(shí)候就要用到new這個(gè)關(guān)鍵字來進(jìn)行實(shí)例化
以上述的學(xué)生類示范:
?
?
public class Student {
public String name;//學(xué)生姓名
public int age ;//學(xué)生年齡
public int score ;//學(xué)生成績
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();
}
}
?
?
?類實(shí)例化的注意事項(xiàng):
1. new
關(guān)鍵字用于創(chuàng)建一個(gè)對象的實(shí)例
.
2. 使用
.
來訪問對象中的屬性和方法
.
3. 同一個(gè)類可以創(chuàng)建多個(gè)實(shí)例對象
四. this引用?
接下來我們看看這個(gè)日期類的代碼和運(yùn)行結(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();
}
}
?
?
?通過運(yùn)行結(jié)果可以看見,我們明明利用setDay方法d1、d2、d3都進(jìn)行的賦值,那么打印出來的結(jié)果為什么還是0/0/0呢?
第一個(gè)問題:形參名與成員變量名相同時(shí),形參究竟是給成員變量賦值呢還是形參自己對自己賦值呢?
第二個(gè)問題:此時(shí)我們的d1、d2、d3都在調(diào)用printDay方法,該方法是如何知道打印的是哪個(gè)對象的數(shù)據(jù)呢?
那么帶著這兩個(gè)問題,我們一起來探索一下this的用法。
4.1 this引用的作用
this
引用指向當(dāng)前對象
(
成員方法運(yùn)行時(shí)調(diào)用該成員方法的對象),那么我們來看一下this是怎么解決上述問題的:
問題一:
public void setDay(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
}
通過運(yùn)行結(jié)果可以看見此時(shí)的結(jié)果是正確的,這是因?yàn)橹暗拇a中沒有加上this引用,那時(shí)的賦值操作是
形參自己對自己進(jìn)行賦值,成員變量的值還是默認(rèn)值。而此時(shí)我們加上了this引用,那么此時(shí)帶this引用的year、month、day就是當(dāng)前類的成員變量,
此時(shí)的賦值操作就是形參對成員變量進(jìn)行賦值。
問題二:
public void printDay(){
System.out.println(this.year + "/" + this.month + "/" + this.day);
}
?printDay方法通過this引用就能夠知道打印的是當(dāng)前對象的數(shù)據(jù)。
?總結(jié): ? ? ? ? 1. 當(dāng)形參名和成員變量名字相同時(shí),通過this引用表示該變量是當(dāng)前類的成員變量
? ? ? ? 2.?this是“成員方法”第一個(gè)隱藏的參數(shù),編譯器會自動傳遞,在成員方法執(zhí)行時(shí),編譯器會負(fù)責(zé)將調(diào)用成員方法對象的引用傳遞給該成員方法,this負(fù)責(zé)來接收。
?五. 構(gòu)造方法
構(gòu)造方法是一個(gè)特殊的成員方法,方法名必須與類名相同,構(gòu)造方法可以直接給成員變量進(jìn)行初始化
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();
}
}
?注意事項(xiàng):
1.
名字必須與類名相同
2.
沒有返回值類型,設(shè)置為
void
也不行
3. 創(chuàng)建對象時(shí)由編譯器自動調(diào)用,并且在對象的生命周期內(nèi)只調(diào)用一次
4. 如果不寫構(gòu)造方法,編譯器會主動添加一個(gè)不帶參數(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è)構(gòu)造方法,那么編譯器就不會自動生成構(gòu)造方法,正所謂救急不救窮。
5.1 構(gòu)造方法重載
我們可以定義多個(gè)不同參數(shù)的構(gòu)造方法,這樣就實(shí)現(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();
}
}
注意事項(xiàng):
1.?this(...)必須是構(gòu)造方法中第一條語句
2. 構(gòu)造方法之間不能互相調(diào)用形成環(huán)
?5.3 默認(rèn)初始化
在使用局部變量之前是必須進(jìn)行初始化的,否則會進(jìn)行報(bào)錯(cuò)。但是使用成員變量時(shí),可以不進(jìn)行初始化,當(dāng)我們實(shí)例化一個(gè)對象后,對象空間被申請好之后,對象中包含的成員其實(shí)已經(jīng)設(shè)置好了初始值。
結(jié)語
以上就是部分類和對象的內(nèi)容,希望大家看完本篇后能夠理解類和對象的概念,在此小新感謝大家的觀看?。?!
?
柚子快報(bào)激活碼778899分享:學(xué)習(xí) JAVA篇之類和對象
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。