前两天面试时被问到静态的特点,当时回答地不是很好,现在来总结一下

在了解某样东西的时候我们通常会从它是什么,为什么,和怎么样在三方面来衡量,对于java中的static,我们也这样讨论下,要明确以下几点:

1、 static在java中到底代表什么,为何要用它?

2、 static在java中怎么用?

3、 static 有那些特点和使用的“局限”?

4、当成员变量被静态修饰后,和非静态成员变量的区别?

1、 static在java中到底代表什么,为何要用它?

static――静态――“指定位置“

首先,我们来看看java的内存:java把内存分为栈内存和堆内存,栈内存用来存放一些基本类型的变量和数组及对象的引用变量,而堆内存主要是来放置对象的。

用 static的修饰的变量和方法,实际上是指定了这些变量和方法在内存中的“固定位置”-static storage。既然要有“固定位置”那么他们的 “大小”似乎就是固定的了,有了固定位置和固定大小的特征了,在栈中或堆中开辟空间那就是非常的方便了。如果静态的变量或方法在不出其作用域的情况下,其引用句柄是不会发生改变的。

我们常看到:static变量有点类似于C中的全局变量的概念;静态表示的是内存的共享,就是它的每一个 实例都指向同一个内存地址。把static拿来,就是告诉JVM它是静态的,它的引用(含间接引用)都是指向同一个位置,在那个地方,你把它改了,它就不会变成原样,你把它清理了,它就不会回来了。

注:java的主类中main()方法本身就是一个static的,所以main方法的执行就是在没有产生新的实例的情况。

2、 static在java中怎么用?

static是一个修饰符,用于修饰成员(成员变量和成员函数)。

当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用:类名.静态成员。

3、 static 有那些特点和使用的“局限”?

(一)特点

静态成员随着类的加载而加载;

静态成员优先于对象存在;

静态成员被所有对象所共享;

静态成员多了一个中调用方式,可以被类名直接调用。

(二)利弊

利:

对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份;

可以直接被类名调用。

弊:

生命周期过长;

访问出现局限性,只能访问静态。

(三)注意事项

静态方法只能访问静态成员, 非静态方法既可以访问静态又可以访问非静态;

静态方法中不可以定义this,super关键字;(因为this代表是对象,而静态存在时,有可能没有对象,且静态优先于对象存在。所以静态方法运行时,this是没有任何对象代表的。 简单说,先进内存的数据不可以访问后进内存的数据,可是后进内存数据可以访问先进内存的数据)

主函数是静态的

4、当成员变量被静态修饰后,和非静态成员变量的区别?

静态变量也称为类变量,也就是直接可以被类名调用的变量,这个变量是所属于类的;

非静态变量称为成员变量,或者实例变量,是被对象调用的,是所属具体对象的。

静态变量随着类的加载而加载,也意味着随着类的消失而消失,生命周期最长;

实例变量,随着对象的创建而加载,随着对象的消失而消失,按照对象的生命周期而存在。

静态变量存储在方法区的静态区中;

实例变量存在于对象所属的堆内存中。

静态变量数据,被所有对象所共享;

实例变量是对象中的特有数据。

java静态变量特点_Java中static的特点相关推荐

  1. java 静态变量命名_java中变量的命名规范是什么?

    java中变量的命名规范是什么? 发布时间:2020-05-21 23:12:19 来源:亿速云 阅读:206 作者:鸽子 Java是一种区分字母的大小写的语言,所以我们在定义变量名的时候应该注意区分 ...

  2. java 静态变量 存储_Java中存储的静态方法和静态变量在哪里?

    静态方法(实际上所有方法)以及静态变量都存储在PermGen部分,因为它们是反射数据的一部分(类相关数据,而不是与实例相关的). 需要澄清的最新情况: 注意,只有变量及其技术值(原语或引用)存储在Pe ...

  3. java 静态变量声明_java静态变量怎么声明?

    展开全部 个人的总结 1 静态变量e69da5e6ba9062616964757a686964616f31333337616564只有一份被类的所有实例共享 2 静态变量的声明在编译时已经明确了内存的 ...

  4. java 静态代码块_Java中的static静态代码块的使用详解

    一.与静态方法的比较 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要 ...

  5. java静态变量定义_java静态变量、静态方法和静态代码段

    先上实例 public classTestStatic {public static String staticString = "this is a static String" ...

  6. Java成员变量查找_Java中的成员变量和局部变量

    声明成员变量  可以用public proteced private修饰 eg public class Apple{ public String color;//声明公共变量 public stat ...

  7. java 静态变量 存储_Java学习笔记9---类静态成员变量的存储位置及JVM的内存划分...

    笔记8提到了类静态成员变量的访问方式,但静态成员变量存储在哪里呢?在网上查阅不少资料,发现好多内容都是过时的了,其中主流观点是静态成员变量存放在方法区.JDK8之前,静态成员变量确实存放在方法区:但J ...

  8. java中静态变量的作用_Java中static变量作用和用法详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  9. Java 静态变量,静态方法,静态常量(java static 关键字)

    Java 静态变量,静态方法,静态常量  就是变量 ,方法,常量前面添加了static 关键字 为什么要使用静态的呢 有时候在处理问题时会需要两个类在同一个内存区域共享一个数据, 不如现在 Main ...

最新文章

  1. P1156 垃圾陷阱
  2. 伍哥原创之豆荚商城商品搜索架构介绍
  3. jqGrid参数详解
  4. conda重命名环境env
  5. 20155307 2016-2017第二次《Java程序设计》课堂实践项目
  6. swift:打造你自己的折线图
  7. linux下bios设置内存电压,系统安装的BIOS设置?
  8. python暂停和恢复游戏_pygame游戏之旅 添加游戏暂停功能
  9. 阿里技术:基于Kafka+Flink+Redis的电商大屏实时计算案例
  10. WebSocket转载
  11. CGI form标签学习
  12. 约束最优化方法 (一) 最优性条件
  13. SQLServer的索引和统计
  14. TeaVM当前版本(0.7.0)还不支持传递字串参数
  15. VB 连接加密码的ACCESS数据库*.mdb,*.accdb
  16. CentOS7.4 更改SSH端口号
  17. linux运行raxml,在线和本地两种方法构建 RAxML 进化树方法和解读
  18. 大一c语言餐馆叫号系统,专业体检中心排队叫号系统厂家
  19. css样式,鼠标移动上去变成禁用、小手等样式。
  20. 【转】Windows Error code (Windows错误码说明)

热门文章

  1. IGD-EMOA:基于IGD指标的多目标优化进化算法
  2. 【javascript】浏览器调用摄像头扫二维码踩坑记录
  3. android 完美获取音乐文件中的专辑图片并显示
  4. 可以升级鸿蒙的荣耀手机,荣耀手机也能升级鸿蒙OS?
  5. 微信公众号二维码 链接
  6. 1的恋爱机会 好朋友:世间的一切(1)
  7. 运营界大牛的10年经验干货,拨开运营的谜团
  8. 若依框架(SpringBoot)增加SQL防注入处理,SpringBoot增加SQL防注入
  9. html5多个图片位置_关于 HTML5 你需要了解的基础知识
  10. 计算机网络做网线,计算机网络基础(网线制作)