首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

类变量宇成员变量的差异

2012-11-03 
类变量宇成员变量的区别类变量:静态域,静态字段,或叫静态变量,它属于该类所有实例共有的属性,在内存中只有

类变量宇成员变量的区别

类变量:静态域,静态字段,或叫静态变量,它属于该类所有实例共有的属性,在内存中只有一个地方存储这个变量。而且所有的实例都可以修改这个类变量的值(前提是这个类变量没有被final修饰,否则是常量了),而且访问类变量的时候不用实例,直接用类就可以了。

类方法:和类变量一样,可以不用实例,直接用类就可以调用类方法。

?

实例变量:实例域,实例字段,或叫成员变量。

实例方法:或叫成员方法,必须先有实例,然后才能通过实例调用该实例方法。

?

使用方法:类方法可以直接调用类变量和类方法

?????????????? 类方法不可以直接调用实例变量和实例方法

???????????????类方法中没有this,因为没有实例,this不知道调用哪个实例

?????????????? 类方法可以从类里面直接访问类成员

?????????????? 实例方法可以调用类方法,访问类变量,但是不提倡这样做,会把类方法和类变量混淆成实例方法和实例变量

?

程序实例:

class AnIntegerNamedX {
??? ?int x;?????? //这个是成员变量
???? public int x() {????//成员方法
??????????? return x;

?? ?}

?? ?public void setX(int newX) {??????? //成员方法
??????????? x = newX;
??? }
}

public class Practice{
?? ?public static void main(String args[]){
????????? ?AnIntegerNamedX myX = new AnIntegerNamedX();
????????? ?AnIntegerNamedX anotherX = new AnIntegerNamedX();

?????????? myX.setX(1);
???????????anotherX.x = 2;

????????? ?System.out.println("myX.x = " + myX.x());
???????? ?System.out.println("anotherX.x = " + anotherX.x());

? ??}
}

?

2:

class AnIntegerNamedX {
??static int x;??????????? //这里写成static,结果就变成全是2了,因为类变量是被实例所共享的,包括myX和anotherX

?????????????????????????????????调用anotherX时所有的所有实例都改变了。

? public int x() {
???????? return x;

? }

? public void setX(int newX) {
?????? ?x = newX;
? }
}
public class Practice{
???? public static void main(String args[]){
?????????? ?AnIntegerNamedX myX = new AnIntegerNamedX();
??????????? AnIntegerNamedX anotherX = new AnIntegerNamedX();

??????????? myX.setX(1);
????????????anotherX.x = 2;???????? //这里把X的值改成2,所有实例的X都是2了,因为类变量是被所有实例共享的,任何实

?

????????????????????????????????????????????? 例都可以对类变量做最终的修改

????????????System.out.println("myX.x = " + myX.x());
????????????System.out.println("anotherX.x = " + anotherX.x());

????? }
}

???????

3:同样的,当把那两个方法都加上static变成类方法的时候,会提示错误让你把X变成静态,是应为类方法不能直接访问实例变量!??????

热点排行