成员变量、实例变量、类变量、成员方法、实例方法、类方法的区别

 

简单来说:

类体的定义包括成员变量的定义和方法的定义。

1、成员变量包括实例变量和类变量;而成员方法包括实例方法、类方法,当然还有一种特殊的构造方法。

2、类变量、类方法就是类中的变量、方法,必须是静态的,要加static;故其又称静态变量、静态方法。

3、成员变量、成员方法是对象或实例中的变量、方法,不加static;

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

 

问:实例方法可直接调用本类的类方法吗?

先一一分析一下这几个东东:实例方法,实例变量,类方法,类变量。

 

实例变量(instance variable):或叫实例域、实例字段(instance field),或叫成员变量(member variable)。实例的变量,每个实例的变量可能不同。

实例方法(instance method):或叫成员方法(member method)。供实例用的方法,必须要先有实例,才能通过此实例调用实例方法。

类变量(class variable):或叫静态域、静态字段(static field),或叫静态变量(static variable)。出现在这样的情况下:一个类的所有实例需要一个公有的属性,比如,一,统计实例个数;二,常量。类变量与类直接关联在一起。内存当中只有一个地方存放这个变量。任何实例都可以修改它的值(前提是它没有被final修饰符修饰,不然就是常量),但是,访问类变量并不需要实例,用类就可以操作了。

类方法(class method):跟类变量的基本特点一样。供类用的方法,可以没有实例,直接通过类来调用类方法。

从形式上看,类变量和类方法,比一般的变量和方法多了一个static修饰符。因为这个原因,类变量和类方法也被叫做静态变量和静态方法。

它们的使用方法:

  1. 实例方法可以直接访问实例变量,调用实例方法;
  2. 实例方法可以直接访问类变量,调用类方法。但不推荐这么做,原因是不清晰,容易把类变量误认为是实例变量,把类方法误认为是实例方法(借助IDE,它会给出警告信息。);
  3. 类方法可以直接调用类变量和类方法;
  4. 类方法不能直接调用实例变量和实例方法;
  5. 类方法里面不能使用“this”关键字,因为没有实例存在,“this”不知道引用哪个实例。
java中实例变量和类变量的区别是什么?

 

实例变量是类实例化后,系统为其创建的一个类的实例变量的拷贝,即一个实例拥有一个实例变量。  
类变量则是用static声明,系统为每个类变量分配一次存储空间。即所有的实例共享一个类变量。

例如一个银行帐户(Account)是一个class的话,可以把他的利息设为类变量(static   float   interest),而持有人是实例变量(String   name),   这样只要改变   Account.interest就可以把所有人的利息都该了,而持有人的姓名则是属于单独的帐户的。

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
成员变量是定义在中的变量,用于存储对象的数据。它们可以是基本数据型(如整数、浮点数等)或引用型(如对象、数组等)。成员变量可以直接在的任何方法、构造函数或块中使用。 成员方法是定义在中的函数,用于操作对象的数据。它们可以访问和修改成员变量,并且可以执行其他逻辑操作。成员方法可以分为实例方法和静态方法。 分方面,成员变量可以分为实例变量和静态变量。 1. 实例变量:也称为对象变量,每个对象都有自己的一份实例变量的副本。它们在对象创建时被初始化,在整个对象的生命周期内存在。实例变量需要通过对象来访问。 2. 静态变量:也称为变量,所有对象共享同一份静态变量的副本。它们在加载时被初始化,在整个程序运行期间都存在。静态变量可以通过名直接访问。 区别方面,主要有以下几点: 1. 存储位置:成员变量存储在堆内存中的对象中,而成员方法存储方法区中。 2. 调用方式:成员变量需要通过对象来访问和修改,而成员方法可以直接通过对象或名调用(静态方法)。 3. 生命周期:成员变量的生命周期与对象相同,而成员方法的生命周期与相同。 4. 共享性:实例变量是每个对象独有的,互相之间不会产生影响;而静态变量是所有对象共享的,修改静态变量会影响所有对象。 总结起来,成员变量用于存储对象的数据,成员方法用于操作对象的数据。成员变量可以分为实例变量和静态变量,而成员方法可以分为实例方法和静态方法。它们在存储位置、调用方式、生命周期和共享性等方面存在差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值