一、變量的聲明
變量是程序中最重要的內容之一,在Java中聲明的任何一個變量必須分配一個類型,聲明一個變量時,應該先寫上所聲明變量的類型,隨后再寫上變量的名字,而且名字的后面要加上一個西文狀態下的“;”。
這個分號是必須寫的,這是Java語句結束符號。
變量命名的規則重點強調以下幾點:
1)變量名中不能有空格;
2)變量名大小寫很重要;
3)變量名是不限長度的;
4)保留字及關鍵字不能作變量名。
同一類型的不同變量,可以聲明在一行,也可以聲明在不同的行。如果聲明在同一行,不同的變量之間要用逗號分隔。
二、變量的含義
所謂變量就是“在變量的有效作用范圍內,向物理內存申請的一段內存空間,在程序運行過程中,空間內的值是變化的“。為了程序操作的方便,我們對內存空間起了個名字,這個名字就是變量名,內存空間內的值就是變量值。由此我們可以得出這樣一個結論:申請了內存空間,并不意味著空間內就要有值,要想使空間內有值,必須要放入值。例如:我們聲明某個變量,可以這么來表示:“int a;”,其中a就是變量名,但現在沒有相應的值,也就是說在內存空間內沒有值,如果令“int a = 3;”,現在我們不但申請了內存空間,并且把3放入了內存空間,a是變量名,3是變量值。
三、變量的分類
根據不同的分類方法,變量有不同的名稱。
1)根據作用范圍 根據作用范圍,變量可分為
全局變量,
局部變量。
全局變量:是在類的整個范圍內,都起作用的變量。它的影響范圍也是在整個類之內,在類的任何位置都可以對該變量進行操作。例如:
/*測試全局變量的操作*/
public class GlobalVar
{
int a = 10;
double b = 20;
public static void main(String[] args)
{
GlobalVar globalVar = new GlobalVar();
System.out.println("the value a = " + globalVar.a);
globalVar.print();
System.out.println("after changed the value a = " + globalVar.a)
}
public void print()
{
System.out.println("the global variable a = " + a + ",b = " + b);
a = 30;
System.out.println("the global variable a = " + a + ",b = " + b);
}
}
輸出結果:
before changed value a = 10
the global variable a = 10 ,b = 20.0
the globa variable a = 30 ,b = 20.0
after changed the value a =30
分析:
a與b是在print方法外面定義的,但可以在方法內部訪問到并對a的值進行了修改,在main方法內部我們也可以訪問到a的值。
所謂全局變量就是在程序運行的全過程中,由程序自動向內存申請的內存空間,空間的內容可以在程序全過程中進行操縱或修改。
局部變量:局部變量是針對于全局變量的,在程序運行的局部過程中,由程序自動向內存申請的內存空間,空間的內容在程序的局部范圍內可以被操縱或修改。例如:
/*測試局部變量的操作*/
public class LocalVar
{
public static void main(String[] args)
{
LocalVar localVar = new LocalVar();
localVar.print();
}
public void print()
{
int a = 10;
double b = 20;
System.out,println("the local variable a = " + a + ",b = " + b);
a = 30;
System.out.println("the local variable a = " + a + ",b = " + b);
}
}
輸出結果:
the local variable a = 10,b = 20.0
the local variable a = 30,b = 20.0
分析:
局部變量只能在它的定義范圍內才能被操作。這是很重要的,在寫程序時一定要清楚知道自己所定義的變量的訪問范圍是多大,不要試圖在范圍以外訪問變量。
2)按照類型分 按照類型分,可以將變量分為基本類型變量和對象類型變量。
所謂基本類型變量,就是指我們前面講述的八種基本類型,除了基本類型變量以外的其它變量,都看成是對象變量。對象類型變量又可稱為實例變量。
3)按照所屬范圍分
按照所屬范圍分,可以將變量分為類變量、成員變量。
所謂類變量,就是用關鍵字static聲明的全局變量,它是屬于類本身的,不代表任何對象的狀態。
所謂成員變量,就是與類變量相對的,沒有用static聲明的其它的實例變量,它是與具體對象相關的,保持對象的狀態。
四、變量的引用
在java中變量的引用主要有兩種方式:傳值引用與值址引用。
1、內存的分配
java中變量主要保存在六個地方:
1)寄存器
對于java來講,這是最快的保存區域。位于計算機CPU的內部,因為寄存器的數量十分有限,所以寄存器是很據需要由編譯器自主分配的,寄存器沒有任何控制權,在程序中也找不到任何寄存器的操作蹤跡。
2)棧
它是僅次于寄存器的保存區域,又被稱為隨機訪問存儲區域。它是通過棧指針來進行操作的,基本類型的變量就是放在這里。但這并不是惟一放到這里的內容,還要有一個概念,那就是對象句柄,對象句柄也是放在這里的。
3)堆 這是一種常規用途的內存池,也就是RAM區域。在Java中我們的任務基本上都是在堆中進行,一直所說的對象就位于堆中。
4)靜態存儲
這里所說的靜態是的“位于固定位置”。程序在運行期間,靜態的數據將隨時等候調用,它也是位于RAM中。在Java中可用static關鍵字指出一個對象的特定元素是靜態的,但Java對象本身永遠不可能置于靜態存儲空間。
5)常量存儲
常最存儲通常直接寫在程序代碼中,在Java中我們通常是用final來聲明的,這樣做的目的可以保證它們的值永遠不被改變。
6)非RAM存儲 這主要是針對程序外部的資源而言的。也就是說數據完全獨立于程序之外,程序不運行時仍然可以存在,并在程序的控制范圍之外。
2、傳值引用
傳值引用:主要是針對基本類型而言。所謂傳值引用就是在進行變量的傳遞過程中,傳遞變量實際的值,是一個新的拷貝,一個變量值的改變不會影響另一個變量的改變。例如:
/*傳值引用的實質*/
public class ValueReference
{
int a = 10;
public static void main(String[] args)
{
ValueReference aValue = new ValueReference();
aValue.print();
}
public void print()
{
int b = a; //我們將a的值傳給了b
System.out.println("before changed value a = " + a + ",b = " + b);
a = 30; //現在將a的值改變,按照傳值引用的理論,b的值應該是a的原來的值
System.out.println("after changed value a = " + a + ",b = " + b);
}
}
輸出結果:
before changed value a = 10, b = 10
after changed value a = 30 , b = 10
分析:
變量a的值傳給了變量b,變量a值的改變并沒有影響到變量b的值。這就是傳值引用的實質,傳遞過去的是值的一個拷貝。
3、傳址引用
傳址引用:主要是針對對象操作的。也就是形成了多個變量操縱一個對象的狀態,這種現象的結果就是任何一個對于句柄操作的變量,都會影響到其它的變量。例如:
/*傳址引用的實質*/
public class Student
{
String strName;
public static void main(String[] args)
{
Student aStudent = new Student();
//得到對象Student類的一個句柄aStudent
aStudent.setStudentName("張楠");
System.out.println("aStudent name is " + aStudent.getStudentName());
Student bStudent = aStudent; //將aStudent句柄復制給nextStudent
bStudent.setStudentName("唐僧");
System.out.println("bStudent name is " + bStudent.getStudentName());
String name = aStudent.getStudentName();
//再看一下句柄aStudent的內容是否改變
System.out.println("after bStudent the aStudent name is" + name);
}
public String getStudentName()
{
return strName;
}
public void setStudentName(String name)
{
strName = name;
}
}
輸出結果:
aStudent name is 張楠
bStudent name is 唐僧
after bStudent the aStudent name is 唐僧
分析:
對象傳遞是傳址引用。對于對象,它傳遞的是一個句柄的拷貝,不同的句柄操縱是一個對象,也稱按址傳遞。
posted on 2007-04-28 11:04
心隨Wǒ動 閱讀(818)
評論(2) 編輯 收藏