zoukankan      html  css  js  c++  java
  • Java成员变量与局部变量同名

    看到成员变量和局部变量同名这个知识点的时候一开始有点懵逼,想了一下其实特别简单。

    先来看一个简单的代码。

    首先我定义了一个Person类。

    public class Person {
        private int age=1000;//定义成员变量,年龄为1000
    
        public void setAge(int age) {
            age=age;
            System.out.println("方法内的年龄"+age);
        }
        public void sayHello() {
            System.out.println("我的年龄是"+age+".");
        }
    }

    然后在主函数里面创建对象并输出。

    Person p=new Person();
    p.setAge(20);
    p.sayHello();

    输出结果是什么?并不是我们想象的我的年龄是20,而是下面这样:

    //方法内的年龄20
    //我的年龄是1000.

    想一下其实就很容易理解。

    一句话,如果不同名,那么方法内的变量名代表成员变量;如果同名,那么方法内的变量名就只表示局部变量了,和成员变量一毛钱关系都没有了。

    所以,首先当我们创建了一个Person对象p,在创建对象的时候就已经完成了成员变量的初始化了。成员变量age的初始值是1000。

    当我们p.setAge(20)的时候,其实这个20只在setAge这个方法内起作用,所以输出了方法内年龄20,执行完这句话后,20就被销毁了。

    然后执行sayHello,它里面的age代表的是成员变量的值,所以依旧是1000。

    到这里如果还是不能理解,可以自己写代码看输出结果体会下。

    那么,当同名的时候,我们就是要让这个变量名表示成员变量,有没有办法呢?

    那就要说到this关键字了。我们把Person类改成这样:

    public class Person {
        private int age=1000;
    
        public void setAge(int age) {
            this.age=age;
            System.out.println("方法内的年龄"+age);
        }
        public void sayHello() {
            System.out.println("我的年龄是"+age+".");
        }
    }

    再运行代码,发现代码运行结果变成了下面这样:

    //方法内的年龄20
    //我的年龄是20.

    this表示的是当前对象。

    this.age在这里具体表示p对象的age(即p对象的成员变量age)的值是20。

    不能理解的话就多写写代码就能理解了。

  • 相关阅读:
    C# 依据鼠标坐标取网页内成员坐标.ie
    C# WebBrowser获取指定字符串的坐标
    C#获取网页中某个元素的位置,并模拟点击
    qq空间认证教程:借助企鹅媒体平台认证QQ公众空间
    QQ空间认证之数据篇
    QQ空间运营 怎么做一个QQ人气号?
    QQ空间|qq人气号怎么赚钱?
    QQ好友的价值玩法 及如何搞到几万好友?
    新媒体运营之如何月涨十万粉
    社群经济:如何利用社群做营销?
  • 原文地址:https://www.cnblogs.com/chenyangsocool/p/5673639.html
Copyright © 2011-2022 走看看