成员变量和局部变量

元气小坏坏 提交于 2020-03-25 14:40:48

3 月,跳不动了?>>>

成员变量(存在于堆内存中,和类一起创建)和局部变量(存在于栈内存中,当方法执行完成,让出内存,让其他方法来使用内存)。

区别

1、在类中的位置不同

成员变量:在类中方法外面

局部变量:在方法或者代码块中,或者方法的声明上(即在参数列表中)

2、在内存中的位置不同,可以看看Java程序内存的简单分析

成员变量:在堆中(方法区中的静态区)

局部变量:在栈中

3、生命周期不同

成员变量:随着对象的创建而存在,随着对象的消失而消失

局部变量:随着方法的调用或者代码块的执行而存在,随着方法的调用完毕或者代码块的执行完毕而消失

4、初始值

成员变量:有默认初始值,java会给她一个初始值:基本数据类型是0,应用数据类型是null

局部变量:没有默认初始值,使用之前需要赋值,否则编译器会报错(The local variable xxx may not have been initialized)

局部变量的优先级高于成员变量

public class myTest3 {
    String name = "成员变量";
    public static void main(String[] args) {
        new myTest3().show();
    }
    public void show() {
        //局部变量优先级比成员变量高
        String name = "局部变量";
        System.out.println(name);
    }
}

我们看到输出的是show方法中定义的name变量,在使用变量时遵循的原则是就近原则,那么如何访问到成员变量name呢,Java中提供了this(表示调用对象本身)这个关键字用于访问成员变量。

public class myTest3 {
    String name = "成员变量";
    public static void main(String[] args) {
        new myTest3().show();
    }
    public void show() {
        //局部变量优先级比成员变量高
        String name = "局部变量";
        System.out.println(this.name);
    }
}

final int a 和static final int a 的区别

final的值是不能改变的
static是全局变量,只能有一个
static final int a的意思就是不管你new多少次只有一个a变量且是不可改变的

用static修饰的属性在类加载的时候就加载,是类的属性,也就是说直接可以用类名.a访问,不需要实例化,而不加static的是实例化后对象的属性,是对象.a才能访问

public class myTest3 {
    //初始值全局变量为13,且不可改变
    static final int age= 13;
    public static void main(String[] args) {
        new myTest3().show();
        System.out.println(myTest3.age);
    }
    public void show() {
        //局部变量优先级比成员变量高
        int age = 19;
        System.out.println(age);
    }
}

static 的用法优势

静态方法中不能使用this和super关键字

static是静态的意思,被static修饰的变量,在内存中只有一份,被所有对象共享,static修饰额方法叫静态方法,从属于类,

可以通过类调用,也可以通过对象调用,方法中不能访问非静态变量和方法

1.static是一个修饰符,用于修饰成员。(成员变量,成员函数)static修饰的成员变量称之为静态变量或类变量。

2.static修饰的成员被所有的对象共享。   

3.static优先于对象存在,因为static的成员随着类的加载就已经存在。   

4.static修饰的成员多了一种调用方式,可以直接被类名所调用,(类名.静态成员),通常用于工具类 

5.static修饰的数据是共享数据,对象中的存储的是特有的数据。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!