19. 什么是类成员,什么是实例成员?他们之间有什么区别? 实例成员和类成员的区别

作者&投稿:熊泄 2024-06-30
类成员变量和实例成员变量分别指什么有什么区别(举例说明)?

例如定义一个类:
class Text
{public static int number;
public int temp;}
如果你想访问temp属性,你就必须先创建一个Text的对象,才能访问:Text b = new Text();
b.temp;这就是实例成员变量。
而你想 访问number的话,不用创建Text的实例就可以访问,就像这样:Text.number.这就是类成员变量。
主要区别就是访问是需不需要创建对象,而对于类成员变量,所有对象是共享一个变量的。

扩展资料:
数据成员可以分静态变量、非静态变量两种.
静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用"类名.静态成员名"访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员 函数不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员函数可以直接访问类中静态的成员.
非静态成员:所有没有加Static的成员都是非静态成员,当类被 实例化之后,可以通过实例化的类名进行访问..非静态成员的生存期决定于该类的生存期..而静态成员则不存在生存期的概念,因为静态成员始终驻留在 内存中..
一个类中也可以包含静态成员和非静态成员,类中也包括静态 构造函数和非静态构造函数..
分两个方面来总结,第一方面主要是相对于 面向过程而言,即在这方面不涉及到类,第二方面相对于 面向对象而言,主要说明 static在类中的作用。
参考资料:百度百科-成员变量

静态成员又叫类成员,指的是用static修饰符所修饰过的变量或方法。
实例成员就是没有用static修饰的变量或方法。
主要不同就是这有没有static修饰。造成的结果是静态成员可以直接由类名调用,而实例成员还要用new标示符进行实例化,长生对象才能去调用方法和变量。
(了解即可,不必记忆) 深层原因是静态成员在分配空间时与实例成员的不同。静态成员再分配时只有一份地址空间,只用分一次就行,以后都用这份空间。而实例成员再分配时是每次产生一个成员都要在再配一次空间。

JAVA实例成员和类成员

 用static 关键字可以声明类变量和类方法,其格式如下:
  static type classVar;
  static returnType classMethod({paramlist}) {
  …
  }
 
  如果在声明时不用static 关键字修饰,则声明为实例变量和实例方法。
  1) 实例变量和类变量
  每个对象的实例变量都分配内存,通过该对象来访问这些实例变量,不同的实例变量是不同的。
  类变量仅在生成第一个对象时分配内存,所有实例对象共享同一个类变量,每个实例对象对类变量的改变都会影响到其它的实例对象。类变量可通过类名直接访问,无需先生成一个实例对象,也可以通过实例对象访问类变量。

  2) 实例方法和类方法
  实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,实例方法由实例对象调用。
  但类方法不能访问实例变量,只能访问类变量。类方法可以由类名直接调用,也可由实例对象进行调用。类方法中不能使用this或super关键字。

  例3-7 是关于实例成员和类成员的例子。

【例3-7】
  class Member {
    static int classVar;
    int instanceVar;
    static void setClassVar(int i) {
     classVar=i; // 类方法可以访问类变量
     // instanceVar=i; // 类方法不能访问实例变量
    }
    static int getClassVar()
     { return classVar; }
    void setInstanceVar(int i)
     { classVar=i; //实例方法不但可以访问类变量,也可以实例变量
     instanceVar=i; }
     int getInstanceVar( )
     { return instanceVar; }
    }
    public class MemberTest{
     public static void main(String args[]) {
         Member m1=new member();
         Member m2=new member();
         m1.setClassVar(1);
         m2.setClassVar(2);
         System.out.println("m1.classVar="+m1.getClassVar()+"
                   m2.ClassVar="+m2.getClassVar());
         m1.setInstanceVar(11);
         m2.setInstanceVar(22);
         System.out.println("m1.InstanceVar="+m1.getInstanceVar
              ()+" m2.InstanceVar="+m2.getInstanceVar());
     }
    }

类成员 是大家共有一个,属于类的
实例成员 就是一人一个 属于对象

类成员就是被static修饰的成员变量,比如 static int n;当类加载的时候它就会被加载
实例成员是没有被static 修饰的成员变量, 比如 int m;加载类的时候它不会被加载,而是等到创建对象时才会被实例化.实例成员是慢于类成员被加载的
方法同样如此,被static修饰的方法随着类的加载而执行,此时还没有创建对象,那些没有被static修饰的方法就不能执行,所以在类方法中不能调用没被static修饰的方法


你是否需要了解?