從這章開始,就是面向對象的程序開發 ,是開發的核心。也是我們重點掌握的內容
我們解決問題(事情)的時候,可以采用2種思維方式去解決問題
第1種就是面向過程:
我們之前學的程序,都是面向過程,也就是說我們寫的一行一行的代碼都是過程化
代碼。 關注的是細節。關注的是具體的措施。關注的是具體的語句代碼(比如說到底用循環,還是if等)
例子:李明去取1000元。目的是生活費
按照面向過程的思維方式 應該是:
第1步:李明把存折或卡拿好
第2步:到某某銀行
第3步:排隊
第4步:取錢,輸入密碼
第5步:銀行職員 要驗證密碼,正確,然后查看是否有這么多錢
if 沒有 就退卡
If 有,就給錢,刷卡
第6步:回去。
如果要做一個項目,這個項目有100多個功能。如果采用面向過程
面向過程有什么缺點:
很繁瑣!考慮的細節很多。注定會丟失大的方向,使軟件不可控制!
就好比寫文章,先把段落寫好。然后每個段落湊在一起。這很有可能偏離中心思想!
第2種就是面向對象:
面向對象 是我們生活中主要的思維方式,能夠決定我們的事情方向。比如說
我們都有計劃,無論是學習計劃,還是創業計劃,計劃都是籠統的。概括的!
都不會設計到每個細節。也就是說面向對象,關注的是整體,是對象。關注的是大概方向。
然后每個整體,再去考慮細節。
就好比
寫文章。先定 中心思想。然后考慮分為幾段。
然后每個段落 再去面向過程
舉例:李明去取錢
面向對象的話
關注的是 對象 李明
按照面向對象的方式
就一步:李明 這個對象 有取錢的行為
然后,取錢的行為 具體怎么樣 就是面向過程了
就可以按照上面的第一步到第6步去做!
從現實中的例子,或問題 中可以發現,面向對象與面向過程都是不可缺少的。都是緊密聯系在一起的。面向對象 決定方向,面向過程 決定細節。
一:怎么樣才能夠培養面向對象的思維方式(怎樣去在問題找對象,找類)
1:要從問題中或事情中 找到對象。然后找到對象的特征,無論是靜態特征還是動態特征,都要發現出來。
怎么去找對象呢,實際上就是找名詞!
比如說李明這個對象 有靜態的特征 比如 身高,體重,年齡,姓名等
動態特征 比如玩,學習,取錢
跟sql 相比,表名就是對象。屬性(字段名) 就是靜態特征
2:從對象中 抽象出 類
如果有很多相同的對象,比如李明,王五,張三等等這些對象。那么這些有些什么共同的地方呢?就是靜態特征與動態特征的名字都一樣。也就是說屬性名一樣。但是屬性值不同而已 這就可以抽象出類
所以,抓住2點,1是對象,2是類!
對象 靜態特征 動態特征
轎車 顏色名:黑色 啟動,剎車,跑(玩耍)
長度:1*1*1
品牌名:BYD
卡車 顏色名:黃色 啟動,剎車,跑(載重)
長度:3*2*4
品牌名:東風
公交車 顏色名:綠色 啟動,剎車,跑(載人)
長度:4*2*3
品牌名:大巴
這3個對象 可以抽象出 類 因為這3個對象的 屬性名一樣。也就是靜態特征名一樣(顏色名,長度,品牌名)。值不同。動態特征 也一樣,就是里面的細節不一樣
汽車類 靜態特征 動態特征
顏色名,長度,品牌名 啟動,剎車,跑
上面的例子可以發現 類的靜態特征是沒有值的。對象的靜態特征是有具體的值
對象(object):萬事萬物都是對象。一般都是可以看到的。感覺到得實體
當然也可以是想象的
對象 由 靜態特征 和動態特征組成
靜態特征:就是描述對象的一些屬性,也就是一些名詞,特征越多,對象越清晰
動態特征:就是對象的一些行為。動詞
類(class):是具有相同屬性名(靜態特征)與(動態特征)行為名的一組對象的集合
前面講的:就是怎么從問題中找對象,然后找類,一般有對象就有類。無論這個對象是一個還是幾個。
二:怎么把問題中的找到的對象與類寫在java代碼中呢?
1:先寫類,后去創建對象
2:類的一般java語法(不是很詳細)怎么寫
class 類名{
屬性定義;//靜態特征定義 具體就是 變量的定義 String name; int age;
方法定義;//動態特征定義 具體就是 方法定義 void print(){}
}
//class 表示定義類
//Student 表示類名為學生類
//public 表示公共的類,能夠被其他所有類所看到
publicclass Student {
//學生類可以認為是學生對象的抽象
//學生類的靜態特征為姓名,年齡,地址,學號等等
// 這個特征怎么寫 通過變量定義來完成 可以賦值也可以不賦值
String xuehao;
//年齡這個特征
intage;
String address;
String name;
//動態特征 就是方法有哪些 玩,學習
//玩的方法(函數)怎么寫
publicvoid wan(){ //void 表示不存在返回值
System.out.println(name+"玩");//
}
publicvoid xuexi(){
System.out.println(name+"學習");
}
//main 也是一個動態特征因為它也是一個方法
//是一個跟學生無關的方法,但是必不可少
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
}
}
package test;//package 關鍵字,用來定義包的
//public 關鍵字,表示公共的。意味著其他類都可以訪問這個類
//class 關鍵字,表示類
//Student 類名,類名首字母一般大寫,如果類名有多個單詞,每個單詞的首字母大寫
publicclass Student {
//靜態的特征
//有姓名,性別,年齡,地址等這些特征去描述學生
//這些特征通過變量的定義去描述
String name;
String sex;
intage;
String address;
//動態的特征行為有哪些?玩,學習
publicvoid wan(){
System.out.println(name+"玩");
}
publicvoid xuexi(){
System.out.println(name+"學習");
}
//main方法也是一種動態的特征,只不過時特殊的。
//可以幫助我們進入程序,也就是程序入口
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
}
}
publicclass Teacher {
String name;
intage;
String address;
publicvoid jiaoshu(){
System.out.println(name+"教書");
}
publicvoid wan(){
System.out.println(name+"玩");
}
}
package test;
publicclass Teacher {
String name;
String sex;
intage;
publicvoid wan(){
System.out.println(name+"玩");
}
publicvoid jiaoshu(){
System.out.println(name+"教書");
}
}
3:創建對象
a、對象聲明 :類名 對象名; //跟以前學的 int a; //聲明就是告訴內存,要預留空間
b、對象創建(為對象分配內存空間)
– 對象名 = new 類名();
– //準確表述應為:對象名 = new 構造方法名;
– 以上兩部分可以寫
– 類名 對象名 = new 類名();//意思就是創建關于類的一個對象為對象名
訪問對象的屬性和方法語法
– 對象名.屬性名;
– 對象名.方法名();
//產生一個學生類的對象
Student stu=new Student();
stu.name="張三";
stu.age=20;
stu.xuehao="t301";
stu.address="長沙市";
stu.wan();
stu.xuexi();
//再產生一個學生
Student stu2=new Student();
stu2.name="李四";
stu2.age=20;
stu2.xuehao="t301";
stu2.address="長沙市";
stu2.wan();
stu2.xuexi();
說明:對象是類的具體化(實例化) 說白了就是說類的屬性名賦值了!
比如stu.name=”張三” 屬性名為name 值為張三
類 是對象的抽象化(模糊化) 說白了就是類的屬性名沒有賦值沒有賦值
也就意味著可以為任意值
類可以創建任意個對象
一個類可以產生任意個對象。每一個對象都要占用內存,每一個對象都是不同的
4:以下的例子有個問題:如果想要輸出每個屬性的內容值,有什么方法嗎?
有2種方法
第一種:在類中添加如下方法
publicvoid print(){
System.out.println("姓名="+name+",性別="+sex+",年齡="+age+",地址="+address);
}
然后在main方法中添加
stu1.print();//輸出stu1對象的信息
第二種:可以在任意類中添加如下方法(推薦使用)
//public String toString() 這是固定寫法
//toString()方法是屬于Object類。任意類都可以寫這個方法
//方法的作用就是格式化輸出屬性信息
public String toString(){
return"姓名="+name+",性別="+sex+",年齡="+age+",地址="+address;
}
然后在main方法添加如下代碼
System.out.println(stu1);
package test;//package 關鍵字,用來定義包的
//public 關鍵字,表示公共的。意味著其他類都可以訪問這個類
//class 關鍵字,表示類
//Student 類名,類名首字母一般大寫,如果類名有多個單詞,每個單詞的首字母大寫
publicclass Student {
//靜態的特征
//有姓名,性別,年齡,地址等這些特征去描述學生
//這些特征通過變量的定義去描述
String name;
String sex;
intage;
String address;
//動態的特征行為有哪些?玩,學習
publicvoid wan(){
System.out.println(name+"玩");
}
publicvoid xuexi(){
System.out.println(name+"學習");
}
//main方法也是一種動態的特征,只不過時特殊的。
//可以幫助我們進入程序,也就是程序入口
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
//產生2個學生,一個是張三,另外一個是李四
Student stu1=new Student();
//給對象名stu1的每一個屬性賦值
stu1.name="張三";
stu1.age=20;
stu1.address="長沙市";
stu1.sex="男";
//對象名stu1 去調用方法
stu1.wan();
stu1.xuexi();
Student stu2=new Student();
//給對象名stu2的每一個屬性賦值
stu2.name="李四";
stu2.age=20;
stu2.address="長沙市";
stu2.sex="男";
//對象名stu1 去調用方法
stu2.wan();
stu2.xuexi();
}
}