最近研究了一下JLS 7,对一些概念有了进一步的认识,为了加深一些认识,希望能将一些自己的理解整理成笔记,加深印象。

Java 中的static

static是java中的静态修饰符。在java语言中有多个地方要用到static,那么static究竟都有哪些用途?在这里值得研究一番。 
1、静态字段 (static fields) 
什么是静态字段?顾名思义,静态字段就是被声明为static的字段。静态字段又称为类变量。同样的,非静态字段就是没有被声明为static的字段,又称为实例变量(instance variable)。类变量和实例变量的区别在于,类变量只在类加载的时候被创建并初始化,而实例变量则会在每次实例化的时候产生一个新的实例变量。 
类变量(静态字段)的初始化,初始化语句只会在类初始化的时候执行一次,而实例变量(非静态字段)则不同,每次实例化一个类,都会执行一次。对于类变量的初始化子(initializer)而言,在以下情况会出现编译错误: 
1) 如果初始化语句里包含任何实例变量名的引用;(类的初始化必定先于实例的初始化) 
2)如果初始化语句里出现this或者super; 
关键字this只能用在实例方法体内、实例初始化子,或者构造子内。this,指代一个对象引用值,可以是调用实例方法的对象,也可能是正在创建的对象。super关键字,把当前对象视为其当前类的父类的实例。同样的,super只能用在实例方法体内、实例初始化子,或者构造子内。 
3)在运行时,final static 和通过常量表达式初始化的字段会被优先初始化。

字段在初始化过程中的使用约束:字段在使用前必须被声明,只能用在初始化子中,不能出现在赋值运算符的左边,通过名字使用,字段的使用块是最深层的类或者接口。 
2. 静态字段(static methods)

如果一个方法声明为static, 则称之为类方法,非静态的方法称为实例方法(Instance method)。 
以下情况会产生编译错误: 
1) 在方法头或体内使用类参; 
2) 使用this或super关键字;

类方法和实例方法的区别在于: 
类方法的调用不依赖具体的对象;而实例方法必须通过一个具体对象去调用,而且这个对象在运行方法体的过程中变为this和super关键字的引用。

个人感觉以上对static和非static的理解,主要还是对JVM机制的基本了解上,对JVM 的stack和heap有些了解,学过C语言的应该能想起点什么,粗陋点说就是内存的分配与加载。

3. 类的静态成员类型 
类的成员类型可以添加static修饰符,用以声明此类为非内部类,就像类的静态方法一样,内部不可以使用类的实例。 
对于接口成员类型,默认为静态的。 
4. 静态构造子 
形式为:static{ ... },在类加载时运行,对类成员进行初始化。

JLS --(Java 中的static)相关推荐

  1. java aio为什么不稳定_为什么我不提倡在Java中使用static

    static从Java1.0开始便是Java中的关键字,用于表征静态属性或方法.它也得到了广泛的应用,在业务中定义XXXUtil是一种常规的模式,甚至是比较知名的类库(比如Apache Common ...

  2. 面试季,Java中的static关键字解析

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面 ...

  3. Java中的static关键字详解

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

  4. Java中的static关键字解析 转载

    原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到 ...

  5. 二十五、深入Java中的static静态修饰符

    @Author:Runsen @Date:2020/6/2 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  6. [转] Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  7. 【Java学习笔记之十五】Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  8. C\C++与Java中的static关键字

    C\C++里面的static: 面向过程的static: 在c和c++面向过程的设计里,在全局变量前加上static关键字则可将该变量定义为一个静态全局变量,比如: static int a; 那么c ...

  9. C++与Java中的static成员总结

    简述 在结构化程序设计中,内存中数据的共享是通过参数, 全局变量实现的; 在面向对象程序设计中函数与数据成员封装在一起, 数据共享通过类内部数据成员之间的相互访问, 外部对象则通过静态成员(即stat ...

最新文章

  1. c语言章节作业,怎么用C语言编写菜单?
  2. sql 查询 定义变量
  3. [自爆系列]浅谈我对搜索的错误了解
  4. 面向对象编程思想-观察者模式
  5. 设计模式---桥接模式
  6. gradle 刷新打包的时候报错
  7. 7天内新闻前加 new
  8. linux libimf.so,如何安装Linux版FLOW-3D及注意事项
  9. 添加到当前最上层view
  10. CSDN论坛新手指南
  11. KEIL5下载时提示“keil5 notarget connected”
  12. 计算机四级数据库工程师考什么,计算机四级《数据库工程师》考试大纲
  13. 显示器3d测试软件,挑战3大游戏+3D电影!3D三屏环绕感官测试
  14. 高老师的架构设计_隽语集(CC_1051)
  15. rk3288 linux烧录工具,Firefly-RK3288开发板烧写教程
  16. WPViewPDF Delphi 和 .NET 的 PDF 查看组件
  17. NSTextField 处于编辑状态时,点击return键 结束编辑,NSButton的return快捷方法不响应
  18. 前端面试经典八股文(一)
  19. 零序电流 Zero-sequence curren Residual Current Circuit Breaker
  20. 【webpack】webpack 入门教程

热门文章

  1. three.js 源码注释(九十五)extras/core/Gyroscope.js
  2. 微软.NET FrameWork离线运行库合集 v2021.09.07
  3. ASEMI整流桥有几种,MSB30M贴片整流桥属于哪一种
  4. epoch-interation-step-batch_size区别
  5. 数据分析2020年全国各省分高考成绩分布情况
  6. 使用java编程恢复乱码
  7. 利用Unity LineRender组件,复刻H5页面的绚烂Cavans点线动画(带鼠标交互)
  8. C++“准”标准库Boost学习指南(1):智能指针Boost.smart_ptr
  9. 如何在网页中嵌入QQ 阿里旺旺等代码
  10. TI/德州仪器 TS5A3157DBVR 模拟开关