第十二天學習Java(面向對象)

2、2面向對象和面向過程

????面向對象(OOP)

????????不是一種語言,而是一種思想

????????面向對象程序設計:(Object Oriented Programming)

????對象

????????方向

????????程序

????????面向過程:

????????關注點在過程上(步驟)

????????????Step1,step2,step3

????????????綜合分析,按照步驟實現(xiàn)即可

????????????面向對象

????????????關注點在對象上

????????????萬事萬物都是對象

????????????????A:分析當前的問題域中所涉及的對象

????????????????B:這些對象有什么樣的特征和功能

????????????????????外部特征:靜態(tài)屬性

????????????????????動作行為:動態(tài)屬性

????????????????C:對象和對象之間的關系

????????????????????繼承關系,聚合關系,關聯(lián)關系

????????????????類的堆砌

2、3類和對象

????類:其實知道就是類別,對同一類事務的統(tǒng)稱,對這類事務進行描述,---》創(chuàng)建class

????????就是一個概念

????對象:

????????類中的一個具體的實例,客觀存在的,能用,個體

????????如何定義一個類?

????????????要有能夠描述這一類別的外部特征--我們叫做屬性(靜態(tài)屬性)

????????????????變量就可以。

????????????要有能夠描述這一類別的行為功能--我們叫做方法(動態(tài)屬性)

????????????????方法就可以

2、4Java中定義類的格式

????/*

????????class? ClassName{//類名首字母大寫

????????//屬性描述:外部特征

????????//行為描述:能做什么

????????}

????*/

????要求:

????????1、ClassName要求符合駝峰命名法。首字母大寫,見名知意

????????2、屬性描述:外部特征。用于描述這個類別的一些特征。而這些特征通過一個“詞”來描述清楚,比如姓名,年齡,使用變量來表述--【成員變量】Field。詞義“字段”

