黑马程序员技术交流社区

标题: 全局变量小问题 [打印本页]

作者: 郑雪    时间: 2013-4-28 16:50
标题: 全局变量小问题
类的静态属性同全局变量有什么区别?
作者: 肖宇宥    时间: 2013-4-28 17:07
类的静态变量是不依赖于对象的创建而创建的,它跟类是一个级别的,它放在类里面,纯粹就是为了找个可以容身的地方
全局变量是要实例化对象,才会创建出来,是跟对象一个级别的
作者: 袁梦希    时间: 2013-4-28 17:09
楼主你好:
其实两者没有必然的联系,定义静态的属性,也可以说成静态变量,是因为他是共享数据,要被对象所共享操作。
他可以直接被类名调用,也就是说,静态的成员多了一种调用方式。类名.静态方式。
静态随着类的加载而加载,而且优先于对象存在。一般定义静态属性都定义为静态常量也就是加了final

而全部变量,指的是在类中、方法体外的一个变量。

两者的区别在于:
1,成员变量所属于对象。所以也称为实例变量。
  静态变量所属于类。所以也称为类变量。
2,成员变量存在于堆内存中。
  静态变量存在于方法区中。
3,成员变量随着对象创建而存在。随着对象被回收而消失。
  静态变量随着类的加载而存在。随着类的消失而消失。
4,成员变量只能被对象所调用 。
  静态变量可以被对象调用,也可以被类名调用。
  所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据。

作者: 高正新    时间: 2013-4-28 17:16
静态属性不需要类被实例化就可以直接调用。
全局变量是相对于局部变量而言的,被定义在类内部,方法体外部。
作者: 吴波    时间: 2013-4-28 17:54
可以从优先级入手
类的静态变量是随着类的加载就存在了
全局变量则不是,它需要被初始化。
作者: cowthan    时间: 2013-4-28 20:43
Java去哪儿定义个全局变量?就是成员属性?那该叫对象全局变量,出了对象它就不全局了啊,名不符其实啊
呵呵,开个玩笑
作者: 付鑫鑫    时间: 2013-4-29 08:46
/*
* 静态属性:是随着类的加载而加载 ,随着类的消失而消失.作用范围:类的所有对象.优先于对象
* 全局变量:是随着对象的加载而加载,随着对象的消失而消失,作用范围,对应的实例的对象
*/
public class Demo08 {
        public static void main(String[] args) {
                Person p1 = new Person();
                Person p2 = new Person();
                p1.name = "小明";
                p1.show();                                                                        //p1调用show(),我们没有赋值给age属性,但age是静态属性,是随着的类的加载而加载
                p2.name = "小强";
                p2.show();
        }

}

class Person {
        String name;                                                                                //全局变量,作用的范围在一个实例对象中
        static int age = 18;                                                                //静态属性,作用的范围是类所有对象
        public void show() {
                System.out.println("name = " + name);
                System.out.println("age = " + age);
        }
       
}

作者: lyg2013    时间: 2013-4-29 09:27
虚拟机内存分为四个区:stack segment,heap segment,data segment,code segment;
stack 区存放函数参数和局部变量;
heap  区存放对象;
data  区存放static 的变量或者字符串常量;
code  区存放类中的方法;
静态变量是存放在data区的属于类的属性。

全局变量和静态变量的区别:

      全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
作者: 黄玉昆    时间: 2013-4-29 23:52
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢




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