JAVA面向对象 -成员变量与局部变量

大家好,这里是白子茶,这节我们来讲解,成员变量和局部变量。

首先,变量有多少种,如何区分?

我们可以从两个角度来理解变量的分类:

角度1:按照数据类型来分:基本数据类型、引用数据类型。

角度2:按照变量在类中声明的位置的不同:成员变量(或属性、域)、局部变量。

              其中,局部变量一般声明在方法内、构造器内、方法形参、构造器形参、代码块内等。

成员变量声明在方法体外,类体内。

局部变量声明在方法体内。

举个例子:

public class Person {
    String name;
    int age;
    char gender;
    public void eat(){
        String food = "宫保鸡丁";
        System.out.println("我喜欢吃" + food);
    }
    public void sleep(int hour){
        System.out.println("人不能少于" + hour + "小时的睡眠");
        System.out.println("name = " + name);
    }
}

你能分清哪些是成员变量,哪些是局部变量吗?

其中,name\age\gender是成员变量。

food\hour皆为局部变量。

如何区分的呢?

按照本文开头所说的,方法体内为局部变量,方法体外类体内为成员变量。

所以,其中name、age、gender不在方法之内但是在类体内,所以是成员变量。

food、hour在方法体内,所以是局部变量。

如何彻彻底底的区分成员变量给和局部变量呢?

接下来,就是重头戏了。

首先谈相同点。

相同点:

1.变量声明的格式相同:数据类型 变量名 = 变量值

2.变量都有有效的作用域,出了作用域就会失效。

3.变量都必须先声明、后赋值、再使用。

不同点:

①首先是声明的位置不同:

成员变量:声明在类内,方法之外的变量。

局部变量:声明在方法内的变量。

②在内存中分配的位置不同:

成员变量:随着对象的创建,存放在堆空间里面。

局部变量:存放在栈空间里面。        

③生命周期:

成员变量:随着对象的创建而创建,随着对象的消亡而消亡。

局部变量:随着方法对应的栈入栈,局部变量会在栈中分配;随着方法对应的栈帧出栈,局部变量消亡。

④作用域:

成员变量:整个类的内部中都是有效的。

局部变量:仅限于声明此局部变量的方法(或构造器、代码块)内。

⑤是否有权限修饰符的修饰:

成员变量:可以。

局部变量:不可。

⑥默认值:

成员变量:有默认值。

局部变量:没有默认值,使用之前,必须赋值,否则报错。

                注意:对于方法的形参而言,调用此方法时,赋值即可。

最后呢,我们来一道测试题。

public class Employee {
    int id;
    String name;
    int age;
    double salary;
}

我们呢,先声明了Employee类,并且声明了属性(成员变量)。

public class EmployeeTest {
    public static void main(String[] args) {
        Employee p1 = new Employee();
        Employee p2 = new Employee();
        System.out.println(p1);
    }
}

我们此时声明了测试类,并且创建了两个对象,但是我们并未赋值。

此时,我们打印P1,会发生什么呢?

xxx.Employee@b4c966a

是一个地址值!对的,我们p1指向了堆空间,我们打印就是地址值,如果我们写p1.age,会发生什么呢?默认值?YES!

public class EmployeeTest {
    public static void main(String[] args) {
        Employee p1 = new Employee();
        Employee p2 = new Employee();
        p1.name = "TOM";
        p1.age = 24;
        p1.id = 1;
        p1.salary = 6000;
        System.out.println("name = " + p1.name + ", age = " + p1.age + ", id = " + p1.id
        + ", salary = " + p1.salary);
    }
}

随后我们进行赋值,就打印出了员工的正常信息。

name = TOM, age = 24, id = 1, salary = 6000.0

至于p2,就由读者们自己赋值去打印吧!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值