????????3、行為描述:能夠做什么。用于描述這個類別的一些行為功能,而這些行為功能,是一個行為動作,比如吃飯睡覺,使用方發(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類的對象

????2.5.1創(chuàng)建類的對象

????????創(chuàng)建對象,也叫做類的實例化。對象也叫類的實例

????????????/*

????????????new關鍵字

????????????詞義:新的,新建

????????????new關鍵字,專門用于新建對象

????????????*/

????????????Scanner sc = new Scanner()

????????語法結構

????????????類名 對象名 = new 類名();

????????????????step1:創(chuàng)建類

????????????????step2:根據(jù)類,實例化對象

????2.5.2通過對象訪問屬性

????????/*

????????????int[] arr=new int[5];

????????????獲取數(shù)組的長度

????????????arr.length

????????????arr的長度

????????*/

????????對象訪問

????????????//step2通過對象訪問屬性,語法是。

????????????//給對象的屬性,進行賦值

????????????????p1.name="王二狗";

????????????????p1.age=18;

????????????????p1.sex='男';

????????????//獲取對象的屬性值

????????????System.out.println("姓名:"+p1.name);

????????????System.out.println("年齡:"+p1.age);

????????????System.out.println("性別:"+p1.sex);

????2.5.3通過對象訪問方法

????????/*

????????????Scanner sc = new Scanner();

????????????sc.nextInt();

? ? ?*/

????????Scanner就是一個class一個類

????????sc.是根據(jù)scanner創(chuàng)建處理啊的一個對象

????????對象調用類中的方法,語法,也是。

????????對象. 方法名();

????????//step3:通過對象,訪問成員方法-->理解為就是對象調用方法

????????????p1.eat();

????????????p1.sleep();

? ? ? ? ? ? p1.dadoudou();

????????方法:public void test();

????????????對象.test1();

2.6 內存分析

????實例代碼:

????????????package com.qf.demo01;

????????????public class Test1Person {

????????????public static void main(String[] args) {

????????????//step1:創(chuàng)建Person類的對象

????????????//語法:類名 對象名 = new 類名();

????????????Person p1 = new Person();

????????????System.out.println(p1);//打印p1的值,p1是引用類型,打印都是p1指向的對象的地址。

????????????System.out.println(p1.name);

????????????System.out.println(p1.age);

????????????System.out.println(p1.sex);

????????/*

????????* com.qf.demo01.Person@15db9742

????????* 包名.類名@編碼值 ---->理解為p1的內存地址。

????????*

? ? ? ?* java中的數(shù)據(jù)類型:

????????* 基本類型:byte,short,char,int,long,bolean,float,double

????????* 引用類型:

????????* 數(shù)組,類類類型

????????*

????????*/

????????????//step2:通過對象訪問屬性,語法是.

????????????//給對象的屬性,進行賦值

????????????p1.name = "王二狗";//給p1這個對象的name屬性進行賦值

????????????p1.age = 18;

????????????p1.sex = '男';

????????????//獲取對象的屬性值

????????????System.out.println("姓名:"+p1.name);

????????????System.out.println("年齡:"+p1.age);

????????????System.out.println("性別:"+p1.sex);

????????????//step3:通過對象,訪問成員方法--->理解為就是對象調用成員方法

????????????p1.eat();

????????????p1.sleep();

????????????p1.daDouDou();

????????}

????}

????內存分析圖

? ??????

示例代碼:

????package com.qf.demo01;

????public class Test2Person {

????public static void main(String[] args) {

? ? //1.創(chuàng)建一個Person類的對象

????????????Person p1 = new Person();

????????????System.out.println(p1);//p1的內存地址: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)建一個Person類的對象

????????????Person p2 = new Person();

????????????System.out.println(p2);//p2的內存地址,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類型的對象p3,但是實際上,并沒有在堆內存中,創(chuàng)建出真正的對象。

????/*

????????* NullPointerException,空指針異常

????????*

????????* 對象不存在,就是個null,

????????* 強行的訪問對象的屬性或調用方法,就會空指針異常。

????*/

????????//System.out.println("---->"+p3.name);//報錯啦:NullPointerException

????????p3 = p1;//將p1的值(p1對象的內存地址),賦值給p3,結果-->p1和p3存儲的是同一個對象的內存地址。

????????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;//改變對象的內存地址了,就不再指向原來的內存對象。

????????System.out.println(p1.name);

????????System.out.println(p3.name);

????????System.out.println(p4.name);

????????}

????}

內存分析圖:


三、總結

????1、面向對象:一種編程思想。

????2、面向對象的兩大核心概念:類和對象

????3、類?

????????概念:同一類事物的統(tǒng)稱。類別,下個定義。

????????描述一個類:

????????靜態(tài)屬性:成員變量:這個類別有哪些外部特征。(名詞)

????????動態(tài)屬性:成員方法:這個類別有哪些行為功能。(動詞)

????4、對象?

????????就是類中的一個具體的實例。

????????將類進行實例化--->得到了對象

????????將對象的共同特征進行抽取,加以描述--->對應的就是類。

????5、語法:

????????step1:定義一個類

????????????/*

????????????public class 類名{

????????????//成員變量

????????????//成員方法:不加static

????????????}

????????*/

????public class Person{

? ? ????????//成員變量

? ? ????????String name;

? ????????? int age;

? ????????? char sex;


? ? ? ? ? ? //成員方法

? ????????????? public void eat(){}


? ? ????????????public void sleep(){}

????????}

????????step2:根據(jù)類,創(chuàng)建對象。(將類進行實例化,得到對象)

????????????/*

????????????類名 對象名 = new 類名();

????????????*/

????????????public static void main(){

????????????Person p1 = new Person();

????????????}

????????step3:對象訪問類中的屬性和方法

????????????/*

????????????????.用來表示訪問

????????????????對象.屬性

????????????????對象.方法();

????????????*/

????????????public static void main(){

????????????Person p1 = new Person();

????????????p1.name = "王二狗";//賦值

? ? ????????????System.out.println(p1.name);//取值

? ????????????? p1.eat();//對象訪問方法,將這個方法調用執(zhí)行。

????}

????6、內存分析:

????????對象創(chuàng)建:

????????????Person p1 = new Person();

????????????//=左邊,對象的聲明,開辟棧內存

????????????//=右邊,有new,開辟堆內存,創(chuàng)建對象,將對象的內存地址,給p1

????????????//結論:p1是Person類型的對象,屬于引用類型,存儲的都是對象的內存地址。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 生活中什么是面向對象 洗衣服,吃飯 面向過程:關注點是過程 ————站在一個執(zhí)行者的角度去考慮事情,做事情 /...
    4d5b10d2437f閱讀 120評論 0 0
  • day12——面向對象 一、上周知識點回顧 1、分支、循環(huán)語句 if語句,switch語句 for語句,while...
    機會留給有準備的人閱讀 294評論 0 0
  • Java OOP 什么是面向對象思想? 把一組數(shù)據(jù)和處理他們的方法組成對象(object),把相同行為的對象歸納為...
    chonglingliu閱讀 897評論 0 1
  • DAY 05 1、 public classArrayDemo { public static void mai...
    周書達閱讀 833評論 0 0
  • 對于開發(fā)人員來說,設計模式有時候就是一道坎,但是設計模式又非常有用,過了這道坎,它可以讓你水平提高一個檔次。而在a...
    WANKUN閱讀 321評論 0 2

友情鏈接更多精彩內容