Java私塾跟我学系列――JAVA篇 第四章Java类和对象

 

六、再谈变量                                               

1.实例变量和局部变量                                                             

在方法外定义的变量主要是实例变量(不带static 修饰的),它们是在使用new Xxxx ()创建一个对象时被分配内存空间的。每当创建一个对象时,系统就为该类的所有实例变量分配存储空间;创建多个对象就有多份实例变量。通过对象的引用就可以访问实例变量。

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

    方法参数变量定义在一个方法调用中传送的自变量,每次当方法被调用时,一个新的变量就被创建并且一直存在到程序的运行跳离了该方法。

当执行进入一个方法遇到局部变量的声明语句时,局部变量被创建,当执行离开该方法时,局部变量被取消,也就是该方法结束时局部变量的生命周期也就结束了。

因而,局部变量有时也被引用为“临时或自动”变量。在成员方法内定义的变量对该成员变量是“局部的”,因而,你可以在几个成员方法中使用相同的变量名而代表不同的变量。该方法的应用如下所示:

publicclass Test {

    privateint i; // Test类的实例变量

    publicint firstMethod() {

       int j = 1; // 局部变量

       // 这里能够访问i和j

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

       return 1;

    } // firstMethod()方法结束 

    publicint 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;

    }

    publicstaticvoid 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的引用不引用任何对象。试图使用它引用的对象将会引起一个异常。异常是出现在运行时的错误,这将在模块“异常”中讨论。

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

publicclass Test {

privateint i; //Test类的实例变量

    publicvoid test1() {

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

       int y;

       int z;

       if (x > 50) {

           y = 9;

       }

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

    }

    publicstaticvoid main(String[] args) {

       Test t = new Test();

       t.test1();

    }

}

3.变量的范围(scope)                                                                   

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

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

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

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

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

示例如下:

publicclass Test {

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

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

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

       int j = 2;//块级     

    }

    publicvoid test1() {

       int j = 3;//方法级

       if(j==3){

           int k = 5;//块级

       }

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

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

    }

    publicstaticvoid main(String[] args) {

       Test t = new Test();

       t.test1();

    }

}

运行结果:

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

3.1访问说明

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

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

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

 

Java私塾跟我学系列——JAVA  网址:http://www.javass.cn  电话:010-68434236

你可能感兴趣的:(java,职场,休闲)