关于Java中static关键字的用法以及从内存角度解析
在Java中,static可以用来修饰成员变量和成员方法。
修饰成员变量,称为静态成员方法
修饰静态方法,称为静态成员方法
搞清楚用法和区别之前,先搞清static声明的变量和普通非静态变量在内存的分布是怎样的,这样的话,理解起来会事半功倍的。
代码测试如下:
public class Person {
static String firstName;
String lastName;
public void showName(){
System.out.println(firstName+lastName);
}
public static void viewName(){
System.out.println(firstName);
}
}
public static void main(String[] args) {
Person p =new Person();
//p.firstName="张";
Person.firstName = "张";
p.lastName="三";
p.showName();
Person p2 =new Person();
//p2.firstName="王";
Person.firstName="王";
p2.lastName="隔壁";
p2.showName();
}
运行结果:
张三 王隔壁
在内存的结果分析如下:

静态成员变量加载在方法区,声明一次,即可被所有类对象所使用
非静态成员变量加载在堆内存,是每个对象内部维护的独立变量,互相之间没有影响
具体测试如下:
用法一:Static修饰成员变量
(1)修饰成员变量,叫做静态成员变量
作用:静态成员变量被当前所有类对象所共享
内存:存储在方法区内
调用:A:类名.静态成员变量 推荐使用
B:对象.静态成员变量 不正规
public static void main(String[] args) {
Person p =new Person();
//p.firstName="张";
Person.firstName = "张";
p.lastName="三";
p.showName();
Person p2 =new Person();
//p2.firstName="王";
Person.firstName="王";
p2.lastName="隔壁";
p2.showName();
}
运行结果:
张三 王隔壁
(2)修饰成员方法,叫做静态成员方法
作用:静态成员方法中只能直接的使用静态成员方法和调用其他静态成员方法
调用:A:类名.静态方法 推荐使用
B:对象.静态方法 不正规
public static void main(String[] args) {
Person p =new Person();
//p.firstName="张";
Person.firstName = "张";
p.lastName="三";
p.showName();
Person p2 =new Person();
//p2.firstName="王";
Person.firstName="王";
p2.lastName="隔壁";
Person.viewName();
}
运行结果:
张三
王
区别:非static修饰的成员变量和成员方法
(1)非static修饰的成员变量 也称实例变量
作用:是每个对象内部维护的独立变量,互相之间没有影响
内存:存储在堆内存中
调用:对象.成员变量 唯一方式
(2)非static修饰的成员方法 也称实例方法
作用:方法中可以使用静态和非静态的成员方法和成员变量
调用:对象.成员方法
关于Java中static关键字的用法以及从内存角度解析的更多相关文章
- java中static关键字的作用
java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...
- 【转】Java中static关键字用法总结
1. 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ...
- 【java_需阅读】Java中static关键字用法总结
1. 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ...
- Java中static关键字用法总结
1. 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · ...
- java中synchronized关键字的用法
在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法. 因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识. j ...
- Java关键字-----------------java中synchronized关键字的用法
在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法. 因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识. j ...
- Java中static关键字的定义
1.static存在的主要意义 static的主要意义是在于创建独立于具体对象的域变量或者方法.以致于即使没有创建对象,也能使用属性和调用方法! static关键字还有一个比较关键的作用就是 用来形成 ...
- Java:Java中static关键字作用
static关键字最基本的用法是: 1.被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来 2.被static修饰的方法属于类方法,可以通过类名.方法名直接引用 ...
- JAVA中static关键字
用法:是一个修饰符,用于修饰成员(成员变量,成员函数),不能用于修饰局部变量!被static修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用,写法格式是:类名.静态成员.优点:被 ...
随机推荐
- 《JAVA与模式》之工厂方法模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述工厂方法模式的: 工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymor ...
- 【CSA35G】【XSY3318】Counting Quests DP 拉格朗日反演 NTT
题目大意 zjt 是个神仙. 一天,zjt 正在和 yww 玩猜数游戏. zjt 先想一个 \([1,n]\) 之间的整数 \(x\),然后 yww 开始向他问问题. yww 每次给 zjt 一个区间 ...
- python学习日记(正则表达式)
定义 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Pyth ...
- MYSQL配置主从同步
MYSQL配置主从同步 mysql主服务器配置 vim /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql. ...
- zsh!oh-my-zsh! 好看的主题和插件以及我的.zshrc
题外话,由于clear每次打的很麻烦,可以直接使用ctrl+L清屏,和clear等效. First: 安装好zsh和oh-my-zsh Second: 接下来就可以开始享受了 主题:cloud 满 ...
- django rest framework pagination
REST framework 包含对可定制分页样式的支持.这使你可以将较大的结果集分成单独的数据页面. 分页 API 支持: 以分页链接的形式作为响应内容的一部分. 以分页链接的形式包含在响应的 he ...
- MFC:编辑区 Edit 的属性及使用
Edit Control 编辑控件是 MFC 中使用较多的控件之一 1. Edit 的属性 Acccept Files -> True 控件接受拖放文件 Multiline -> True ...
- windows下连接smb服务器
在运行里面输入:\\xxx.xxx.xxx.xxx 即可访问远程服务器
- QPS从0到4000请求每秒,谈达达后台架构演化之路
达达是全国领先的最后三公里物流配送平台. 达达的业务模式与滴滴以及Uber很相似,以众包的方式利用社会闲散人力资源,解决O2O最后三公里即时性配送难题(目前达达已经与京东到家合并). 达达业务主要包含 ...
- css/css3 未知元素宽高,垂直居中和水平居中
未知元素的宽高情况下 垂直居中和水平居中 第一种 flex盒布局 (推荐) /*弹性盒模型*/ /*主轴居中对齐*/ /*侧轴居中对齐*/ .ele{ display:flex; justify-c ...