A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 田向向 于 2012-6-26 09:50 编辑

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

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

7 个回复

倒序浏览
第一段代码中的a是静态变量
第二段代码中的a是成员变量

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

由于static是在静态方法区中,所以是被数据共享的。

点评

谢谢  发表于 2012-6-26 09:50

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上说的貌似有一点小小的问题,仔细观察代码会发现

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

第一个里面的a虽然是静态的但是他确实局部变量,如果局部变量用static修饰真的可以么??答案是:no。
所以说这个地方有问题局部变量是不可以被static来修饰的,只有你的成员变量可以用static来修饰。
再有就是两个方法定义有int的返回值,但最后却没有返回。所以这个地方也有错。第二个方法
的a是成员变量。应该只有这些。

点评

谢谢  发表于 2012-6-26 09:49

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 很给力!

查看全部评分

回复 使用道具 举报
这两个例子应该是在说成员变量和局部变量的区别。
但是,1,没有返回值,会报错
         2,就算加上返回值也会报错,因为static只能修饰成员。
LZ在好好复习下吧

点评

谢谢  发表于 2012-6-26 09:49

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 恭喜~~~黑马见!

查看全部评分

回复 使用道具 举报
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可以被其他文件引用。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 新手,鼓励一下!

查看全部评分

回复 使用道具 举报
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:47
7#
吴林军 发表于 2012-6-26 00:28
int fun() {
    static int a = 1;
    a++;

statici不是不可以修饰局部变量吗?
回复 使用道具 举报
本帖最后由 吴林军 于 2012-6-26 13:18 编辑
feigecal 发表于 2012-6-26 07:04
statici不是不可以修饰局部变量吗?

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块
成员变量又分为实例变量和类变量。在声明成员变量时,用关键字static给予修饰的称为类变量,否则称为实例变量类变量也称为static变量,静态变量。例如
class Dog {
float  x;   //实例变量
static int y;  //类变量
}不知道这样理解对不对
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马