类变量宇成员变量的区别

类变量:静态域,静态字段,或叫静态变量,它属于该类所有实例共有的属性,在内存中只有一个地方存储这个变量。而且所有的实例都可以修改这个类变量的值(前提是这个类变量没有被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变成静态,是应为类方法不能直接访问实例变量!      

3、按要求编程:(1)定义一个圆Circle,该圆的数据成员包括:圆心点位置及圆的半径;方法成员有:设置圆心位置和半径的方法,获取圆心位置和半径的方法,无参的构造方法初始化圆心位置为(0,0),半径为1。另外定义一个构造方法可以接收圆心位置与半径的参数。编写测试创建Circle的对象,并且分别调用各种方法,对比这些方法的执行结果。(2)定义一个矩形MyRectangle,中有4个私有的整型变量,分别是矩形的左上角坐标(xUp,yUp)和右下角坐标(xDown,yDown);中定义没有参数的构造方法和有4个int参数的构造方法,用来初始化对象。中还有以下方法:getw()—一计算矩形的宽度;getH()——计算矩形的高度;area()—计算矩形的面积;toString()—把矩形的宽、高和面积等信息作为为符串返回。编写代码创建MyRectangle的对象并输出矩形对象的信息。(3)设计一个长方体MyCube,该包含第2题中的MyRectangle对象作为成员变量,表示长方体的底面;此外还包含一个整型变量d,表示长方体的高。中定义构造方法初始化对象、定义求体积和表面积的方法。编写代码测试MyCube。(4)对于第2、3题的分别用的访问修饰符public与无修饰符定义,同时把它们声明在同一个包中、不同的包中,分析程序的编译情况,理解及其成员的访问控制符的作用。
06-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值