面向对象一——概述

一、面向过程思想概述

  我们在完成一个需求是,首先要清楚我们需要做什么,然后分析需要怎么做,最后再用代码去实现那些功能。在这过程中,每一步都需要我们去实现和操作,这就体现了面向过程的思想。
  面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。
  面向过程强调的是每一个功能的步骤。
  例如:
  我们在洗衣服的过程中,如果采用面向过程的思想,那么步骤应该为:
  把衣服脱下来---找一个盆---放洗衣粉---放水---浸泡十分钟---揉一揉---清洗---拧干---晾起来

二、面向对象思想概述

  当需求比较简单时,我们可以一步一步去操作。可是随着需求的增加,功能的增多,我们再面对每一个步骤就会比较麻烦了。这是我们就应该想,能不能把这些相同或相近的步骤和功能进行封装,这样结构就会比较清晰,使用时直接找到相应的类就可以了。
  面向对象强调的是对象,然后由对象去调用功能。
  例如:
  还是洗衣服的过程中,我们采用面向对象的思想,那么步骤应该为:
  把衣服脱下来---打开全自动洗衣机---放入衣服---放入洗衣粉---按按钮---晾起来

1、面向对象的思想特征

  • 是一种符合我们思考习惯的思想
  • 可以将复杂的事情简单化
  • 让我们从执行者变成了指挥者

2、如何模拟现实世界的事物

通过两个方面:

  • 属性  就是事物的描述信息
  • 行为  就是事物能够做什么

以学生来举例:
  学生的属性有:名字、年龄、性别等等
  学生的行为有:学习、玩游戏、运动等等

3、类和对象

  在Java语言中,最基本的组成单位是类,所以,我们都是通过类来体现事物的。

(1)类

  类就是一组相关的属性和行为的集合,是用来描述现实世界事物的。
  我们之前说,一个事物是由两个方面组成:属性和行为,那么,与之相对应的,我们的类包括两个方面:成员变量和成员方法。

成员变量:和我们之前变量的定义是一样的。

成员变量和局部变量的区别:

  • 在类中的位置不同:
      成员变量的定义在类中方法外
      局部变量定义在方法内或者方法声明上
  • 在内存中的位置不同
      成员变量在堆内存
      局部变量在栈内存
  • 生命周期不同
      成员变量随着对象的存在而存在,随着对象的消失而消失
      局部变量随着方法的调用而存在,随着方法的调用完毕而消失
  • 初始化值不同:
      成员变量有默认的初始化值
      局部变量没有默认的初始化值,必须先定义赋值才能使用

成员方法:和我们学习的方法的定义是一样的,但是有一个小区别:

  • 去掉了修饰符中的static

例如:我们需要定义一个学生类
学生事物:

  • 属性:姓名、年龄...
  • 行为:学习、吃饭...

学生类:

  • 成员变量:姓名,年龄...
  • 成员方法:学习、吃饭...

(2)对象

  我们是用一个类,其实就是使用该类的成员(成员变量和成员方法)。而我们想要使用一个类的成员,就必须先拥有该类的对象。创建对象的格式:

类名 对象名 = new 类名();

对象访问成员的格式:

对象名.成员变量;//访问成员变量
对象名.成员方法(...);//访问成员方法,省略号代表参数

示例:

//定义一个学生类
public class Student {
    // 学生的属性:姓名、年龄
    String name;
    int age;

    // 学生的行为:吃饭、学习
    public void eat() {
        System.out.println("吃饭");
    }

    public void study() {
        System.out.println("学习");
    }

}

//定义一个测试类,调用学生类
public class StudentTest {
    public static void main(String[] args) {
        // 定义一个Student类的对象 s
        Student s = new Student();
        // 输出对象s的成员变量
        System.out.println("姓名:" + s.name);
        System.out.println("年龄:" + s.age);

        // 调用对象s的成员方法
        s.eat();
        s.study();

        // 给成员变量赋值
        s.name = "张三";
        s.age = 30;
        
        // 再次输出对象s的成员变量
        System.out.println("姓名:" + s.name);
        System.out.println("年龄:" + s.age);
    }
}

