java学习笔记3--类与对象的基础
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note3.html,轉載請注明源地址。
1、面向對象的程序設計方法概述
面向對象的程序設計
與結構化程序設計方法相比,更符合人類認識現實世界的思維方式,已成為程序設計的主流方向
涉及的主要概念:抽象、封裝、繼承、多態
對象
現實世界中:萬物皆對象,都具有各自的屬性,對外界都呈現各自的行為
程序中:一切都是對象,都具有標識 (identity), 屬性和行為(方法),通過一個或多個變量來保存其狀態,通過方法(method) 實現他的行為
類 將屬性及行為相同或相似的對象歸為一類,類可以看成是對象的抽象,代表了此類對象所具有的共有屬性和行為,在面向對象的程序設計中,每一個對象都屬于某個特定的類抽象
忽略問題中與當前目標無關的方面,以便更充分地注意與當前目標有關的方面;計算機軟件開發中所使用的抽象有:過程抽象和數據抽象
過程抽象:
–-將整個系統的功能劃分為若干部分,強調功能完成的過程和步驟,而隱藏其具體的實現
–-任何一個明確定義的功能操作都可被看作單個的實體,盡管這個操作實際上可能由一系列更低級的操作來完成
–-基于過程抽象的兩個標準程序設計技術過程:分解、遞歸技術
數據抽象–-將需要處理的數據和這些數據上的操作結合在一起,抽象成不同的抽象數據類型
–-每個抽象數據類型既包含了數據,也包含了針對這些數據的操作
–-相對于過程抽象,數據抽象是更為合理的抽象方法
例:鐘表數據(屬性)
int Hour;? int Minute;? int Second;
方法(行為)
SetTime();? ShowTime();
封裝
-  是一種信息隱蔽技術 
-  利用抽象數據類型將數據和基于數據的操作封裝在一起 
-  用戶只能看到對象的封裝界面信息,對象的內部細節對用戶是隱蔽的 
-  封裝的目的在于將對象的使用者和設計者分開,使用者不必知道行為實現的細節,只需使用設計者提供的消息來訪問對象 
繼承
-  是指新的類可以獲得已有類(稱為超類、基類或父類)的屬性和行為,稱新類為已有類的派生類(也稱為子類) 
-  在繼承過程中派生類繼承了基類的特性,包括方法和實例變量 
-  派生類也可修改繼承的方法或增加新的方法,使之更適合特殊的需要 
-  有助于解決軟件的可重用性問題,使程序結構清晰,降低了編碼和維護的工作量 
PS:Java語言僅支持單繼承
多態
-  一個程序中同名的不同方法共存 
-  主要通過子類對父類方法的覆蓋來實現 
-  不同類的對象可以響應同名的消息(方法) ,具體的實現方法卻不同 
-  使語言具有靈活、抽象、行為共享、代碼共享的優勢,很好地解決了應用程序方法同名問題 
2、類與對象
在程序中,對象是通過一種抽象數據類型來描述的,這種抽象數據類型稱為類(Class),一個類是對一類對象的描述。類是構造對象的模板,對象是類的具體實例
類的聲明
聲明形式:[public] [abstract | final] class 類名稱?[extends 父類名稱]?[implements 接口名稱列表]?{?
? ?變量成員聲明及初始化;
???? ? 方法聲明及方法體;
}
class:表明其后聲明的是一個類。
extends:如果所聲明的類是從某一父類派生而來,那么,父類的名字應寫在extends之后
implements:l如果所聲明的類要實現某些接口,那么,接口的名字應寫在implements之后
修飾符:可以有多個,用來限定類的使用方式
public:表明此類為公有類
abstract:指明此類為抽象類
final:指明此類為終結類 ?
先看一個鐘表類的例子:
public class Clock { // 成員變量int hour ;int minute ;int second ;// 成員方法public void setTime(int newH, int newM, int newS) { hour = newH ; minute = newM ; second = news ; }public void showTime() { System.out.println(hour + ":" + minute + ":" + second);} }?對象的聲明
格式:??類名? 變量名
例如:Clock是已經聲明的類名,則下面語句聲明的變量aclock將用于存儲該類對象的引用:Clock? aclock;
聲明一個引用變量時并沒有對象生成
對象的創建
生成實例的格式:
? new <類名>()
?例如: aclock=new Clock()
其作用是:
在內存中為此對象分配內存空間
返回對象的引用(reference ,相當于對象的存儲地址)
引用變量可以被賦以空值
例如:aclock=null;
數據成員
表示Java類的狀態,聲明數據成員必須給出變量名及其所屬的類型,同時還可以指定其他特性。在一個類中成員變量名是唯一的,數據成員的類型可以是Java中任意的數據類型(簡單類型,類,接口,數組)
分為實例變量和類變量
–聲明格式? [public?|?protected?|?private]
? [static][?final][transient] [volatile]
??變量數據類型? 變量名1[=變量初值],
? ?????????? 變量名2[=變量初值], … ;
–格式說明
public、protected、private?為訪問控制符
static指明這是一個靜態成員變量
final指明變量的值不能被修改
transient指明變量是臨時狀態
volatile指明變量是一個共享變量
類變量,也稱為靜態變量,聲明時需加static修飾符,不管類的對象有多少,類變量只存在一份,在整個類中只有一個值,類初始化的同時就被賦值
適用情況:
類中所有對象都相同的屬性
經常需要共享的數據
系統中用到的一些常量值
例:對于一個圓類的所有對象,計算圓的面積時,都需用到π的值,可在Circle類的聲明中增加一個類屬性PI public class Circle { static double PI = 3.14159265; int radius; } public class ClassVariableTester { public static void main(String args[]) { Circle x = new Circle(); System.out.println(x.PI); System.out.println(Circle.PI); Circle.PI = 3.14; System.out.println(x.PI); System.out.println(Circle.PI); } }執行結果:
3.14159265
3.14159265
3.14
3.14
final修飾符實例變量和類變量都可被聲明為final
final實例變量必須在每個構造方法結束之前賦初值,以保證使用之前會被初始化
final類變量必須在聲明的同時初始化
類方法,也稱為靜態方法,表示類中對象的共有行為,聲明時前面需加static修飾符,不能被聲明為抽象的,類方法可以在不建立對象的情況下用類名直接調用,也可用類實例調用 //將攝氏溫度(centigrade)轉換成華氏溫度(fahrenheit) //轉換公式為 fahrenheit = centigrade * 9 / 5 + 32 //除了攝氏溫度值及公式中需要的常量值,此功能不依賴于具體的類實例的屬性值,因此可聲明為類方法 //轉換方法centigradeToFahrenheit放在類Converter中 public class Converter { public static int centigradeToFahrenheit(int cent) { return (cent * 9 / 5 + 32); } } //方法調用 Converter.centigradeToFahrenheit(40);get方法
功能是取得屬性變量的值,get方法名以“get”開頭,后面是實例變量的名字,一般具有以下格式:
public <fieldType> get<FieldName>() {
??? return <fieldName>;
}
對于實例變量radius,聲明其get方法如下: public int getRadius(){return radius; }set方法
功能是修改屬性變量的值,set方法名以“set”開頭,后面是實例變量的名字,一般具有以下格式:
public void set<FieldName>(<fieldType> <paramName>) {
??? <fieldName> = <paramName>;
}
聲明實例變量radius的set方法如下: public void setRadius(int r){radius = r; }關鍵字this的使用
如果形式參數名與實例變量名相同,則需要在實例變量名之前加this關鍵字,否則系統會將實例變量當成形式參數。
在上面的set方法中,如果形式參數為radius,則需要在成員變量radius之前加上關鍵字this。代碼如下:
public void setRadius(int radius){this.radius = radius; }參考資料:
《java程序設計》--清華大學
總結
以上是生活随笔為你收集整理的java学习笔记3--类与对象的基础的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: java学习笔记2--数据类型、数组
- 下一篇: java学习笔记4--对象的初始化与回收
