一.static关键字的用途

在《Java编程思想》P86页有这样一段话:

  “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”

  这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之,一句话来描述就是:

  方便在没有创建对象的情况下来进行调用(方法/变量)。

  很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。

  static可以用来修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。

1)static方法

  static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

  但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。举个简单的例子:

在上面的代码中,由于print2方法是独立于对象存在的,可以直接用过类名调用。

而对于非静态成员方法,它访问静态成员方法/变量显然是毫无限制的。

  因此,如果说想在不创建对象的情况下调用某个方法,就可以将这个方法设置为static。我们最常见的static方法就是main方法,至于为什么main方法必须是static的,现在就很清楚了。因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。

2)static变量

  static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

  static成员变量的初始化顺序按照定义的顺序进行初始化。

3)static代码块

  static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

因此,很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。

java--static关键字详解:相关推荐

  1. [转载] Java static关键字详解

    参考链接: Java中的static关键字 static关键字 在类中,用static声明的成员变量为静态成员变量,也成为类变量.类变量的生命周期和类相同,在整个应用程序执行期间都有效. 这里要强调一 ...

  2. Java中的static关键字详解

    ** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...

  3. Day16-01 P71 面向对象12什么是多态 P72 对象13:instanceof和类型转换 P73 static关键字详解 P74 抽象类 P75 接口的定义与实现 P76N种内部类

    Day16-01 P71 面向对象12:什么是多态 //父类Person package com.oop.demo06;public class Person {public void run(){S ...

  4. 在 C/C++中 static 关键字详解

    static 关键字详解 C/C++ 中的 static 1. 静态局部变量 2. 静态全局变量 全局变量 与 extren 3. static 修饰函数 C++的 static 成员 静态成员变量 ...

  5. C/C++程序内存布局(data段,bss段,text段)以及static关键字详解

    目录 1.内存布局 1.1 data段(可读可写) 1.2 text段(只读) 1.3 bss段(可读可写) 1.4 堆区 1.5 栈区 1.6全局区/静态区 1.7 字符串常量区 1.8 代码区 1 ...

  6. C/C++中static关键字详解

    其实只有一句话需要注意: static在类外初始化,然后才可以在类内修改,其生命周期就是整个程序的生命周期.  静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时 ...

  7. Java instanceof关键字详解

    严格来说 instanceof 是 Java 中的一个双目运算符,由于它是由字母组成的,所以也是 Java 的保留关键字.在 Java 中可以使用 instanceof 关键字判断一个对象是否为一个类 ...

  8. C语言中static关键字详解

    C语言中staic关键字很简单,简单到你的任何一个项目中可以不写一个staic关键字也是没有问题的.写这篇章主要是一下自己的staic的理解和应用,当然在章开头依旧要照本宣科简述一下static关键字 ...

  9. C语言之static关键字详解

    目录 前言: 一.几个概念 1.变量 2.局部变量和全局变量 3.变量的作用域 4.变量的生命周期 二.static关键字的作用 三.static关键字修饰局部变量 四.static关键字修饰全局变量 ...

  10. day28 static关键字详解 static在代码中的顺序

    static关键字 static的优先级: 随着类的加载一起存在. static的优势: 可以直接用 不通过new,也可以直接通过类调用 static的缺点: 不可以被方法重写. static在代码中 ...

最新文章

  1. 人类如何从不同角度识别物体?你需要对「小样本学习」有所了解
  2. 无缝滚动—marquee实现向上滚动(适合发布通告)
  3. KS003基于JSP和Servlet实现的商城系统
  4. 11gR2 RAC启用iptables导致节点宕机问题处理
  5. Android Studio使用笔记
  6. ABP vNext IOC替换原有Service实现
  7. 服务器无法拖动文件复制文件,​IT服务器运维:艾锑人为您整理Win10系统下移动、复制、删除文件需要管理员权限的解决方法...
  8. CRNN+CTCLoss中文手写汉字识别
  9. 【路径规划】基于matlab模糊控制机器人路径规划【含Matlab源码 1643期】
  10. 电影院售票系统PHP项目,电影院售票系统设计(代码+完整报告)
  11. 人工智能十大流行算法,通俗易懂讲明白
  12. 倍福TwinCAT软件安装及注意事项
  13. 使用 Java 解逻辑题
  14. pidgin linux,Linux下的IM(Pidgin,EVA,QQlinux,...)
  15. 南水北调中线调水量仅占丹江口水库水量1/4
  16. python 子域名爆破工具
  17. 城市轨道交通信号系统学习笔记(三)继电器
  18. HUD(蓝牙版)中蓝牙方案
  19. 粤嵌星计划打卡第95天(javaweb js 标签)
  20. java小学数学考试试题,借助小学数学题复习java基础

热门文章

  1. 大数据考研复试面试题
  2. The Path to Learning WR Python FPE.16
  3. 【vue】 vue项目开发卡片展示页面----菜品管理
  4. Scala与Golang的并发实现对比----好问
  5. 【多智能体系统的控制与应用】1、基本概念
  6. [实战]Zabbix 5.0下Agent2内置Redis监控配置
  7. Linux 5.13 还原并修复了有问题的明尼苏达大学补丁
  8. 五个好评不断的资源网站 绝对不能错过
  9. 【每日新闻】中国公有云厂商最新排名来了,谁拔得头筹?
  10. P3205 [HNOI2010]合唱队 (区间dp)