初识面向对象(成员变量和局部变量)

概述

面向对象,就是先把具有相同特征和功能的一类事物,抽出相同特性写成一个抽象的类,再创建这个类类型的对象,每个对象就是一个个体,拥有之前类中定义的属性和方法,不同的对象相同属性的值可以不同。

面向对象比较强调把一些功能封装到一个对象里,让这个对象去完成相应功能,但具体如何完成的细节不用去管。

比如,一辆黑色汽车跟一辆白色汽车,都是两个个体,但它们都是汽车,都有颜色这个属性,只是颜色不同而已。然后黑车跟白车都有“到加油站去加油”这个行为即方法, 需要加油时,调用 “黑车.去加油” 就好了,具体走哪条路去的加油站这个就不用管了,忽略了细节。

我们可以定义一个类,这个类封装了所有汽车的共同属性和行为,然后再创建一个这个类的实例,即对象

代码分析

class Car {      //定义一个类,这个类封装了汽车这类事物的共性。
    String color;
    int num;
    color = "red";
    num = 4;
    void show() {
        System.out.print(color+" "+num);
    }
}
//创建一个Car对象,这个对象是上面那个类的个体。
class Demo {          
    public static void main(String[] args) {
        Car c = new Car();  //创建一个Car类型的对象,存储在堆内存
        c.color = "black";  //把这个对象的color属性修改为“black”
        c.show;  //使用这个对象的show()函数,函数中封装功能
    }
}

内存图解


内存分析

(1)创建对象时,先在堆内存中给对象分配一个内存空间,假如这个空间地址为0x0034。

(2)在这个空间中,创建一个对象,并定义两个成员变量,为 color 和 num (成员变量随着对象的建立而建立,存在于堆内存中,且有默认初始化值),color 初始化为 "red" ,num 初始化为 4。

(3)在栈内存中分配一个内存空间给局部变量 c,并把对象的内存地址赋给变量c,即把 0x0034 赋给 c。变量 c 即通过这个内存地址,指向了堆内存中的对象。

(4)c.color = "black";  即通过c指向堆内存中的对象,把对象的 color 变量改为"black"。

(5)c.show();  调用对象的 show() 方法。

匿名对象

匿名对象是对象的简化形式,匿名对象的两种使用情况:

(1)当对对象的方法仅进行一次调用时。

(2)匿名对象可作为函数的实际参数进行传递。

第一种情况:

new Car().num = 5;        //第一种情况,对对象仅进行一次调用。
new Car().color = "black";//实际是创建了两个对象
第二种情况:

class Test{} {
    public static void main(String[] args) {
        turn(new Car());   //turn()函数调用了Car类型对象,当调用完毕时,此对象不被调用则成为垃圾。
    }
    public static void turn(Car c) {
        c.num = 3;
        c.color = "black";
    }
}

成员变量:

(1)成员变量定义在类中,在整个类中都可以被访问。

(2)成员变量随着对象的建立而建立,存在于对象所在的堆内存中。

(3)成员变量有默认初始化值。

局部变量:

(1)局部变量只定义在局部范围内,如:函数内、语句内。

(2)局部变量存在于栈内存中,且作用的范围结束,变量空间会自动释放。

(3)局部变量没有默认初始化值。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值