四、再谈变量-创新互联

1:实例变量和局部变量                                                             四、再谈变量

在方法外定义的变量主要是实例变量,它们是在使用 new Xxxx ()创建一个对象时被分

创新互联长期为近千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为共和企业提供专业的成都网站设计、网站建设、外贸网站建设共和网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。

配内存空间的。每当创建一个对象时,系统就为该类的所有实例变量分配存储空间;创建多

个对象就有多份实例变量。通过对象的引用就可以访问实例变量。

在方法内定义的变量或方法的参数被称为局部(local)变量,有时也被用为自动(automatic) 、临时(temporary)或栈(stack)变量。

   方法参数变量定义在一个方法调用中传送的自变量, 每次当方法被调用时, 一个新的变量就被创建并且一直存在到程序的运行跳离了该方法。 当执行进入一个方法遇到局部变量的声明语句时, 局部变量被创建, 当执行离开该方法时,局部变量被取消,也就是该方法结束时局部变量的生命周期也就结束了。 因而,局部变量有时也被引用为“临时或自动”变量。在成员方法内定义的变量对该成员变量是“局部的” ,因而,你可以在几个成员方法中使用相同的变量名而代表不同的变量。

该方法的应用如下所示:

public class Test {

private int i; // Test类的实例变量

public int firstMethod() {

int j = 1; // 局部变量

// 这里能够访问i和j

System.out.println("firstMethod 中 i="+i+",j="+j);

return 1;

} // firstMethod()方法结束

public int secondMethod(float f) { //method parameter

int j = 2; //局部变量,跟firstMethod()方法中的j是不同的

// 这个j的范围是限制在secondMethod()中的

// 在这个地方,可以同时访问i,j,f

System.out.println("secondMethod 中 i="+i+",j="+j+",f="+f);

return 2;

}

public static void main(String[] args) {

Test t = new Test();

t.firstMethod();

t.secondMethod(3);

}

}

2:变量初始化

在 Java 程序中,任何变量都必须经初始化后才能被使用。当一个对象被创建时,实例变量在分配内存空间时按程序员指定的初始化值赋值,否则系统将按下列默认值进行初始化:

byte 0

short 0

int 0

long 0L

float 0.0f

double 0.0d

char 'u0000'

boolean false

所有引用类型

null

注意── 一个具有空值“null”的引用不引用任何对象。试图使用它引用的对象将会引起一个异常。异常是出现在运行时的错误,这将在模块“异常”中讨论。

在方法外定义的变量被自动初始化。局部变量必须在使用之前做“手工”(由程序员进行)初始化。 如果编译器能够确认一个变量在初始化之前可能被使用的情形, 编译器将报错。

public class Test {

private int i; //Test类的实例变量

public void test1() {

int x = (int) (Math.random() * 100);

int y;

int z;

if (x > 50) {

y = 9;

}

z = y + x; // 将会引起错误,因为y可能还没有被初始化就使用了

}

public static void main(String[] args) {

Test t = new Test();

t.test1();

}

}

3:变量的范围(scope)

Java 变量的范围有四个级别:类级、对象实例级、方法级、块级

(1) :类级变量又称全局级变量,在对象产生之前就已经存在,就是后面会学到的 static

变量。

(2) :对象实例级,就是前面学到的属性变量。

(3) :方法级:就是在方法内部定义的变量,就是前面学到的局部变量。

(4) :块级:就是定义在一个块内部的变量,变量的生存周期就是这个块,出了这个块就消失了。

示例如下:

public class Test {

private static String name="Java私塾";//类级

private int i; // 对象实例级,Test类的实例变量

{//属性块,在类初始化属性时候运行

int j = 2;//块级

 }

public void test1() {

int j = 3;//方法级

if(j==3){

int k = 5;//块级

} //这里不能访问块级的变量,块级变量只能在块内部访问

System.out.println("name="+name+",i="+i+",j="+j);

}

public static void main(String[] args) {

Test t = new Test();

t.test1();

}

}

运行结果:

name=Java 私塾,i=0,j=3

3.1:访问说明

(1) :方法内部除了能访问方法级的变量,还可以访问类级和实例级的变量

(2) :块内部能够访问类级、实例级变量,如果块被包含在方法内部,它还可以访问方法级

的变量。

(3)变量当然是要在被访问前被定义和初始化,不能访问后面才定义的变量。


分享文章:四、再谈变量-创新互联
分享链接:http://azwzsj.com/article/dcodso.html