面试题:java实例变量,局部变量,类变量 背1

一、实例变量

也叫对象变量、类成员变量;从属于类由类生成对象时,才分配存储空间,各对象间的实例变量互不干扰,能通过对象的引用来访问实例变量。但在Java多线程中,实例变量是多个线程共享资源,要注意同步访问时可能出现的问题。

[java] view plain copy
 
  1. <span style="font-size:14px;">public class Demo {  
  2.     //以下都是实例变量(成员变量、对象变量)  
  3.     private String nameString;  
  4.     public int age;  
  5.     protected int priority;  
  6.     //实例方法  
  7.     public String getNameString(){  
  8.         return this.nameString;  
  9.     }  
  10. }</span>  

二、类变量

也叫静态变量,是一种比较特殊的实例变量,用static关键字修饰;一个类的静态变量,所有由这类生成的对象都共用这个类变量,类装载时就分配存储空间。一个对象修改了变量,则所以对象中这个变量的值都会发生改变。

[java] view plain copy
 
  1. <span style="font-size:14px;">public class Demo {  
  2.     //类变量(静态变量)  
  3.     public static int a = 0;  
  4.     //实例变量  
  5.     private String nameString;  
  6. }</span>  

三、局部变量

方法中或者某局部块中声明定义的变量或方法的参数被称为局部变量,他们只存在于创建他们的block里({}之间)无法在block外进行任何操作,如读取、赋值。在Java多线程中,每个线程都复制一份局部变量,可防止某些同步问题发生。

[java] view plain copy
 
  1. <span style="font-size:14px;">    //类变量(静态变量)  
  2.     public static int a = 0;  
  3.     //实例变量  
  4.     private String nameString;  
  5.       
  6.     public void test(){  
  7.         //局部变量  
  8.         int temp = 1;  
  9.         System.out.println(temp);  
  10.     }</span>  


四、他们的区别

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

成员变量属于类  局部变量属于方法

成员变量 定义在方法外, 局部变量定义在方法内.

成员变量存在内存的堆中,  局部变量存在栈中

成员变量默认有初始化值.  局部变脸需要手动初始化.

       成员变量:

          ①成员变量定义在类中,在整个类中都可以被访问。

          ②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。

          ③成员变量有默认初始化值。

      局部变量:

          ①局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。

          ②局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。

          ③局部变量没有默认初始化值 

      在使用变量时需要遵循的原则为:就近原则

      首先在局部范围找,有就使用;接着在成员位置找

成员变量和静态变量的区别

成员变量存在内存堆中, 静态变量存在内存的方法区中

成员变量随对象初始化.   静态变量随类加载初始化

成员变量对象调用. 静态变量类调用.

      1、两个变量的生命周期不同

            成员变量随着对象的创建而存在,随着对象被回收而释放。

            静态变量随着类的加载而存在,随着类的消失而消失。

      2、调用方式不同

            成员变量只能被对象调用。

            静态变量可以被对象调用,还可以被类名调用。

      3、别名不同

            成员变量也称为实例变量。

            静态变量也称为类变量。

      4、数据存储位置不同

            成员变量存储在堆内存的对象中,所以也叫对象的特有数据。

            静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

原文地址:https://www.cnblogs.com/shan1393/p/8994392.html