java中成员方法是如何切换访问上下文的

java中,实例化一个类,并进行操作,其中有些细节模糊不清。

实例化一个类,包括2部分
声明1个对象变量,如VendingMachine vm; 它将在栈内存中声明一个变量vm,初始值为null
创建1个对象,如 vm = new VendingMachine(); 在堆内存中开辟一个内存空间,并赋值给对象变量,即vm指向了那个new出来的内存空间的首地址。

new出来的内存空间,包含了各自独立的成员变量。
通过vm.method()对成员变量进行访问
那么成员方法如何知道对那个对象的成员变量进行访问?即切换访问的上下文。
首先成员方法是所有对象公共的,每个成员方法中有一个特殊的变量this,它并不显示可见,也不为用户所定义,this用来接收对象变量的值,从而建立了方法和变量的联系,即方法知道对那些变量进行加工。并且可以传入的对象变量不同,而进行切换。

对不同的对象而言,方法是公共的,而成员变量是独立的,方法通过this接收传入的对象,实现对特定对象的访问。

public class VendingMachine {
    int price = 80;

    int total;

    void setPrice(int price) {
        this.price = price;
    }

    void showPrompt() {
        System.out.println("Welcome");
    }

    void showBalance() {
        System.out.println(balance);
//        return balance;
    }

    void insertMoney(int amount) {
        balance += amount;
    }

    void getFood() {
        if (balance >= price) {
            System.out.println("Here you are");
            balance -= price;
            total += price;
        } else {
            System.out.println("not enough money!");
        }
    }

    int balance; //注,成员变量balance定义在成员方法引用之后,仍然可以被访问到。


    public static void main(String[] args) {
        VendingMachine vm = new VendingMachine();
        vm.showPrompt();
        vm.showBalance();
        vm.insertMoney(100);
        vm.getFood();
        vm.showBalance();
//        showBalance();
        VendingMachine vm1 = new VendingMachine();
        vm1.insertMoney(200);
        vm.showBalance();
        vm1.showBalance();

    }


}

参考上面的例子,实例化2个对象vm,vm1,可见他们各自有自己的成员变量。

在这里插入图片描述
调用方法时,this根据传入的对象变量切换到不同的对象上下文,如下,这是vm调用的截图,标记@483
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201128120417148.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTQ2MjY4MQ==,size_16,color_FFFFFF,t_70#pic_ce
nter)

这是vm1调用方法的截图,@482,可见this已经切换到vm1,可以对vm1指向的编码进行操作了。

在这里插入图片描述

所以在java中通过this实现访问上下文的切换。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值