面向对象一——概述

2018-02-05  本文已影响0人  嗷老板

一、面向过程思想概述

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

二、面向对象思想概述

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

1、面向对象的思想特征

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

通过两个方面:

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

3、类和对象

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

(1)类

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

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

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

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

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

学生类:

(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);// "蓝色"

    }

}
两个引用指向同一个堆内存
上一篇 下一篇

猜你喜欢

热点阅读