就是在变量的声明时,
public static int a;
public static void main(String[] args){
}
和
public int a;
public static void main(String[]args){
}
有什么区别?
有什么区别;
这个问题是 实例变量和类变量的区别。用static修饰的变量是类变量,而没有的为实例变量。
不同的对象的实例变量将被分配不同的内存空间,如果类中的成员变量有类变量,那么所以对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其他对象的这个类变量,也就是说对象共享类变量。
当java程序执行时,类的字节码文件被加载到内存,如果该类没有创建对象,类实例成员变量不会被分配内存。但是,类中的类变量被加载到内存时,就分配了相应的内存空间。如果该类创建对象,那么不同对象的实例变量互不相同,即分配不同的内存空间,而类变量不再重新分配内存,所有的对象共享类变量,即所有的对象的类变量是相同的一处内存空间,类变量的内存空间直到程序退出运行,才释放所占有的内存。类变量是与类相关联的这个类变量就同时改变了其他对象的这个类变量。因此,类变量不仅可以通过某个对象访问,也可以直接通过类名访问。实例变量仅仅是和相应的对象关联的变量,也就是说,不同对象的实例变量互不相同,即分配不同的内存空间,改变其中一个对象的实例变量不会影响其他对象的这个实例变量。实例变量可以通过对象访问,不能使用类名访问。
不同的对象的实例变量将被分配不同的内存空间,如果类中的成员变量有类变量,那么所以对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其他对象的这个类变量,也就是说对象共享类变量。
当java程序执行时,类的字节码文件被加载到内存,如果该类没有创建对象,类实例成员变量不会被分配内存。但是,类中的类变量被加载到内存时,就分配了相应的内存空间。如果该类创建对象,那么不同对象的实例变量互不相同,即分配不同的内存空间,而类变量不再重新分配内存,所有的对象共享类变量,即所有的对象的类变量是相同的一处内存空间,类变量的内存空间直到程序退出运行,才释放所占有的内存。类变量是与类相关联的这个类变量就同时改变了其他对象的这个类变量。因此,类变量不仅可以通过某个对象访问,也可以直接通过类名访问。实例变量仅仅是和相应的对象关联的变量,也就是说,不同对象的实例变量互不相同,即分配不同的内存空间,改变其中一个对象的实例变量不会影响其他对象的这个实例变量。实例变量可以通过对象访问,不能使用类名访问。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2010-06-23
static 不需要实例对象就可以直接调用 比如你这个是放在Test类里面的可以直接Test.a来调用
第个需要实例对象调用比如你new一个Test对象 Test test = mew Test()
就可以用test.a来调用了
还有就是static的变量对这个类来说 所有对象都共有那个变量 也就是说只要他在一个地方改变了 那么另一个地方调用也改变了
第2就不一样了 每个对象一个a 在这个对象这改变了 对其他对象的a的值没有任何影响
第个需要实例对象调用比如你new一个Test对象 Test test = mew Test()
就可以用test.a来调用了
还有就是static的变量对这个类来说 所有对象都共有那个变量 也就是说只要他在一个地方改变了 那么另一个地方调用也改变了
第2就不一样了 每个对象一个a 在这个对象这改变了 对其他对象的a的值没有任何影响
第2个回答 2010-06-23
static 关键字声明的方法,或者变量,都会在加载类时,直接使用,也就是不用创建对象后再使用,就是可以这样写:类名.a 类名.静态方法,而不加static是不能这样使用的。必须要new。
区别,加载时机不同,static的变量/方法,加载类时即加载变量/方法到“类”的内存,你就可以使用了。
而非static的则需要用new关键字时,才会加载到“对象”的内存区,即需要通过实例化才能够使用。
区别,加载时机不同,static的变量/方法,加载类时即加载变量/方法到“类”的内存,你就可以使用了。
而非static的则需要用new关键字时,才会加载到“对象”的内存区,即需要通过实例化才能够使用。
第3个回答 2010-06-23
static关键字代表a是静态变量 就是多个对象共用一个变量a 意思就是只要一个对象改变了这个a的值,那么所有的对象访问到的这个变量a值都是被改变了的这个a值
实例变量 则是多个对象 各自保有一个变量a 每个对象对a的操作不会影响到其他对象访问到的a值
实例变量 则是多个对象 各自保有一个变量a 每个对象对a的操作不会影响到其他对象访问到的a值
第4个回答 2010-06-23
public static void main(String[] args){}
就是一个主函数入口,没什么好说的。
至于int a 前面加不加static的区别在于作用域的不同,加了static。这个类的任何地方都可以调用,并且都是对一个变量赋值。不加的话就看括号了。
就是一个主函数入口,没什么好说的。
至于int a 前面加不加static的区别在于作用域的不同,加了static。这个类的任何地方都可以调用,并且都是对一个变量赋值。不加的话就看括号了。