1. 程式人生 > >Java基礎05-面向物件

Java基礎05-面向物件

1.初識面向物件:

1.面向物件與面向過程的區別:
    面向過程強調“怎麼做”
    面向物件強調“誰來做”
2.面向物件的好處:
    解決大型的問題,使用面向物件程式碼更簡潔
    以人類的思考問題的方式
3.面向物件的思考步驟:
    1、分析判斷涉及幾個類,分別是什麼
    2、抽取每個類的屬性、方法,再加以定義
    3、建立物件,然後呼叫方法、屬性,面向過程的步驟

2.類與物件的理解:

類:具有相同屬性和方法的一組物件(一類事物)的統稱
物件:類的例項化,萬物皆物件,每一個具體的存在都是物件
二者的區別:類是抽象的,是模板,物件是具體的
二者的關係:物件由類創建出來的,類是由物件抽象總結出來的
類名  物件名 = new 類名();
物件名.屬性 = 值;
物件名.方法();
static
	用static修飾的屬性是叫做類變數,特點:(共享的,一直存在,全域性的)
	用static修飾的方法是叫做類方法,特點:通過類名去呼叫
	不是static修飾的屬性是叫做例項變數,特點:獨立的,通過物件去呼叫
	不用static修飾的方法是普通成員方法,特點:通過物件去呼叫

3.類的成員:

1.屬性Field
	宣告的格式:修飾符  資料型別  屬性名;
	分為兩種:例項變數和類變數
		例項變數是指每個物件獨立的,修改其中一個物件的例項變數值不會影響其他物件的這個例項變數值
		類變數是所有物件共享的,其中一個物件把該變數修改了,那麼所有物件的該變數值都修改了
2.成員方法Method
	宣告的格式:修飾符  返回值型別  方法名(形參列表){方法體}
	分為兩種:非靜態的成員方法和靜態的成員方法
		誰能訪問它
			靜態的方法
				類名.方法()可以呼叫
				物件.方法()可以呼叫,但是不建議這樣寫
			非靜態的方法
				物件.方法()只能用物件訪問
		它能訪問誰
			靜態的方法
				只能訪問靜態的屬性與方法
			非靜態的方法
				可以訪問非靜態的成員
				還可以訪問靜態的成員
3.構造器Constructor
	宣告的格式:修飾符  方法名(形參列表){方法體},沒有返回值型別,方法名必須與類名相同
	作用:
		1、和new一起使用時建立物件
		2、用來初始化屬性
全域性變數和區域性變數
	作用範圍
		全域性變數,定義它的類中
		區域性變數,只在定義它的方法或程式碼塊中有效
	預設值
		全域性變數是有預設值,byte,short,int,long都是0,float和double是0.0,char是'\u0000',boolean是false,引用型別都是null
		區域性變數統統沒有預設值
	是否可以重名
		全域性變數允許與區域性變數重名,如果是例項變數,通過this去修飾,如果是類變數,通過類名去修飾
		對於區域性變數,如果作用範圍不衝突,是可以重名,如果作用範圍衝突,是不允許重名
4.程式碼塊
	非靜態程式碼塊,構造塊
		語法:{},定義在類中,方法外
		每次建立例項物件都會呼叫
		優先於構造器
		一般用於物件的屬性的初始化,通常用於共性內容進行初始化,就不用在每個構造方法中都寫一份
		可以多個,如果多個,按照順序執行
	靜態程式碼塊
		語法:  static{},定義在類中,方法外
		隨著類的載入而載入,而且只執行一次
		優先於構造塊
		在靜態程式碼塊中,不能使用、訪問非靜態成員
		可以有多個,如果多個,就順序執行

4.包:

建立包
	1、直接在原始檔的第一行寫,package 包名;
	2、在src上右鍵,new--package
	3、在定義類的同時,指定它的包
作用
	1、避免重名
	2、用於許可權控制
	3、劃分專案的結構層次,使得原始檔管理的更有條理,功能相似的類放在同一個包
命名
	規則:只能是字母、數字、下劃線,$,小圓點,不能使用關鍵字和保留字
	規範:所有字母都小寫,域名倒置   com.公司名.專案名.模組名
package 包名;

import 包名;
import 包.*;   *代表的是本包的所有型別,不包括子包

class 類名{
}

5.幾個關鍵字:

許可權修飾符
	private:只限於本類中可見
	預設default:只限於本包可見
	protected:本包的中其他類與其他包的子類可見
	public:任意位置
和包相關
	package:宣告包的關鍵字,只能寫在原始檔中可執行程式碼的第一行
	import
		格式
		特點:
			位置:只能在package,和class之間
			可以多個,沒有順序
			匯入不同包,但是名字相同的型別,其中一個使用導包,另一個使用全限定名
			靜態匯入,JDK1.5,格式import static 包名.類名.*;作用就是使得本類使用其他類的靜態方法不用加類名
this
	代表的是當前物件
	作用:
		1、例項變數與區域性變數重名時,為了區別,使用this.修飾例項變數
		2、this()或this(實參),呼叫本類的其他構造方法
		3、this.方法(),呼叫本類的其他非靜態的成員方法,這個使用的不過
final
	代表最終
	可以修飾類、方法、屬性、區域性變數
	修飾類:表示該類不能被繼承
	修飾方法:表示該方法不能被重寫,final的方法注意,可以被子類繼承,但不能被重寫(”可以被模仿不能被超越“)
	修飾屬性:表示該屬性是常量,沒有預設值,必須初始化(顯式初始化、程式碼塊、構造器),如果使用構造器進行初始化,那麼需要保證每個構造器中都有一條為該常量初始化的語句。不能再修改
	修飾區域性變數:表示該區域性變數是常量,必須初始化,而且不能再修改
static
	代表靜態的
	可以修飾:屬性、方法、程式碼塊、內部類
	修飾屬性:表示類變數
		隨著類的載入而載入,隨著類的載入就在方法區分配空間
		所有物件共享的屬性,其中一個物件對它進行修改,其他物件都會受到影響
		優先於物件存在
		如果不是私有化,可以通過類名.類變數
		可以在靜態方法或成員方法中都可以訪問
	修飾方法:表示類方法
		隨著類的載入而載入,只加載一次,普通的成員方法是可以載入多次
		優先於物件存在
		通過類名.靜態方法()
		在靜態方法中不能呼叫非靜態成員,也不能出現this和super
	修飾程式碼塊:
      static{}
	修飾內部類:
      public class m(){
         //靜態內部類
        private static class n(){}
      }

6.資料型別的轉換:

基本資料型別的轉換
	自動轉換
		在混合運算時資料儲存範圍小的自動轉成資料範圍大
		char,short,byte-->int-->long-->float-->double
		char,short,byte不會互相轉,boolean與任意一種都不轉
	強制型別轉換
		從儲存資料範圍大的到小的,注意會損失精度
引用資料型別,父子類
	向上轉型,自動轉換,把子類物件賦值給父類的引用變數
	向下轉型,強制轉換,把父類的變數引用,強制賦值轉換為子類的變數引用
基本資料型別與包裝類之間
	自動裝箱:基本資料型別可以直接賦值給它的包裝類物件,只能賦值給自己的包裝類
	自動拆箱:包裝類物件可以直接賦值給它對應的基本資料型別的變數
	還可以使用包裝類的靜態方法/構造方法實現字串與基本資料型別之間的轉換
int-->Integer,flout--Flout,double-->Double,char-->Character等等