`
234390216
  • 浏览: 10195330 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:460912
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1771975
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1395597
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:393946
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:678297
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:529358
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1178860
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:462249
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:150212
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:66921
社区版块
存档分类
最新评论

static关键字详解——static与非static的区别

    博客分类:
  • java
阅读更多

      在本篇博客中,我主要会讲两个方面的内容,第一个是实例变量与类变量的区别,第二个是实例方法与类方法的区别。大家应该都知道,用static修饰的方法是类方法,用static修饰的变量是类变量。

 

1.实例变量与类变量的区别

       一个类通过使用new关键字可以创建多个不同的对象,这些对象将被分配不同的内存空间,说得准确些就是不同对象的实例变量将被分配不同的内存空间,如果类中有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其他对象的这个类变量。也就是说,对象共享类变量。

 

      当Java程序执行时,类的字节码文件被加载到内存,如果该类没有创建对象,类中的实例变量不会被分配到内存。但是,类中的类变量 在类被加载到内存时,就分配了相应的内存空间。如果该类创建对象,那么不同对象的实例变量互不相同,即分配不同的内存空间,而类变量不再重新分配内存,所有对象共享类变量,即所有对象的类变量是相同的一处内存空间,类变量的内存空间直到程序退出运行,才释放所占有的内存。

 

      类变量是与类相关联的数据变量,也就是说,类变量是和该类创建的所有对象相关联的变量,改变其中一个对象的这个类变量就同时改变了其他对象的这个类变量。因此,类变量不仅可以通过某个对象访问,也可以直接通过类名访问。实例变量仅仅是和相应的对象关联的变量,也就是说,不同对象的实例变量互不相同,即分配不同的内存空间,改变其中一个实例变量不会影响其他对象的这个实例变量。实例变量只能通过对象来进行访问。

 

 

2.实例方法和类方法的区别

      类的方法分为实例方法和类方法两种,用static修饰的方法是类方法。当类的字节码被加载到内存的时候,类的实例方法不会被分配入口地址,当该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行,需要注意的是,当创建一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址,也就是说,方法的入口地址被所有的对象共享,当所有的对象都不存在时,方法的入口地址才被取消。

 

      对于类中的类方法,在该类被加载到内存时就已经被分配了入口地址,从而类方法不仅可以被类创建的任何对象调用,也可以直接通过类名进行调用。类方法的入口地址直到程序退出才被取消。

 

      类方法在类的字节码被加载到内存的时候就分配了入口地址,因此,Java允许直接通过类名来访问类方法,而实例方法则不能直接通过类名来访问。类中的类方法不可以操作实例变量,也不可以调用实例方法,就是因为在类创建对象之前,实例成员变量还没有分配内存,而实例方法也还没有入口地址。

 

      如果一个方法不需要操作实例变量就可以实现某种功能的话,那么这样的方法就应该声明为类方法。这样做可以避免创建对象浪费内存。

 

2
3
分享到:
评论

相关推荐

    java static关键字详解(csdn)————程序.pdf

    java static关键字详解(csdn)————程序

    static关键字详解

    二、static属性与非static属性还有一个最大的区别,所有的非static属性必须产生实例化对象之后才可以访问,但是static属性不受实例化对象的控制,也就是 说,在没有产生实例化对象的情况下依然可以使用static属性。 ...

    Static关键字详解.docx

    Static关键字详解

    static 关键字详解

    static 关键字详解,需要的朋友们快来下载吧

    Duanxx的Java学习:关键字Static详解

    关键字Static就是为了满足上面提到的两种特殊情况而诞生的。当某一个变量或方法被声明为Static的时候,这个变量或方法就不再和任何一个类的实例对象绑定,即便没有创建任何一个实例对象,也可以方位Static的变量或者...

    C++ static关键字的原理及用法详解

    在C++中,static关键字是一个多功能且重要的修饰符,它可以用于变量、函数、类成员以及类本身。本文详细介绍了static关键字在C++中的作用和原理,并通过充分的代码示例进行了说明,帮助读者深入理解并正确使用static...

    JAVA面试题 static关键字详解

    面试官Q1:请说说static关键字,你在项目中是怎么使用的? static 关键字可以用来修饰:属性、方法、内部类、代码块; static 修饰的资源属于类级别,是全体对象实例共享的资源; 使用 static 修饰的属性,静态属性...

    有关JAVA关键字详解

    JAVA关键字详解JAVA关键字详解JAVA关键字详解JAVA关键字详解JAVA关键字详解

    Java下static关键字用法详解

    Static关键字可以修饰什么?  从以下测试可以看出, static 可以修饰:  1. 语句块  2. 成员变量(但是不能修饰局部变量)  3. 方法  4. 接口(内部接口)  5. 类(只能修饰在类中的类, 即静态内部类)  6. ...

    C++面试基础之static关键字详解

    static是 c++ 的关键字,顾名思义是表示静态的含义。它在 c++ 中既可以修饰变量也可以修饰函数。那当我们使用 static 时,编译器究竟做了哪些事情呢? 早先面试中被问到 static 关键字,感觉既熟悉又陌生。熟悉是都...

    Java静态static关键字原理详解

    主要介绍了Java静态static关键字原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    static关键字的作用详解

    当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。 下面是a.c的内容 代码如下:char a = ‘A’;...

    java中static关键字用法详解

    主要为大家详细介绍了java中static关键字的用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    C语言关键字详解

    C语言关键字详解,很全面,希望能给大家带来帮助。

    详解c++中的 static 关键字及作用

     1、用 static关键字 修饰;  2、可以用 类名::成员名 访问 静态成员;  3、静态成员 属于 整个类;  4、静态成员 是所属类的成员,其它类不能访问;  5、静态成员的内存分配 是 唯一的;  1) 静态成员变

    详解Java编程中static关键字和final关键字的使用

    主要介绍了详解Java编程中static关键字和final关键字的使用,是Java入门学习中的基础知识,需要的朋友可以参考下

    stati、thi、supe、final关键字详解

    有关static、this、super、final关键字的分析介绍,希望能够帮助还不是很明白它们的朋友。

    详解java中的static关键字

    主要介绍了java中的static关键字的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下

Global site tag (gtag.js) - Google Analytics