(3)内存图解

  首先定义一个手机类

//定义一个手机类
public class Phone {
    //定义手机类的成员变量
    String brand;
    int price;
    String color;
    
    //定义手机类的成员方法
    public void call(String name){
        System.out.println("给"+name+"打电话");
    }
    
    public void sendMessage(String name){
        System.out.println("给"+name+"发短信");
    }

}

然后定义一个对象调用手机类

public class PhoneTest1 {
    public static void main(String[] args) {
        Phone p = new Phone();
        
        System.out.println("品牌:"+p.brand);//null
        System.out.println("价格:"+p.price);//0
        System.out.println("颜色:"+p.color);//null
        System.out.println("------------");
        
        p.brand = "锤子";
        p.price = 2999;
        p.color = "棕色";
        
        System.out.println("品牌:"+p.brand);//"锤子"
        System.out.println("价格:"+p.price);//2999
        System.out.println("颜色:"+p.color);//"棕色"
        
        p.call("张三");
        p.sendMessage("张三");
    }

}
一个对象的内存图解

然后是定义两个对象的内存图解(共用方法区)

public class PhoneTest2 {
    public static void main(String[] args) {
        Phone p = new Phone();
        p.brand = "小米5s";
        p.price = 1999;
        p.color = "银色";
        System.out.println("品牌:" + p.brand);// "小米5s"
        System.out.println("价格:" + p.price);// 1999
        System.out.println("颜色:" + p.color);// "银色"
        System.out.println("------------");

        p.call("张三");
        p.sendMessage("张三");

        Phone p2 = new Phone();
        p2.brand = "华为P9";
        p2.price = 3288;
        p2.color = "灰色";

        System.out.println("品牌:" + p.brand);// "华为P9"
        System.out.println("价格:" + p.price);// 3288
        System.out.println("颜色:" + p.color);// "灰色"

        p2.call("李四");
        p2.sendMessage("李四");

    }

}
两个对象的内存图解(共用方法区)

最后是两个引用指向同一个堆内存

public class PhoneTest3 {
    public static void main(String[] args) {
        Phone p = new Phone();
        p.brand = "OPPO";
        p.price = 2999;
        p.color = "白色";
        System.out.println("品牌:" + p.brand);// "OPPO"
        System.out.println("价格:" + p.price);// 2999
        System.out.println("颜色:" + p.color);// "白色"
        System.out.println("------------");

        Phone p2 = p;
        p2.brand = "魅族";
        p2.price = 1999;
        p2.color = "蓝色";
        System.out.println("品牌:" + p.brand);// "魅族"
        System.out.println("价格:" + p.price);// 1999
        System.out.println("颜色:" + p.color);// "蓝色"
        System.out.println("----------");
        System.out.println("品牌:" + p2.brand);// "魅族"
        System.out.println("价格:" + p2.price);// 1999
        System.out.println("颜色:" + p2.color);// "蓝色"

    }

}
两个引用指向同一个堆内存
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,608评论 18 399
  • 写在之前 因为简书字数限制,完整版地址:https://www.zybuluo.com/hainingwyx/no...
    hainingwyx阅读 13,890评论 0 41
  • 长时间的复习,给大脑造成枯燥乏味的感觉。于是,连简单的连连看都觉得有趣无比。这是大脑在逃避思考造成的能量损失,简单...
    言道少年家阅读 116评论 0 0
  • 一瓶盖无眠 一瓶盖语塞 一瓶盖旧忆复燃 一瓶盖泪流满面 一加仑胆汁 一加仑红血丝 一加仑精炼脑油 一加仑青肿大腿 ...
    Alanzki阅读 224评论 1 1
  • 思科Spark Room Kit 从上海去北京。
    taoza阅读 242评论 2 2