Java中的成员变量、属性、局部变量和构造器之我见

相信初学Java面向对象的人一定会对成员变量、属性、局部变量和构造器之间的关系和使用搞得有些不知所措,因此此篇文章是总结了作者对此部分知识粗浅的理解。
要思考明白他们之间的关系,首先要理解局部变量这个概念,局部变量就是在方法定义中的变量,称之为局部变量.局部变量在方法创建的时候被创建。在方法调用结束后结束。
我们从一个例子来看这部分的知识:
假设我们在为一个漫画创造一个超级英雄角色,首先定义一个SuperHero类。一个超级英雄应该具备什么东西?一个名字,便于识别的外形特点,最重要的就是她的超能力。
因此我们为这个类定义三个成员变量先,还有一个空的构造器。

public class SuperHero {
    String heroName;
    String appearenceFeature;
    private String superPower;

    public SuperHero(){
        
    }
}

我们可以思考目前这三个变量是什么变量,显然,定义在类中且不在方法中的变量,应为成员变量。此时我们有一个问题,为什么一般成员变量的时候,需要在前面加上this.成员变量名。
原因其实很简单,这就牵扯到了成员变量和局部变量的区别。总所周知,构造器其实可以看做是一个特殊的方法,因此在构造器中定义的变量,应该为局部变量。因此我们写如下代码,默认SuperHero的名字为Batman,并且再在构造器中定义一个heroName同名变量,赋予一个新的值。

public class SuperHero {
    String heroName = "Batman";
    String appearenceFeature;
    private String superPower;

    public SuperHero(String name){
        String heroName = name;
        System.out.println(heroName); //out:Superman
        System.out.println(this.heroName); //out:Batman
    }

    public static void main(String[] args) {
        SuperHero sh = new SuperHero("Superman");

    }
}

由于变量使用时,有就近原则,遇到同名变量,首先使用的是构造器中的局部变量因此”局部的“heroName被赋值了Superman,但是可见的是成员变量中的heroName仍然为默认的Batman,因为此时构造器构造完成后,局部变量消失被收回,heroName的值并没有改变,为了防止这种逻辑错误,防止与成员变量的局部变量重名的影响,我们一般使用this的形式,对成员变量和局部变量做出一个区分。

还有一个常见误区是:成员变量就是属性
其实在查过一些资料之后,属性应该是满足
1.被private修饰的成员变量
2.此成员变量已经定义了get或者set方法。
至此我们分析结束

public class SuperHero {
    String heroName = "Batman"; //成员变量
    String appearenceFeature;  //成员变量
    private String superPower; //属性

    public SuperHero(String name){
        String heroName = name; //局部变量
        System.out.println(heroName); //out:Superman
        System.out.println(this.heroName); //out:Batman
    }

    public String getSuperPower() {
        return superPower;
    }

    public static void main(String[] args) {
        SuperHero sh = new SuperHero("Superman");

    }
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值