先看下面兩段程序:

程序一:
public class Variable
{
int i;
void test()
{
   int j=8;
   if(j==i)
    System.out.println("相等");
   else
    System.out.println("不相等");
}
public static void main(String[] args)
{
   Variable v=new Variable();
   v.test();
}
}

程序二:
public class Variable
{
   void test()
{
   int i;
   int j=8;
   if(j==i)
    System.out.println("相等");
   else
    System.out.println("不相等");
}
public static void main(String[] args)
{
   Variable v=new Variable();
   v.test();
}
}

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

第一個程序很正常,編譯時不會出錯。第二個程序編譯時會提示如下錯誤:

D:\Program\java\test>javac Variable.java
Variable.java:9: 可能尚未初始化變量 i
                if(j==i)
                      ^
1 錯誤

之所以會出現這樣的錯誤是因為:成員變量有默認值,(被final修飾且沒有static的必須顯式賦值),局部變量不會自動賦值

===========================================================

類體分為兩部分。變量定義部分所定義的變量被稱為類的成員變量,在方法體中定義的變量和方法的參數都被稱為局部變量

java中成員變量和局部變量的區別

1.成員變量可以被public,protect,private,static等修飾符修飾,而局部變量不能被控制修飾符及static修飾;兩者都可以定義成final型
2.成員變量存儲在堆,局部變量存儲在棧
3.存在時間不同
4.成員變量有默認值,(被final修飾且沒有static的必須顯式賦值),局部變量不會自動賦值
-------------------------------------------------------------------------------------------------------------
顧名思意了
什么是局部,方法內部,塊內部都是局部,執行指令退出那個局部,局部變量自動清除

比如方法中,不用說
塊中
{
  int i=0; //這是一個局部變量,它的作用范圍就在其中 
}

成員變量就會涉及到誰的成員,類的成員?實例的成員?

class A{
int i=0; //實例的成員
static j=1;//類的成員
}

static 的差別,是否依賴于實例而存在
----------------------------------------------------------------------------------------------------------

成員變量:作為類的成員而存在,直接存在于類中。

局部變量:作為方法或語句塊的成員而存在,存在于方法的參數列表和方法定義中。

局部變量在使用前必須被程序員主動的初始化,和此形成對比,系統中的成員變量則會被系統提供一個默認的初始值。所以在語法上,類的成員變量能夠定義后直接使用,而局部變量在定義后先要賦初值,然后才能使用。

 

所有類的成員變量可以通過this來引用。成員變量又分成倆中類型:實例變量和靜態變量。靜態變量在定義時要使用

static關鍵字。

package com;

public class MemberVariable {
 int v_int;
 float v_float;
 boolean v_boolean;
 String v_string;
 byte v_byte;
 short v_short;
 char v_char;
 long v_long;
 
 public static void main(String[] args)
 {
  MemberVariable mv = new MemberVariable();
  System.out.println("int的默認值:"+mv.v_int);
  System.out.println("float的默認值:"+mv.v_float);
  System.out.println("boolean的默認值:"+mv.v_boolean);
  System.out.println("string的默認值:"+mv.v_byte);
  System.out.println("short的默認值:"+mv.v_short);
  System.out.println("char的默認值:"+mv.v_char);
  System.out.println("long的默認值:"+mv.v_long);
 }
}
int的默認值:0
float的默認值:0.0
boolean的默認值:false
string的默認值:0
short的默認值:0
char的默認值: