JAVA中的关键字static的介绍

来源:互联网 发布:淘宝里面最大霸王坑 编辑:程序博客网 时间:2024/05/02 00:32
JAVA中包括成员变量的定义和方法的定义,而成员变量的定义又包括类变量和实例变量的定义:其中用static 修饰的是类变量,而其他是实例变量。       

       实例变量和类变量的区别:一个类通过使用new 运算符可以创建多个不同的对象,这些对象被分配不同的内存空间,,即不同对象的实例变量被分配的内存空间不同;但是所有对象的类变量都被分配相同的一处内存,改变其中一个对象的这个类变量会影响其他对象的这个类变量。即对象共享变量。当java程序执行时,类的字节码文件被加载到内存,如果该类没有创建对象,类中的实例变量不会被分配内存。但是,类中的类变量在该类被加载到内存时,就分配了相应的内存空间。如果该类创建对象,那么不同对象的实例变量互不相同,即分配的内存空间不同。而类变量不再重新分配内存,所有对象共享类变量,即所有对象的类变量是相同的一处内存空间,类变量的内存空间直到程序退出才释放所占用的内存。类变量是与类相关联的数据变量,即类变量是和该类创建的所有对象相关联的变量,改变其中一个对象的这个类变量就同时改变了其他对象的这个类变量。因此,类变量不仅可以通过某个对象访问,也可以直接通过类名访问。实例变量仅仅是和相应的对象关联的变量,即不同对象的实例变量互不相同,分配不同的内存空间,改变其中一个对象的实例变量不会影响其他对象的这个实例变量。实例变量可以通过对象访问,不能通过类名访问。

 

 

        实例方法和类方法的区别:java中除构造方法外,其他的方法可以分为实例方法或类方法:用static 修饰的方法是类方法或称为静态方法。剩下的称作实例方法。一个类中的方法可以互相调用:实例方法可以调用该类中的实例方法或类方法;类方法只能调用该类中的类方法,不能调用实例方法。当类中的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,当该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行。需要注意的是,当创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址,即方法的入口地址被所有的对象共享,当所有的对象都不存在时,方法的入口地址才被取消。

       对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址,从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。类方法的入口地址直到程序退出才被取消。类方法在类的字节码加载到内存时就分配了入口地址,因此,java语言允许通过类名直接调用类方法,而实例方法不能通过类名调用。在java语言中类方法不能操作实例变量,也不能调用实例方法,这是因为在类创建对象之前,实例成员变量还没有被分配内容空间,而实例方法还没有被分配入口地址。

原创粉丝点击