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類型的對象,屬于引用類型,存儲的都是對象的內存地址。