c02章.s02節(jié).第一個類和對象

第一個類和對象

[toc]

一 面向?qū)ο蟮木幊陶Z言

1.1 Java面向?qū)ο蟮木幊陶Z言

? 一個Java程序可以認為主要是一系列對象的集合,互相調(diào)用彼此的方法來協(xié)同工作,計算各對象的狀態(tài)屬性,完成指定的目標任務(wù)。

換個說法,Java程序用自己的方式定義描述了現(xiàn)實世界中的事物,并完成了現(xiàn)實世界中的各種行為目標。

舉個例子,Java程序有成千上萬個,每個程序做了不同的事情。有電商系統(tǒng),有物流系統(tǒng),庫存系統(tǒng),財務(wù)系統(tǒng),有電子書城,有地圖網(wǎng)站,外語學(xué)習(xí)網(wǎng)站,還有聊天軟件等。這里面的系統(tǒng)也不都是由Java語言完成的。還有別的面向?qū)ο蟮恼Z言。

? 對Java語言來說,一切皆是對象。把現(xiàn)實世界中的對象抽象地體現(xiàn)在編程世界中,一個對象代表了某個具體的操作。一個個對象最終組成了完整的程序設(shè)計,這些對象可以是獨立存在的,也可以是從別的對象繼承過來的。對象之間通過相互作用傳遞信息,實現(xiàn)程序開發(fā)。

1.2 對象的概念

Java 是面向?qū)ο蟮木幊陶Z言,對象就是面向?qū)ο蟪绦蛟O(shè)計的核心。所謂對象就是真實世界中的實體,對象與實體是一一對應(yīng)的,也就是說現(xiàn)實世界中每一個實體都是一個對象,它是一種具體的概念。對象有以下特點:

  • 對象具有屬性和行為。
  • 對象具有變化的狀態(tài)。
  • 對象具有唯一性。
  • 對象都是某個類的實例。
  • 一切皆為對象,真實世界中的所有事物都可以視為對象。

1.3 前端和后端的區(qū)別

? 一般你能直接看到的軟件界面,網(wǎng)站界面,都屬于前端編程語言編寫的。Java為前端的網(wǎng)站提供數(shù)據(jù)操作等。

1.4 面向?qū)ο蟮男袨檫^程

? 以電商系統(tǒng)舉例,商品信息都是存儲在數(shù)據(jù)庫的(數(shù)據(jù)庫就可以理解成倉庫,數(shù)據(jù)都是存這里面的,方便管理,查詢等)。程序?qū)⑸唐烦橄蟪鰜矶x成類,然后從數(shù)據(jù)庫把數(shù)據(jù)查詢出來,看成一個個商品對象,成千上萬的商品,通過網(wǎng)絡(luò)展示到用戶前端。

? 客戶端提供各種功能,比如搜索,下單,購買數(shù)量,顏色等,然后前端程序再將用戶的選擇的行為通過網(wǎng)絡(luò)傳遞到后端程序。

后端程序基于前端的數(shù)據(jù),進行相應(yīng)的操作,搜索,下單,最后存儲到數(shù)據(jù)庫。

? 其它子系統(tǒng),比如發(fā)貨系統(tǒng),和銀行對接的支付系統(tǒng),進行相應(yīng)的操作。最終完成了用戶的一系列購物行為。

? 這里簡單讓你理解下Java Web中面向?qū)ο蟮母拍睢?/p>

二 入門開發(fā)的場景知識

? 剛剛提到了前后端,我們前端的內(nèi)容以后會學(xué)習(xí),暫時只要知道數(shù)據(jù)都是從服務(wù)器端(后端)傳到用戶端(前端),原始數(shù)據(jù)都是從各種各樣的數(shù)據(jù)庫加載到服務(wù)器端的。

? 入門篇都以建造一個電子圖書館為出發(fā)點,里面的最基本的類就是定義電子書,相對邏輯關(guān)系簡單。比起電商網(wǎng)站,里面定義的商品以及業(yè)務(wù)太復(fù)雜,在后面的階段再講。

? 電子圖書館可以看成是圖書館的系統(tǒng),為了讓大家有實際的感受,又結(jié)合了《微信讀書》的書城功能,(一般的小說網(wǎng)站,免費閱讀的網(wǎng)站都這樣,圖書閱讀,圖書推薦,榜單等功能)。目的就是為了讓大家學(xué)完了就知道編程是怎么一回事了。而不是學(xué)完概念,還是不知道該如何編程。

? 我不想給微信讀書做廣告,沒辦法,總得找個例子吧,大家學(xué)的時候也有概念。希望這樣的鏈接不會被文章平臺封掉。之前有十幾篇文章帶二維碼,封了幾個月才給我提示,我一直納悶,為啥一個閱讀都沒有。另外,微信讀書有小程序和App的,我們以網(wǎng)站為主要示例。

? 下面將介紹類,變量,方法,對象,實例變量的概念。場景雖然是基于一個更簡單的系統(tǒng)電子圖書館。但是當你學(xué)會了,就會發(fā)現(xiàn)復(fù)雜的都是由簡單的拼出來的。只是更講究點技巧和技術(shù)。

三 類

之前的章節(jié)《打印Hello World》和《print打印詳解》中的Hello.java以及 PrintlnExplain.java 都是最簡單的類,它們都只包含了一個main函數(shù),作為Java程序的啟動入口。

類在定義的時候,可以包含很多概念。

3.1 類的概念

類:類是一個模板,它描述一類對象的行為和狀態(tài)。

? 類是 Java中的一種重要的引用數(shù)據(jù)類型,也是組成 Java 程序的基本要素,因為所有的 Java 程序都是基于類的。

? 也可以理解成類是定義描述現(xiàn)實世界中的對象的。類似于圖紙,設(shè)計圖,模具。所有的對象的創(chuàng)建,都是基于類的定義。類中定義了什么,對象就擁有什么,可以做什么。

3.2 編寫第一個類

? 以WeiXin讀書網(wǎng)站的首頁上圖書為例,這些數(shù)據(jù)都是來自于后端,如何定義的呢?

點擊該網(wǎng)站,打開首頁,可以看到書都有名字,作者,你還能看到它的排名。如下圖紅色標記。其它知識我們后面再慢慢學(xué)。

01Book.png

我們在前面《打印HelloWorld》已經(jīng)學(xué)會如何新建一個類了。我們新建一個名為Book的類,并定義如下屬性。盡量用英語,用翻譯工具翻譯一下。不然開發(fā)工具提示拼寫錯誤,十分別扭。對于其他人閱讀也方便。

public class Book{
    String name; //書名,類型為字符串String,默認值為null
    String author; //作者,類型為字符串String,默認值為null
    int rank; //排名,類型為整型int,默認值為0
}

定義了一個簡單的類Book,和Book的幾個屬性。類的定義請繼續(xù)往下看。

3.3 類的定義

在 Java 中定義一個普通的類,需要使用 class 關(guān)鍵字、一個自定義的類名和一對表示程序體的大括號,以及屬性和方法。完整語法如下:

public class 類名{
    變量類型_1 變量名字_1;//分號隔開
    變量類型_2 變量名字_2;//分號隔開
      ...
    
    //定義方法部分
    function1(){
        //方法代碼
    }
    function2(){
        //方法代碼
    }
    ...
}

public:是定義該類是否可以被其它類和程序訪問。平時簡單開發(fā)用public就可以了。表明是公共的。關(guān)于類的訪問權(quán)限后面學(xué)習(xí)。

class :聲明類的關(guān)鍵字。

變量類型:表示成員變量的類型。常見的比如,String是字符串,int是整數(shù),double是小數(shù),還可以將對象作為變量。

function():表示成員方法名稱。就是用來描述對象的行為,動作的。

其中的屬性和方法按照需要編寫,都不是必須的。

四 對象

4.1 對象的概念

所謂對象就是真實世界中的實體,對象與實體是一一對應(yīng)的,也就是說現(xiàn)實世界中每一個實體都是一個對象,它是一種具體的概念。對象有以下特點:

  • 對象具有屬性和行為。
  • 對象具有變化的狀態(tài)。
  • 對象具有唯一性。
  • 對象都是某個類的實例。
  • 一切皆為對象,真實世界中的所有事物都可以視為對象。

4.2 對象是類的實例化

對象是類的實例化,實例化一個對象,簡單的方式如下:

new 類名(); // 簡單的實例化方式
類名 對象名 = new 類名(); //將一個實例化的類起個名字賦值給它。作為變量使用。稱為引用。

4.3 創(chuàng)建對象

