关于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修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用,写法格式是:类名.静态成员.优点:被 ...
随机推荐
- scrollbar样式设置
转载:https://segmentfault.com/a/1190000012800450?utm_source=tag-newest author:specialCoder 一 前言 在CSS 中 ...
- 关于解决Tomcat服务器Connection reset by peer 导致的宕机
org.apache.catalina.connector.ClientAbortException: java.io.IOException: Connection reset by peer at ...
- LOJ2276 [HAOI2017] 新型城市化 【二分图匹配】【tarjan】
题目分析: 这题出的好! 首先问题肯定是二分图的最大独立集,如果删去某条匹配边之后独立集是否会变大. 跑出最大流之后流满的边就是匹配边. 如果一个匹配边的两个端点在一个强连通分量里,那这条边删掉之后我 ...
- 机器学习---最小二乘线性回归模型的5个基本假设(Machine Learning Least Squares Linear Regression Assumptions)
在之前的文章<机器学习---线性回归(Machine Learning Linear Regression)>中说到,使用最小二乘回归模型需要满足一些假设条件.但是这些假设条件却往往是人们 ...
- FWT(快速沃尔什变换)小结
在多项式卷积的处理中,我们实际上实现的是下面的一个式子 \[ C_k=\sum_{i+j=k}A_iB_j \] 然而事实上有些和(sang)蔼(xin)可(bing)亲(kuang)的出题人,并不会 ...
- k8s集群Canal的网络控制 原
1 简介 直接上干货 public class DispatcherServlet extends HttpServlet { private Properties contextConfigProp ...
- 解决pgpool启动报错 ifup[/sbin/ip] doesn't have setuid bit
1.问题出现: 在centos7启动pgpool服务器报错ifup[/sbin/ip] doesn't have setuid bit 2018-11-25 01:14:14: pid 38122: ...
- java开发代码中的50个性能优化细节
在java程序中,性能的大部分原因并不在java与语言,而是程序本身.养成好的编码习惯非常重要,能够显著地提升程序性能. 1:尽量在合适的场合使用单例 使用单利可以减轻加载的负担,缩短加载时间,提高加 ...
- java 数字左补齐0
NumberFormat nf = NumberFormat.getInstance(); //设置是否使用分组 nf.setGroupingUsed(false); ...
- Java虚拟机内存溢出异常--《深入理解Java虚拟机》学习笔记及个人理解(三)
Java虚拟机内存溢出异常--<深入理解Java虚拟机>学习笔记及个人理解(三) 书上P39 1. 堆内存溢出 不断地创建对象, 而且保证创建的这些对象不会被回收即可(让GC Root可达 ...