黑马程序员技术交流社区

标题: 看以前课件的时候看到这么两个例子,不理解 [打印本页]

作者: 田向向    时间: 2012-6-25 23:09
标题: 看以前课件的时候看到这么两个例子,不理解
本帖最后由 田向向 于 2012-6-26 09:50 编辑

int fun() {
    static int a = 1;
    a++;
}

int a = 1;
int fun() {
    a++;
}
我以前上课的时候不怎么听课,,今天整理电脑,看到以前老师上课的课件,看到这么两个例子,请问是什么意思?有什么区别?


作者: 韦念欣    时间: 2012-6-25 23:30
第一段代码中的a是静态变量
第二段代码中的a是成员变量

静态变量和成员变量的区别:
1,在内存空间存储的位置:
     a)        静态变量:方法区的静态区中。
     b)        成员变量:堆内存中。
2,生命周期:
     a)        静态变量:随着类的加载而加载,随着类的消失而消失。
     b)        成员变量:随着对象的创建而出现,随着所属对象变成垃圾被收回而消失
3,调用方式:
     a)        成员变量:只能被对象调用。
     b)        静态变量:既可以被对象调用,也可以被类名调用。
4,数据体现:
     a)        成员变量的值称为对象中的特有数据。
     b)        静态变量的值称为对象中的共享数据。

由于static是在静态方法区中,所以是被数据共享的。
作者: Forever。    时间: 2012-6-26 00:00
楼上说的貌似有一点小小的问题,仔细观察代码会发现

int fun() {
    static int a = 1;
    a++;
}

第一个里面的a虽然是静态的但是他确实局部变量,如果局部变量用static修饰真的可以么??答案是:no。
所以说这个地方有问题局部变量是不可以被static来修饰的,只有你的成员变量可以用static来修饰。
再有就是两个方法定义有int的返回值,但最后却没有返回。所以这个地方也有错。第二个方法
的a是成员变量。应该只有这些。
作者: 王月    时间: 2012-6-26 00:22
这两个例子应该是在说成员变量和局部变量的区别。
但是,1,没有返回值,会报错
         2,就算加上返回值也会报错,因为static只能修饰成员。
LZ在好好复习下吧

作者: 吴林军    时间: 2012-6-26 00:28
int fun() {
    static int a = 1;
    a++;
}这段代码中a是一个静态局部变量。用static声明局部变量可以避免每次调用函数时都建立和初始化局部变量,以及每次退出函数时撤销变量,缩短执行时间。如果变量在函数外面定义,如 static int a=1 ; int function(){...},表明变量a是全局的,在其他文件中无法使用extern 进行引用,只被本文引用。
int a = 1;
int fun() {
    a++;
}这段代码中a是一个全局变量。全局变量的有效范围是从定义变量的位置开始到本源文件结束。这里的全局变量a可以被其他文件引用。


作者: 李伟    时间: 2012-6-26 01:17
int fun() {
    static int a = 1; //不可以用static,static只能修饰成员变量,这里面的a是局部变量。
    a++; //返回值类型是int,应该加上一条return语句。
}

int a = 1;
int fun() {
    a++; 返回值类型是int,应该加上一条return语句。
}

作者: 孙飞    时间: 2012-6-26 07:04
吴林军 发表于 2012-6-26 00:28
int fun() {
    static int a = 1;
    a++;

statici不是不可以修饰局部变量吗?
作者: 吴林军    时间: 2012-6-26 13:15
本帖最后由 吴林军 于 2012-6-26 13:18 编辑
feigecal 发表于 2012-6-26 07:04
statici不是不可以修饰局部变量吗?

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块
成员变量又分为实例变量和类变量。在声明成员变量时,用关键字static给予修饰的称为类变量,否则称为实例变量类变量也称为static变量,静态变量。例如
class Dog {
float  x;   //实例变量
static int y;  //类变量
}不知道这样理解对不对




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2