Java中静态关键字的使用方法介绍一
1 静态成员变量
在类中定义的变量通常称之为成员变量,如果当一个成员变量的前面增加了修饰符Static,那么我们就称这个成员变量为静态成员变量。
1.1 成员变量和静态成员变量的定义方法
创建一个Car类,在其中定义了两个成员变量,一个是普通成员变量color,一个是静态成员变量myColor。
public class Car {public String color;//普通成员变量public static StringmyColor;//静态成员变量void show(){System.out.println("汽车的颜色是"+this.color);System.out.println("我的汽车的颜色是"+this.myColor);}
public static void main(String[]args) {Carcar=new Car();car.show();}
}
运行结果为:
汽车的颜色是null
我的汽车的颜色是null
无论是成员变量还是静态成员变量在没有自定义初始化的时候,系统给的默认初始值都是null。在这一点上成员变量和静态成员变量是同样的。
1.2 静态成员变量的使用场合
1.2.1 成员变量的值在不同的对象中完全一样
一个类可以创建多个对象实例,每创建一个对象,就在内存中分配相应的一块空间,用来存储对象中的成员变量和方法。如果某一个成员变量在每一个对象中的值都是相同的,那么对于这个变量来说,每个对象中也同样分配了内存空间进行存储就造成了内存空间的浪费。如下图所示,图中的地址为演示用,并不是实际内存地址。(下同)
图1 定义普通成员变量时的内存地址的使用情况图
为了解决使用成员变量造成的内存空间的浪费,可以定义静态成员变量来解决这种内存空间的浪费。定义为静态成员变量的变量其分配的内存地址为共享数据内存地址,与对象分配的内存地址不在同一区域,而且只分配一次,不会因为对象的构建而重复分配。构建对象完成后,通过对象同样可以访问静态成员变量,达到与通过对象访问普通成员变量同样的效果。使用静态成员变量大大减少了内存空间的浪费情况,如下图所示。
图2 定义静态成员变量后的内存地址的使用情况图
1.2.2 类在加载过程中给变量赋值
有一个变量,希望这个变量在类的初始化过程中就给其赋值,如何才能完成这样一个功能?
我们知道普通成员变量的初始化需要先要构建类的对象。只有当类的对象存在后,才能给成员变量进行赋值。所以普通成员变量完成不了我们前面提出的需求。
那如何完成这个功能呢?这里就可以用到静态成员变量。由于静态成员变量是随着类的加载而加载的,也就是说在定义类的过程中,给类分配内存的同时,也给静态成员变量分配了内存。所以类加载后,静态成员变量也同时加载完毕。不用构建对象,可以直接访问静态成员变量。
public class Car {publicstatic String myColor="white";publicstatic void main(String[] args) {System.out.println(“我的汽车颜色是”+myColor);}
}
运行结果为:
我的汽车的颜色是white
从运行的结果,可以发现不构建类的对象,一样可以访问静态成员变量。这就解决了我们提出的问题。
我们使用类名访问了静态成员变量,那么如果使用对象能够访问静态成员变量吗?我们按照下面的代码进行修改。
public class Car {publicstatic String myColor="white";publicstatic void main(String[] args) {Car car1=new Car();System.out.println("我的第一辆汽车颜色是"+myColor);System.out.println(“我的汽车颜色是”+myColor);}
}
运行结果为:
我的第一辆汽车颜色是white
我的汽车颜色是white
从运行结果我们发现静态成员变量不仅能够通过类访问,通过对象同样可以访问。
1.2.3 静态成员变量与成员变量的不同
静态成员变量和非静态成员变量虽然都是成员变量,但是其还是有不同之处,主要体现在以下几点:
1、存储地址不同,静态成员变量存储于数据共享区,成员变量存储于对象内存区;
2、生成的时间不同,静态成员变量在类生成的时候就同时存在了,而成员变量需要构建对象后才存在。
3、调用的不同,静态成员变量既能被类调用也能被对象调用,而成员变量只能被对象调用。
转载于:https://blog.51cto.com/zyejl/1791150
Java中静态关键字的使用方法介绍一相关推荐
- Java中this关键字及this()方法的使用
关于this关键字的使用: 1.this的单独使用: (1)每实例化一个对象就会实例化一个this. (2)this是一个对象中隐藏的引用变量,它保存了当前对象的内存地址,指向自身. (3)this存 ...
- 在java中使用关键字导入包_java中import关键字的使用方法
java中import关键字的使用方法 发布时间:2020-06-26 15:05:44 来源:亿速云 阅读:96 作者:Leah 这篇文章将为大家详细讲解有关java中import关键字的使用方法, ...
- java中的关键字static
原文链接: https://zhuanlan.zhihu.com/p/70110497 昨晚面试中被问到,没能回答出来.这篇答疑文章写得非常好,无一字可增删,遂直接复制. 在平时开发当中,我们经常会遇 ...
- [转载] Java中的关键字含义以及介绍
参考链接: C++和Java中static关键字的比较 Java关键字是有特别意义的标识符.用来表示一种数据类型,或者表示程序的结构等. Java关键字不能用作变量名.方法名.类名.包名和参数. 以下 ...
- java关键字 valotile_Java内存模型-jsr133规范介绍,java中volatile关键字的含义
最近在看<深入理解Java虚拟机:JVM高级特性与最佳实践>讲到了线程相关的细节知识,里面讲述了关于java内存模型,也就是jsr 133定义的规范. 系统的看了jsr 133规范的前面几 ...
- jsp页面中JSTL/EL标签引用java后台静态static字段的方法总结
转载自 jsp页面中JSTL/EL标签引用java后台静态static字段的方法总结 为什么使用该功能? 项目中的每个页面都包含产品名称.Logo.版本等信息,我希望修改一处,其它所有的全部跟着变 ...
- 在Java中实现单例模式的有效方法是什么? [关闭]
在Java中实现单例模式的有效方法是什么? #1楼 我使用Spring框架来管理我的单身人士. 它不会强制类的"单一性"(如果涉及多个类加载器,您将无法真正做到),但是它提供了一种 ...
- Java中Synchronized的用法(简单介绍)
简单介绍 synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调 ...
- java中静态变量和静态方法分别有什么特点?
java中静态变量和静态方法分别有什么特点? 悬赏分:0 - 解决时间:2006-4-10 10:28 提问者: vv_clear - 二级 最佳答案 为什么问了两次?再贴上另一篇 Thinking: ...
最新文章
- 污水处理中php是什么药剂,污水处理药剂有哪些?
- 用模板来进行类型检查。
- vue 高德地图多边形_Vue + 高德地图画矢量图
- 只腐蚀毛刺 腐蚀算法_避坑干货!8大卫浴五金选购指南,只买对的不买贵的
- Writing your first Django app--Django 第一步
- micropython编程软件下载_MicroPython可视化拼插编辑器:让硬件编程更智能!
- ASP.NET(C#)备份还原数据库
- Lottie 动画在项目中的使用总结
- Unity的WebGL发布在IIS上并加载资源的若干问题
- 我老板:你根本不懂 React!
- 小学生灯谜计算机,小学生谜语大全
- macos13 Ventura虚拟机安装无网络问题
- 03-MapStruct-基本的映射方法
- 一张图掌握10个表格和工具让你轻松做好项目管理
- 16色图都有哪些颜色?
- 记:银联科技岗 测试工程师
- php 输入经纬度查询位置,PHP根据一个给定经纬度的点,进行附近地点查询–合理利用算法...
- php数据清洗工具,phpcms一键清理数据还原方法
- textbf{}加粗英文字体失效
- Redis 配置详解 —— 全网最新最全
热门文章
- nginx telnet sshd
- 试验OSPF域内IP地址冲突会造成的安全问题
- 引人遐想,用 Python 获取你想要的 “某个人” 摄像头照片
- 学python有什么好处 学完可以做什么
- Java开发四年的程序员想再学习一门语言,该选着C还是Python呢?
- python初学到底怎么学?大神三天快速学习python的方法留下的笔记
- java在线编程题_阿里笔试题(2017在线编程题)-- 数串分组 --Java实现
- sql查询字段结果显示部分_SQL语句结构分析
- springcloud 子项目怎么导入_使用eclipse一步一步创建SpringCloud项目(二)—— 使用feign和ribbon调用微服务...
- 编程中new[]和delete[]应该如何使用?