先看下面兩段程序:
程序一:
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的默認值: