java中的變量分為成員變量(又叫實例變量)、靜態變量和局部變量。
1.成員變量
1.1 成員變量(實例變量)是在類中定義的非static修飾的變量,可以不用賦初始值,不同的數據類型有默認的初始值。
package test; import org.junit.Test; public class VariableTest { byte bt; short s; int age; long l; float f; double d; char c; boolean flag; String name; @Test public void cvariable(){ VariableTest vt=new VariableTest(); System.out.println("byte類型的默認值為:"+vt.bt); System.out.println("short類型的默認值為:"+vt.s); System.out.println("int類型的默認值為:"+vt.age); System.out.println("long類型的默認值為:"+vt.l); System.out.println("float類型的默認值為:"+vt.f); System.out.println("double類型的默認值為:"+vt.d); //'\u0000'為空 if(c=='\u0000'){ System.out.println("char類型的默認值為'\u0000'"); } System.out.println("boolean類型的默認值為:"+vt.flag); System.out.println("String類型的默認值為:"+vt.name); } }
運行結果:
byte類型的默認值為:0 short類型的默認值為:0 int類型的默認值為:0 long類型的默認值為:0 float類型的默認值為:0.0 double類型的默認值為:0.0 char類型的默認值為'
1.2 實例變量只有初始化一個副本之后才可以使用,每當實例化一個對象,會在堆中創建一個副本並初始化,各個對象中對實例變量的修改互不影響。
package test;
import org.junit.Test;
public class VariableTest {
int age;
@Test
public void cvariable2(){
VariableTest vt1=new VariableTest();
vt1.age++;
System.out.println("vt1.age:"+vt1.age); //vt1.age:1
VariableTest vt2=new VariableTest();
vt2.age++;
System.out.println("vt2.age:"+vt2.age); //vt2.age:1
}
}
2.靜態變量
定義在類中被static修飾的變量,類加載時在方法區中分配存儲空間,被類所擁有,任意一個對象對其修改都會改變該變量的值。
package test; import org.junit.Test; public class VariableTest { static int num; @Test public void staticVariableTest(){ VariableTest vt1=new VariableTest(); vt1.num++; System.out.println(vt1.num); //1 VariableTest vt2=new VariableTest(); vt2.num++; System.out.println(vt2.num); //2 } }
3.局部變量
局部變量是指定義在方法體中的變量,變量定義后必須賦初始值。若為基本類型,值直接存儲在棧中,若為引用類型,其對象存儲在堆中,而把對象的引用存儲在棧中。
4.成員變量的作用域
成員變量的作用域:
- public:當前類,同一package的其他類,其他package的當前類的子類,其他package的類都可以訪問(4);
- private:只有當前類能訪問(1);
- protected:當前類,同一package的其他類,其他package的當前類的子類都可以訪問(3);
- default:只有當前類和其位於同一包內的類可以訪問(2);
這些修飾符只能修飾成員變量,不能修飾局部變量。(只有public,abstract,final能用來修飾類)。