對象是根據(jù)類創(chuàng)建的。在Java中,使用關(guān)鍵字 new 來創(chuàng)建一個新的對象。創(chuàng)建對象需要以下三步:

  • 聲明:聲明一個對象,包括對象名稱和對象類型。

  • 實例化:使用關(guān)鍵字 new 來創(chuàng)建一個對象。

  • 初始化:使用 new 創(chuàng)建對象時,會調(diào)用構(gòu)造方法初始化對象。

    構(gòu)造方法后面會講,我們先用默認的構(gòu)造方法。默認構(gòu)造方法是不需要編寫的。

4.4 實例化一本書

以下代碼,Book是我們剛剛定義的類,用關(guān)鍵字new創(chuàng)建,同時給這個對象起個名字,用等于號賦值。

注意觀察空格,至少空一個,大于一個也沒問題。為了美觀要注意統(tǒng)一規(guī)范。后面會講代碼編寫規(guī)范。

public static void main(String[] args){
    new Book();//如果不將實例化的對象賦值,它就是孤魂野鬼,找不到歸屬。其它代碼想用它也沒辦法。因為不知道它叫啥。所以要起個名字,能夠引用到它。
    Book book = new Book();//實例化了一本書,賦值給book
    Book book2 = new Book();//實例化了一本書,賦值給book2
    Book book3 = new Book();//實例化了一本書,賦值給book3
    
    System.out.println("----------------以下內(nèi)容查看實例化后對象的數(shù)據(jù)----------------");
    System.out.println("book 對象,書名:"+book.name+",作者:"+book.author+",排名:"+book.rank);
    System.out.println("book2對象,書名:"+book2.name+",作者:"+book2.author+",排名:"+book2.rank);
    System.out.println("book3對象,書名:"+book3.name+",作者:"+book3.author+",排名:"+book3.rank);
}

運行該程序,查看打印內(nèi)容,發(fā)現(xiàn)是null和零。對于字符串,默認值都是null,表示沒有。對于int整型,默認值為0

4.5 給對象賦值

= 等于號是簡單的賦值運算符,將右操作數(shù)的值賦給左側(cè)操作數(shù)。比如: A = B; 或者 A = B + C;

正如上面打印的內(nèi)容都是默認的初始值,這些內(nèi)容自然和我們?yōu)g覽器看到的不一樣。我們是如何賦值的呢。

在同級包下,新建ObjInit類,這名字隨意。并對Book對象初始化。


public class OBjInit {
//該類沒有屬性,只有main方法。
    public static void main(String[] args) {
        //我們之前講過Book類是public的。所以在ObjectInit這個類中也是可以使用這個類的。
        Book book = new Book();
        Book book2 = new Book();
        Book book3 = new Book();

        System.out.println("----------------以下內(nèi)容為對象賦值=----------------");
        System.out.println("給book 對象賦值,書名,作者,排名");
        book.name = "圍城";
        book.author = "錢鐘書";
        book.rank = 3;

        System.out.println("給book2 對象賦值,書名,作者,排名");
        book2.name = "白鹿原";
        book2.author = "陳忠實";
        book2.rank = 4;

        System.out.println("給book3 對象賦值,書名,作者,排名");
        book3.name = "紅樓夢";
        book3.author = "曹雪芹";
        book3.rank = 5;

        System.out.println("----------------以下內(nèi)容查看實例化后對象的數(shù)據(jù)----------------");
        System.out.println("book 對象,書名:"+book.name+",作者:"+book.author+",排名:"+book.rank);
        System.out.println("book2對象,書名:"+book2.name+",作者:"+book2.author+",排名:"+book2.rank);
        System.out.println("book3對象,書名:"+book3.name+",作者:"+book3.author+",排名:"+book3.rank);
    }
}

這里,給對象賦值,所有的值,都來自于業(yè)務(wù)需要,如果是簡單的值,固定的值,比如說,省份,國家,可以直接寫死。在本篇Book類中,書籍的內(nèi)容肯定是來自于數(shù)據(jù)庫的。數(shù)據(jù)庫中存儲了很多書的信息,以及書的內(nèi)容。

在讀取數(shù)據(jù)庫,獲取到需要的相關(guān)數(shù)據(jù),進行賦值完成后,通過服務(wù)器,網(wǎng)絡(luò)返回到瀏覽器端,展示給用戶。后面的操作會繼續(xù)學(xué)習(xí)。

文章和項目開源地址

一起學(xué)習(xí),Java最簡單易懂的零基礎(chǔ)入門,答疑解惑,關(guān)注點贊github開源:https://github.com/BradYan/easy-java

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容