2潮梯、2面向?qū)ο蠛兔嫦蜻^程
????面向?qū)ο螅∣OP)
????????不是一種語言蘑拯,而是一種思想
????????面向?qū)ο蟪绦蛟O(shè)計(jì):(Object Oriented Programming)
????對(duì)象
????????方向
????????程序
????????面向過程:
????????關(guān)注點(diǎn)在過程上(步驟)
????????????Step1债查,step2,step3
????????????綜合分析速挑,按照步驟實(shí)現(xiàn)即可
????????????面向?qū)ο?/p>
????????????關(guān)注點(diǎn)在對(duì)象上
????????????萬事萬物都是對(duì)象
????????????????A:分析當(dāng)前的問題域中所涉及的對(duì)象
????????????????B:這些對(duì)象有什么樣的特征和功能
????????????????????外部特征:靜態(tài)屬性
????????????????????動(dòng)作行為:動(dòng)態(tài)屬性
????????????????C:對(duì)象和對(duì)象之間的關(guān)系
????????????????????繼承關(guān)系嘿悬,聚合關(guān)系,關(guān)聯(lián)關(guān)系
????????????????類的堆砌
2婆翔、3類和對(duì)象
????類:其實(shí)知道就是類別拯杠,對(duì)同一類事務(wù)的統(tǒng)稱,對(duì)這類事務(wù)進(jìn)行描述啃奴,---》創(chuàng)建class
????????就是一個(gè)概念
????對(duì)象:
????????類中的一個(gè)具體的實(shí)例潭陪,客觀存在的,能用最蕾,個(gè)體
????????如何定義一個(gè)類依溯?
????????????要有能夠描述這一類別的外部特征--我們叫做屬性(靜態(tài)屬性)
????????????????變量就可以。
????????????要有能夠描述這一類別的行為功能--我們叫做方法(動(dòng)態(tài)屬性)
????????????????方法就可以
2瘟则、4Java中定義類的格式
????/*
????????class? ClassName{//類名首字母大寫
????????//屬性描述:外部特征
????????//行為描述:能做什么
????????}
????*/
????要求:
????????1黎炉、ClassName要求符合駝峰命名法。首字母大寫醋拧,見名知意
????????2慷嗜、屬性描述:外部特征。用于描述這個(gè)類別的一些特征丹壕。而這些特征通過一個(gè)“詞”來描述清楚庆械,比如姓名,年齡雀费,使用變量來表述--【成員變量】Field干奢。詞義“字段”
????????3、行為描述:能夠做什么盏袄。用于描述這個(gè)類別的一些行為功能忿峻,而這些行為功能薄啥,是一個(gè)行為動(dòng)作,比如吃飯睡覺逛尚,使用方發(fā)來表示垄惧,--【成員方法】Method,詞義“方法”
????????????????不要加static
????2.4.1step1聲明類
????????public class Person{//類的名字
????????}
????2.4.2聲明類中的成員變量【成員變量】
????????//step2:成員變量
????????String name;//使用String類別的變量name绰寞,表示人類中的姓名
????????int age;//使用int類別的變量age到逊,表示人類中的年齡
????????char sex;//使用char類別的變量sex,表示人類中的性別
????2.4.3成員方法
????????//step3:成員方法
????????????public void eat() {
????????????System.out.println("吃飯了");
????????????}
2.5類的對(duì)象
????2.5.1創(chuàng)建類的對(duì)象
????????創(chuàng)建對(duì)象滤钱,也叫做類的實(shí)例化觉壶。對(duì)象也叫類的實(shí)例
????????????/*
????????????new關(guān)鍵字
????????????詞義:新的,新建
????????????new關(guān)鍵字件缸,專門用于新建對(duì)象
????????????*/
????????????Scanner sc = new Scanner()
????????語法結(jié)構(gòu)
????????????類名 對(duì)象名 = new 類名()铜靶;
????????????????step1:創(chuàng)建類
????????????????step2:根據(jù)類,實(shí)例化對(duì)象
????2.5.2通過對(duì)象訪問屬性
????????/*
????????????int[] arr=new int[5];
????????????獲取數(shù)組的長(zhǎng)度
????????????arr.length
????????????arr的長(zhǎng)度
????????*/
????????對(duì)象訪問
????????????//step2通過對(duì)象訪問屬性他炊,語法是争剿。
????????????//給對(duì)象的屬性,進(jìn)行賦值
????????????????p1.name="王二狗";
????????????????p1.age=18;
????????????????p1.sex='男';
????????????//獲取對(duì)象的屬性值
????????????System.out.println("姓名:"+p1.name);
????????????System.out.println("年齡:"+p1.age);
????????????System.out.println("性別:"+p1.sex);
????2.5.3通過對(duì)象訪問方法
????????/*
????????????Scanner sc = new Scanner()痊末;
????????????sc.nextInt();
? ? ?*/
????????Scanner就是一個(gè)class一個(gè)類
????????sc.是根據(jù)scanner創(chuàng)建處理啊的一個(gè)對(duì)象
????????對(duì)象調(diào)用類中的方法蚕苇,語法,也是凿叠。
????????對(duì)象. 方法名();
????????//step3:通過對(duì)象涩笤,訪問成員方法-->理解為就是對(duì)象調(diào)用方法
????????????p1.eat();
????????????p1.sleep();
? ? ? ? ? ? p1.dadoudou();
????????方法:public void test();
????????????對(duì)象.test1();
2.6 內(nèi)存分析
????實(shí)例代碼:
????????????package com.qf.demo01;
????????????public class Test1Person {
????????????public static void main(String[] args) {
????????????//step1:創(chuàng)建Person類的對(duì)象
????????????//語法:類名 對(duì)象名 = new 類名();
????????????Person p1 = new Person();
????????????System.out.println(p1);//打印p1的值盒件,p1是引用類型辆它,打印都是p1指向的對(duì)象的地址。
????????????System.out.println(p1.name);
????????????System.out.println(p1.age);
????????????System.out.println(p1.sex);
????????/*
????????* com.qf.demo01.Person@15db9742
????????* 包名.類名@編碼值 ---->理解為p1的內(nèi)存地址履恩。
????????*
? ? ? ?* java中的數(shù)據(jù)類型:
????????* 基本類型:byte,short呢蔫,char切心,int,long片吊,bolean绽昏,float,double
????????* 引用類型:
????????* 數(shù)組俏脊,類類類型
????????*
????????*/
????????????//step2:通過對(duì)象訪問屬性全谤,語法是.
????????????//給對(duì)象的屬性,進(jìn)行賦值
????????????p1.name = "王二狗";//給p1這個(gè)對(duì)象的name屬性進(jìn)行賦值
????????????p1.age = 18;
????????????p1.sex = '男';
????????????//獲取對(duì)象的屬性值
????????????System.out.println("姓名:"+p1.name);
????????????System.out.println("年齡:"+p1.age);
????????????System.out.println("性別:"+p1.sex);
????????????//step3:通過對(duì)象爷贫,訪問成員方法--->理解為就是對(duì)象調(diào)用成員方法
????????????p1.eat();
????????????p1.sleep();
????????????p1.daDouDou();
????????}
????}
????內(nèi)存分析圖
? ??????
示例代碼:
????package com.qf.demo01;
????public class Test2Person {
????public static void main(String[] args) {
? ? //1.創(chuàng)建一個(gè)Person類的對(duì)象
????????????Person p1 = new Person();
????????????System.out.println(p1);//p1的內(nèi)存地址:com.qf.demo01.Person@15db9742
????????????p1.name = "張三狗";
????????????p1.age = 19;
????????????p1.sex = '男';
????????????System.out.println(p1.name);//張三狗
????????????System.out.println(p1.age);//19
????????????System.out.println(p1.sex);//男
? ? ?//2.再創(chuàng)建一個(gè)Person類的對(duì)象
????????????Person p2 = new Person();
????????????System.out.println(p2);//p2的內(nèi)存地址认然,com.qf.demo01.Person@6d06d69c
????????????p2.name = "李小花";
????????????p2.age = 17;
????????????p2.sex = '女';
????????????System.out.println(p2.name);//李小花
????????????System.out.println(p2.age);//17
????????????System.out.println(p2.sex);//女
????//3.
????????????Person p3 = null;//僅僅聲明了Person類型的對(duì)象p3补憾,但是實(shí)際上,并沒有在堆內(nèi)存中卷员,創(chuàng)建出真正的對(duì)象盈匾。
????/*
????????* NullPointerException,空指針異常
????????*
????????* 對(duì)象不存在毕骡,就是個(gè)null削饵,
????????* 強(qiáng)行的訪問對(duì)象的屬性或調(diào)用方法,就會(huì)空指針異常未巫。
????*/
????????//System.out.println("---->"+p3.name);//報(bào)錯(cuò)啦:NullPointerException
????????p3 = p1;//將p1的值(p1對(duì)象的內(nèi)存地址)窿撬,賦值給p3,結(jié)果-->p1和p3存儲(chǔ)的是同一個(gè)對(duì)象的內(nèi)存地址叙凡。
????????p3.name = "李鐵柱";
????????System.out.println(p1.name);//李鐵柱
????????System.out.println(p2.name);//李小花
????????System.out.println(p3.name);//李鐵柱
????????Person p4 = new Person();
????????System.out.println(p4);//?
????????p4.name = "王二丫";
????????p4.age = 18;
????????p4.sex = '女';
????????System.out.println(p4.name );
????????System.out.println(p4.age);
????????System.out.println(p4.sex);
????????p4 = p1;//改變對(duì)象的內(nèi)存地址了劈伴,就不再指向原來的內(nèi)存對(duì)象。
????????System.out.println(p1.name);
????????System.out.println(p3.name);
????????System.out.println(p4.name);
????????}
????}
內(nèi)存分析圖:
三狭姨、總結(jié)
????1宰啦、面向?qū)ο螅阂环N編程思想。
????2饼拍、面向?qū)ο蟮膬纱蠛诵母拍睿侯惡蛯?duì)象
????3赡模、類?
????????概念:同一類事物的統(tǒng)稱师抄。類別漓柑,下個(gè)定義。
????????描述一個(gè)類:
????????靜態(tài)屬性:成員變量:這個(gè)類別有哪些外部特征叨吮。(名詞)
????????動(dòng)態(tài)屬性:成員方法:這個(gè)類別有哪些行為功能辆布。(動(dòng)詞)
????4、對(duì)象茶鉴?
????????就是類中的一個(gè)具體的實(shí)例锋玲。
????????將類進(jìn)行實(shí)例化--->得到了對(duì)象
????????將對(duì)象的共同特征進(jìn)行抽取,加以描述--->對(duì)應(yīng)的就是類涵叮。
????5惭蹂、語法:
????????step1:定義一個(gè)類
????????????/*
????????????public class 類名{
????????????//成員變量
????????????//成員方法:不加static
????????????}
????????*/
????public class Person{
? ? ????????//成員變量
? ? ????????String name;
? ????????? int age;
? ????????? char sex;
? ? ? ? ? ? //成員方法
? ????????????? public void eat(){}
? ? ????????????public void sleep(){}
????????}
????????step2:根據(jù)類,創(chuàng)建對(duì)象割粮。(將類進(jìn)行實(shí)例化盾碗,得到對(duì)象)
????????????/*
????????????類名 對(duì)象名 = new 類名();
????????????*/
????????????public static void main(){
????????????Person p1 = new Person();
????????????}
????????step3:對(duì)象訪問類中的屬性和方法
????????????/*
????????????????.用來表示訪問
????????????????對(duì)象.屬性
????????????????對(duì)象.方法();
????????????*/
????????????public static void main(){
????????????Person p1 = new Person();
????????????p1.name = "王二狗";//賦值
? ? ????????????System.out.println(p1.name);//取值
? ????????????? p1.eat();//對(duì)象訪問方法,將這個(gè)方法調(diào)用執(zhí)行舀瓢。
????}
????6廷雅、內(nèi)存分析:
????????對(duì)象創(chuàng)建:
????????????Person p1 = new Person();
????????????//=左邊,對(duì)象的聲明,開辟棧內(nèi)存
????????????//=右邊航缀,有new商架,開辟堆內(nèi)存,創(chuàng)建對(duì)象谬盐,將對(duì)象的內(nèi)存地址甸私,給p1
????????????//結(jié)論:p1是Person類型的對(duì)象,屬于引用類型飞傀,存儲(chǔ)的都是對(duì)象的內(nèi)存地址皇型。