第一個類和對象
[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é)。

我們在前面《打印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