java中成员变量与局部变量的区别

成员变量与局部变量的区别

1、在类中的位置不同

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

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

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

接下来我们再通过一段程序来直观感受下程序运行时JVM的内存情况,

package demo;

public class Student {
    private String name;
    private int age;

    public void study() {
        System.out.println("I love study!");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

---------------------------------------------------------------

package demo;

public class StudentDemo {
    public static void main(String[] args) {
        Student student = new Student();

        System.out.println(student.getName() + ":" + student.getAge());
        student.setName("John");
        student.setAge(23);
        System.out.println(student.getName() + ":" + student.getAge());
       
        student.study();
       
        Student student2 = student;
        student2.setName("Jack");
        student2.setAge(25);
        System.out.println(student2.getName() + ":" + student2.getAge());
        System.out.println(student.getName() + ":" + student.getAge());
    }
}

代码执行结果如下:

null:0
John:23
I love study!
Jack:25
Jack:25

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

局部变量:在栈中

3、生命周期不同

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

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

4、初始值

成员变量:有默认初始值

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

 1 package demo;
 2
 3 public class VariableDemo {
 4     String name = "成员变量";
 5
 6     public static void main(String[] args) {
 7         new VariableDemo().show();
 8     }
 9
10     public void show() {
11         String name = "局部变量";
12         System.out.println(name);
13     }
14 }
输出结果:局部变量

我们看到输出的是show方法中定义的name变量,在使用变量时遵循的原则是

就近原则

,那么如何访问到成员变量name呢,Java中提供了this(表示调用对象本身)这个关键字用于访问成员变量。

 1 package demo;
 2
 3 public class VariableDemo {
 4     String name = "成员变量";
 5
 6     public static void main(String[] args) {
 7         new VariableDemo().show();
 8     }
 9
10     public void show() {
11         String name = "局部变量";
12         System.out.println(this.name);
13     }
14 }
输出结果:成员变量

时间: 2024-09-11 12:10:54

java中成员变量与局部变量的区别的相关文章

java中成员变量与局部变量区别分析_java

本文实例分析了java中成员变量与局部变量区别.分享给大家供大家参考.具体分析如下: 成员变量:在这个类里定义的私有变量,属于这个类. 创建以及使用成员变量 复制代码 代码如下: public class Person {     String name;     String Sex;     int age;     double Height;         public static void main(String arges[])     {         Person p=ne

浅谈静态变量、成员变量、局部变量三者的区别_java

静态变量和成员变量的区别: A:所属不同  静态变量:属于类,类变量    成员变量:属于对象,对象变量,实例变量 B:内存位置不同  静态变量:方法区的静态区    成员变量:堆内存 C:生命周期不同  静态变量:静态变量是随着类的加载而加载,随着类的消失而消失    成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失 D:调用不同  静态变量:可以通过对象名调用,也可以通过类名调用    成员变量:只能通过对象名调用 成员变量和局部变量的区别: A:在类中的位置不同  成员变量:

如何区分成员变量和局部变量

问题描述 如何区分成员变量和局部变量 一直分不清成员变量和局部变量?????????????????????????????????????????????????????????????????????? 解决方案 成员变量定义在类里面,函数外面,局部变量定义在函数里面. 一般的开发环境(VS VC++ Eclipse等)你要区分,可以光标选择变量,右键,点转到定义,然后看在哪里定义的. 解决方案二: 成员变量:又叫类变量,全局变量,定义在类里面 局部变量:定义在方法里面,OnCreate()

java中的变量的作用域问题

问题描述 java中的变量的作用域问题 新人初学java,在变量的作用域这里卡了下 我知道全局变量和局部变量,但是如果我在main的开头就申明了一个变量,那这个变量应该是全局变量吧,下面所有的方法都可以调用这些变量,但是如果我在main函数中间申明了一个变量,那这个变量算什么?还算是全局变量吗?是不是只有后面的方法才能使用它,而在他之前的就不能用? 还有一个问题: File tmp; while(!list.isempty()){ tmp = (File)list.removeFirst ...

cocos2d x-cocos2d-x中的成员变量与局部变量的选用

问题描述 cocos2d-x中的成员变量与局部变量的选用 当类中一个方法需要调用另外一个方法(比如init方法)中的CCObject(比如CCSprite)变量是为什么大都选用getChildByTag的方法来调用,而不是直接把这个变量定义为类的成员? 例: 常用的方法 class A { void init(); void func(); } void A::init() { CCSprite * spr = CCSprite::create("picture.png"); ...

JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例

JAVA之旅(八)--多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例 学习是不能停止的 一.多态 我们今天又要学习一个新的概念了,就是多态,它是面向对象的第三个特征,何谓多态? 定义 某一类事物的多种存在方式 比如 动物中的猫狗,人类中的男人,女人 我们可以把多态理解为事物存在的多种体现形态 当我们new一个猫类的时候,和new 一个动物,其实是一样的,多种形态变现 所以我们可以分这几部分分析 多态的体现 多态的前提 3.多态的好处 4.多态的应用 我

java中static变量和static方法以及普通方法在那个内存中存储呢? 请高手指点,谢谢

问题描述 java中static变量和static方法以及普通方法在那个内存中存储呢? 请高手指点,谢谢 栈内存:局部变量和对象的引用变量: 堆内存:对象: 以上是我所知道的,那么static变量和static方法以及普通方法在那个内存中存储呢? 请高手指点,谢谢 解决方案 static和普通方法都存在堆内存中,堆内存有个永久区permgen,这里面会存类信息. 所以不断的加载类或jar包可能出现permgen oome的错误. static是在堆内存的数据区. 解决方案二: java stat

java中关于变量的作用域的问题

问题描述 java中关于变量的作用域的问题 在java中局部变量,实例变量,类变量的作用域都分别是什么呢? 解决方案 在java中: 局部变量:一般指的就是方法内部的变量,它的作用域范围就是定义方法体内部,也就是两个花括号之间,出了这个范围就访问不到了.实例变量实例变量也叫_非静态成员变量_,它的作用范围是在当前类创建的实例对象范围,如果当前实例对象被销毁,它也将随之消失,各个实例对象之间互不影响.类变量类变量也叫_静态成员变量_,顾名思义类变量,它就是跟当前类有关系的,它是属于当前类的.cla

java中int和Integer有什么区别,哪个在公司中比较常用?

问题描述 java中int和Integer有什么区别,哪个在公司中比较常用? java中int和Integer有什么区别,什么时候用int,什么时候用后者,哪个在公司中比较常用? 解决方案 int 是基本数据类型(面向过程留下的痕迹,不过是对Java的有益补充) Integer 是一个类,是int的扩展,定义了很多的转换方法 类似的还有:float Float.double Double.string String等 . 举个例子:当需要往ArrayList,HashMap中放东西时,像int,