Java 類與對象超基礎(chǔ)講解
什么是面向?qū)ο?/h2>
Java語言是一個純面向?qū)ο蟮恼Z言,面向?qū)ο蟮恼Z言不僅只有Java,包括C++,PHP等
面向?qū)ο蟮木幊趟枷牒喎Q OOP(Object Oriented Programming),其基本特點就是封裝,繼承和多態(tài)。
面向過程與面向?qū)ο?/h3>
想要弄清楚什么是面向?qū)ο?,首先需要知道兩者的區(qū)別
面向過程更注重程序的每一個步驟,用相應(yīng)的函數(shù)來實現(xiàn)。
比如說,五子棋,面向過程就需要首先分析每一個步驟
1.實現(xiàn)游戲的開始
3.棋盤的搭建
4.玩家下棋,并打印新的棋盤
5.電腦下棋,并打印新的棋盤
6.判斷輸贏
7.返回并輸出結(jié)果
對于面向?qū)ο髞碚f,就需要找出相應(yīng)的對象
1.電腦與玩家
2.棋盤
3.規(guī)則設(shè)置
這三條都屬于對象,第一類對象(玩家對象)負責(zé)接受用戶輸入,并告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的變化就要負責(zé)在屏幕上面顯示出這種變化,同時利用第三類對象(規(guī)則系統(tǒng))來對棋局進行判定。
將五子棋改成圍棋,如果是面向過程的思想,就需要對多個步驟,函數(shù)進行修改和維護,而且面向過程,往往需要修改大量的代碼,因為程序的每一個步驟都是相互聯(lián)系的。而面向?qū)ο螅瑑H僅只需要對對象進行維護,并且每一個對象之間獨立性較強
所以相對于面向過程,面向?qū)ο笥懈玫木S護,復(fù)用,和擴展功能
而我們的面向?qū)ο?,只需要關(guān)注尋找對象,構(gòu)建對象,使用對象這三點,關(guān)鍵是抽象出類出來
類與對象的使用
語法:
Java中的類是通過class關(guān)鍵字來定義的,其語法格式如下:
[修飾符] class 類名 [extends 父類名] [implements 接口名]{undefined
// 類體
}
這里的extends和implements為可選項,類體包括成員變量(又稱為字段和屬性)和成員方法
class后面的類名采用大駝峰
成員變量定義在類當(dāng)中,方法的外面
類相當(dāng)一個模板,根據(jù)這個模板,可以創(chuàng)造很多的對象,類是對象的抽象歸納,這里的類也可以看作是一種自定義類型
下面定義一個Person類,由名字年齡構(gòu)成,成員方法為人的吃飯,睡覺等行為
class Person{ public String name; public int age; public void eat(){ System.out.println("吃飯"); } public void sleep(){ System.out.println("睡覺"); } }
在使用這個類,必須先實例化一個對象,有類才有對象
對目標進行訪問,首先這個目標肯定是一個實體,只有擁有一個實例化對象,才能對對象進行訪問和修改,就相當(dāng)于類只是一個圖紙,只有做成一個物理模型,才能對這個模型進行修改。
那對象具體怎樣創(chuàng)建呢?這個時候就需要用過new關(guān)鍵字去構(gòu)建一個對象
Person per=new Person();
既然Person是一種自定義類型,那上述代碼,前面就是類型,后面就是變量
這里的per是一個引用變量,存放的是對象的地址,這個引用指向的就是這個對象
類與對象的使用與說明
1.類是一種自定義類型,可以用來定義變量,在java中由類定義出來的變量我們稱為成員變量
2.一個類可以定義多個變量,實例出來的對象會占用實際的物理空間,存儲類成員變量
3.類實例化就相當(dāng)于,生活中構(gòu)建房子,類只是一個設(shè)計圖,只設(shè)計出需要什么,但是無真是的建筑存在,只有真正實例化一個對象,才會分配儲存數(shù)據(jù),占用物理空間。
4.只有使用new關(guān)鍵字,才能實例化一個對象,才會分配一塊內(nèi)存
對象的初始化
當(dāng)成功創(chuàng)建一個對象后,需要對該對象進行初始化
java中對對象進行初始化,需要使用 “.”操作符
如果不對對象進行初始化的話,默認該變量中的成員變量初值為對應(yīng)相應(yīng)的零值
public class classDemo { public static void main(String[] args) { //實例化一個對象 Person per1=new Person(); //對per1對象進行初始化 per1.age=20; per1.name="zhangsan"; per1.eat(); per1.sleep(); Person per2=new Person(); //對per2對象進行初始化 per2.age=30; per2.name="lisi"; per2.eat(); per2.sleep(); } }
this的使用
1.this可以代表當(dāng)前對象的引用
2.可以避免成員方法參數(shù)與成員名稱沖突,將成員變量與其他參數(shù)區(qū)別開
this.data//訪問成員變量
this.fun();//訪問成員方法
this();//調(diào)用構(gòu)造方法,具體看下文構(gòu)造方法
//定義一個日期的類 public class MyDate { public int year; public int month; public int day; /** * 設(shè)置日期: */ public void setDate(int year,int month,int day) { this.year = year; this.month = month ; this.day = day; //如果不區(qū)分,就可能出現(xiàn) //year = year; //month = month ; //day = day; } public void printDate() { System.out.println("年:"+this.year+"月:"+this.month+"日:"+this.day); } public static void main(String[] args) { // this.printDate(); MyDate myDate = new MyDate(); myDate.setDate(2022,3,25); myDate.printDate(); } }
構(gòu)造方法
代碼:Person per=new Person();
你是否有疑惑為什么最后一個Person后面會跟一個括號
其實一個括號代表的是調(diào)用一個無參數(shù)的構(gòu)造方法,當(dāng)你編寫的程序中,沒有構(gòu)造方法,系統(tǒng)其實就調(diào)用隱藏的無參數(shù)的構(gòu)造方法,只不過這個構(gòu)建函數(shù)無實際作用。如果程序存在構(gòu)造方法,那系統(tǒng)就不會默認生成無參數(shù)的構(gòu)造方法
什么是構(gòu)造方法?構(gòu)造方法與普通的成員方法有什么不同?
1.構(gòu)造參數(shù)沒有返回值,即使void也不行
2.構(gòu)造方法中的方法名與該類的名字相同
構(gòu)造方法仍然支持方法重載,調(diào)用哪一個方法,由參數(shù)列表決定
this可以調(diào)用本類的構(gòu)造方法
public Student() { //調(diào)用本類中 帶有2個參數(shù)的構(gòu)造方法,第一個參數(shù)的類型是String,第2個參數(shù)的類型是int this("gaobo",18); } public Student(String name,int age) { this.age = age; this.name = name; System.out.println("這個是帶2個參數(shù)的構(gòu)造方法!"); }
操作可行的前提是,要保證this語句在該方法中最前面的一行,注釋除外
并且不能形成環(huán)(兩個構(gòu)造方法相互調(diào)用)
java類中支持快速打印出成員變量,不需要自己寫一個show方法來進行打印
public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; }
toString方法,它通常只是為了方便輸出,比如System.out.println(xx),括號里面的“xx”如果不是String類型的話,就自動調(diào)用xx的toString()方法,toString
方法會返回一個“以文本方式表示”此對象的字符串。
IDEA快速生成toString方法的快捷鍵:鼠標右鍵->generate->toString
到此這篇關(guān)于Java 類與對象超基礎(chǔ)講解的文章就介紹到這了,更多相關(guān)Java 類與對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis-plus設(shè)置某個字段值為null的方法總結(jié)
mybatis-plus以下簡稱mp,目前應(yīng)該也算是主流的一款數(shù)據(jù)訪問層應(yīng)用框架,下面這篇文章主要給大家介紹了關(guān)于Mybatis-plus設(shè)置某個字段值為null的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-07-07Springboot + Mysql8實現(xiàn)讀寫分離功能
這篇文章主要介紹了Springboot + Mysql8實現(xiàn)讀寫分離功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10dubbo如何實現(xiàn)consumer從多個group中調(diào)用指定group的provider
這篇文章主要介紹了dubbo如何實現(xiàn)consumer從多個group中調(diào)用指定group的provider問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03