一、变量的声明
变量是程序中最重要的内容之一,在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ǒ动 阅读(811)
评论(2) 编辑 收藏