java 关键字static 详解

一、 static代表着什么

在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,当然也可以修饰代码块。

Java把内存分为栈内存和堆内存,其中栈内存用来存放一些基本类型的变量、数组和对象的引用,堆内存主要存放一些对象。在JVM加载一个类的时候,若该类存在static修饰的成员变量和成员方法,则会为这些成员变量和成员方法在固定的位置开辟一个固定大小的内存区域,有了这些“固定”的特性,那么JVM就可以非常方便地访问他们。同时如果静态的成员变量和成员方法不出作用域的话,它们的句柄都会保持不变。同时static所蕴含“静态”的概念表示着它是不可恢复的,即在那个地方,你修改了,他是不会变回原样的,你清理了,他就不会回来了。

同时被static修饰的成员变量和成员方法是独立于该类的,它不依赖于某个特定的实例变量,也就是说它被该类的所有实例共享。所有实例的引用都指向同一个地方,任何一个实例对其的修改都会导致其他实例的变化。

public class User {

private static int userNumber = 0 ;

public User(){

userNumber ++;

}

public static void main(String[] args) {

User user1 = new User();

User user2 = new User();

System.out.println("user1 userNumber:" + User.userNumber);

System.out.println("user2 userNumber:" + User.userNumber);

}

}

------------

Output:

user1 userNumber:2

user2 userNumber:2

二、 怎么使用static

static可以用于修饰成员变量和成员方法,我们将其称之为静态变量和静态方法,直接通过类名来进行访问。

ClassName..propertyName

ClassName.methodName(……)

Static修饰的代码块表示静态代码块,当JVM装载类的时候,就会执行这块代码,其用处非常大。(对于代码块的使用这几天介绍,敬请关注)

2.1、static变量

static修饰的变量我们称之为静态变量,没有用static修饰的变量称之为实例变量,他们两者的区别是:

静态变量是随着类加载时被完成初始化的,它在内存中仅有一个,且JVM也只会为它分配一次内存,同时类所有的实例都共享静态变量,可以直接通过类名来访问它。

但是实例变量则不同,它是伴随着实例的,每创建一个实例就会产生一个实例变量,它与该实例同生共死。

所以我们一般在这两种情况下使用静态变量:对象之间共享数据、访问方便。

2.2、static方法

static修饰的方法我们称之为静态方法,我们通过类名对其进行直接调用。由于他在类加载的时候就存在了,它不依赖于任何实例,所以static方法必须实现,也就是说他不能是抽象方法abstract。

Static方法是类中的一种特殊方法,我们只有在真正需要他们的时候才会将方法声明为static。如Math类的所有方法都是静态static的。

2.3、static代码块

被static修饰的代码块,我们称之为静态代码块,静态代码块会随着类的加载一块执行,而且他可以随意放,可以存在于该了的任何地方。

三、 Static的局限

Static确实是存在诸多的作用,但是它也存在一些缺陷。

1、它只能调用static变量。

2、它只能调用static方法。

3、不能以任何形式引用this、super。

4、static变量在定义时必须要进行初始化,且初始化时间要早于非静态变量。

总结:无论是变量,方法,还是代码块,只要用static修饰,就是在类被加载时就已经"准备好了",也就是可以被使用或者已经被执行,都可以脱离对象而执行。反之,如果没有static,则必须要依赖于对象实例。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

java 如何调用static_java 关键字static详细介绍及如何使用相关推荐

  1. Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

    转载自  Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 第1部分 ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与 ...

  2. JAVA中JVM的重排序详细介绍(写得很明白)

    刚刚在研究volatile变量的时候,涉及到重排序的概念,于是发现了这篇很好的文章,写得很简短很明白.所以转载一下. 原文地址:JAVA中JVM的重排序详细介绍 原文贴出来: 重排序通常是编译器或运行 ...

  3. 关于Java中final关键字的详细介绍

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...

  4. Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例

    概要 这一章,我们对HashSet进行学习. 我们先对HashSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashSet.内容包括: 第1部分 HashSet介绍 第2部分 Has ...

  5. 豆瓣网络爬虫-java网络爬虫[验证码模拟登陆]详细介绍

    目录 抓包介绍 解决验证码的思路 验证码地址拼接 爬虫实战 爬虫架构 model main 解析htmlparse 数据库操作程序db 近期,有人将本人博客,复制下来,直接上传到百度文库等平台. 本文 ...

  6. 牛散村:Java字节码编程javassist的详细介绍

    本篇文章将和大家分享一下关于Java字节码编程中一个非常之好用的技术javassist,下面将详细为大家介绍一下javassist技术,以及具体实例代码讲解. 一.Javassist入门 (一)Jav ...

  7. java提高篇(七)-----关键字static

    一. static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个"伪全局"的概念,在Java中static表示"全局"或 ...

  8. 【JAVA进阶篇】字符串的详细介绍

    Java学习 String字符串 概述 String类的特点 String字符串常量池 String字符串的构造方法 String字符串的23个常用方法 StringBuilder类/StringBu ...

  9. JAVA方法调用过程(最详细的解释)

    弄清楚方法的调用过程,对于我们学习java极为重要,下面是调用过程的详细描述: 1.编译器查看对象的声明类型和方法名. 编译器去寻找所有名字为f但参数类型不同的方法.例如可能存在方法f(int)和方法 ...

最新文章

  1. VMware安装Centos7桌面版超详细图文过程
  2. 海尔推“智能服务”标准 家电产业迎来“互联网+”
  3. java简单通讯录的实现02person类_用java实现简单的小游戏(你一定玩过)
  4. 修理牛棚 Barn Repair
  5. 这几个技巧让你做出让导师眼前一亮的答辩 PPT
  6. C++智能指针简单介绍
  7. Access-Control-Allow- 设置跨域资源共享CORS详解
  8. 北京某打工子弟学校之二
  9. 视觉设计师跟平面设计_使设计具有视觉吸引力
  10. pytorch 与numpy 部分操作的对应关系
  11. 北京市昌平区卫星地图离线包下载
  12. crc原理及c代码实现
  13. 解决Excel表格输入身份证号码显示异常的问题
  14. docker部署redis集群
  15. A*算法最合理的数据结构
  16. 【微信小程序】echarts 正态分布图 区间柱形图
  17. 安防视频监控系统设计
  18. 软件质量评判标准:高内聚、低耦合
  19. Android获取系统的硬件信息、系统版本以及如何检测ROM类型
  20. 我和世界杯的‘恩怨情仇’

热门文章

  1. 对一道基础string题及其变式题的思考与解析
  2. java全文检索工具_全文检索工具elasticsearch:第三章: Java程序中的应用
  3. oracle sum详解,oracle sum()聚合函数
  4. java 反射创建对象并赋值_java使用反射创建并操作对象的方法
  5. python分治算法_分治法及其python实现例子
  6. python原理与架构_Python:爬虫原理和网页构造
  7. html纵向固定导航菜单代码,jQuery和css3响应式垂直固定导航菜单插件
  8. php 放大镜,图片放大镜效果实战总结
  9. Win10系统hosts文件不见了的解决方法
  10. Java代理设计模式(Proxy)的具体实现:静态代理和动态代理