面向对象1--- 思想和基本概念

1 基本思想

面向对象与面向过程的特点
面向过程,强调的是过程(动作),比如,把水果存进冰箱,面向过程的思想是这样的:

打开冰箱
存储水果
关闭冰箱

面向对象,强调的是对象(实体),是对象本身具备什么样的功能,比如,把水果存进冰箱,面向对象的思想是这样的:

冰箱打开
冰箱存储
冰箱关闭

对象对功能进行了封装,找到对象,就是找到了功能,想实现什么功能,就调用具备什么功能的对象即可。

对象的出现,是为了封装数据,数据多了,可以考虑建一个对象封装起来

2 类(Class) 与 对象(Object) 之间的关系

用 Java 语言,对现实生活中的事物进行描述,是通过 类(Class) 的形式体现的。 怎么描述?

对事物的描述,通常只关注两个方面

  • 属性 : 成员变量
  • 行为 : 成员函数

只要明确该事物的 属性行为 , 并定义在类中即可。
对象:类的实例,在 Java 中,通过 new 来创建对象。除了8种基本类型外,还有3种引用类型,数组类型类类型接口类型

3 对象的内存体现

堆中存的都是实体,栈中存的都是引用类型

Car c = new Car();

  • 凡是 new 的对象,都存在堆中
  • 堆内存中的对象,默认初始化
  • 将 new Car() 的地址,赋给 c

多个引用,指向同一个对象
Car c1 = new Car();
Car c2 = c1;
c1.num = 8;
c2.color = “red”;
c1.run(); // 8, red
c1 = null; // c1 指向空,c2仍然能用

4 成员变量 和 局部变量

成员变量定义在类中,整个类中都可以访问。
局部变量定义在函数,语句,局部代码块中,只在 所属的区域有效。

成员变量存在于堆内存的对象中。
局部变量存在于栈内存的方法中。

成员变量随着对象的创建而存在,随着对象的消失而消失。
局部变量随着所属区域的执行而存在,随着所属区域的结束而释放。

成员变量都有默认初始化值。
局部变量没有默认初始化值。 

5 匿名对象

匿名对象,没有名字的对象。
new Car(); // 匿名对象,其实就是 定义对象的 简写格式。
1 当对象,对方法仅进行一次调用的时候,就可以简化成匿名对象。匿名对象没有任何引用和指向,运行完就结束了。

Car c = new Car();
c.run();
new Car().run();

new Car().num = 5;
new Car().color = "green";
new Car().run();
// 分析:其实这是3个对象,
// new Car().num = 5; new Car()是创建一个新对象 .num=5; 是为新对象赋值
// 在运行第二句话new Car().color = "green";的时候,第一句话就已经成了垃圾;

2 匿名对象可以作为实参进行传递

Car c1 = new Car();
// show(c1);
show(new Car()); // 作为实参进行传递,不变垃圾

6 数据传递

1 成员变量和局部变量的同名&显示初始化

class Car
{
    int num; 
    String color;  // Java中,所有的关键字都是小写的,这里的String,是类

    void run()
    {
        int num = 10;
        System.out.println(num+"..."+color);
    }

}

class  CarDemo
{
    public static void main(String[] args) 
    {

        Car c = new Car();/
        c.num = 4;
        c.run();
}

运行结果是 10
怎么分析程序:
c.run(); 执行run方法,run()方法在栈中,栈里面有值,10,那么就输出10,如果栈里面没有值,再去堆里面找。

2 基本数据类型参数传递

class Demo 
{
    public static void main(String[] args) 
    {

        int x = 3;
        show(x); // 运行完出栈,离开内存,被释放了
        System.out.println("x="+x);
    }
    public static void show(int x)
    {
        x = 4;
        // return;  // 有个默认的 return 
    }
}

分析:输出结果 x=3;
执行过程:虚拟机先执行主函数,在栈中,x=3;
接着执行 show(x); show()进栈,show()函数里有自己的x; 主函数的x,赋值给了show()方法的x, 虽然都叫x,但是属于不同的区间, 一开始 x=3,show()方法执行代码。代码里给x赋值,赋值完后,x=4;
执行完后,show()方法结束了,出栈。

3 引用数据类型参数传递

class Demo
{
    int x = 3;
    public static void main(String[] args)
    {
        Demo d = new Demo();
        d.x = 9;
        show(d);
        System.out.println(d.x);
    }
    public static void show(Demo d)
    {
        d.x = 4;
    }
}

这个函数,是在类里面,写入了主方法,写成下面的形式,更规范,更好理解

class Demo{
    int x = 3;
    public static void show(Demo d)
    {
        d.x = 4;
    }
}

public static void main(String[] args)
    {
       // 在堆里新建一个Demo对象,对象属性x默认为0,在 int x=3后,x被初始化为3
        Demo d = new Demo();
        // x变为9
        d.x = 9;
        /*
        执行 show(d),在执行 show()方法的时候,传参,d变为9,在show()方法内,d变为4,show(d)方法执行完,出栈
        */
        show(d);  //show()执行完出栈
        // 打印d,d是在堆中,属性是成员变量,现在d的属性 x 值为4,所以输出结果为4
        System.out.println(d.x);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值