关于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修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用,写法格式是:类名.静态成员.优点:被 ...
随机推荐
- vue scoped >>> & git conflict <<<<<<< HEAD
vue scoped >>> & git conflict <<<<<<< HEAD Q: ???还有这操作 A: > > ...
- 修改MAC地址的方法 破解MAC地址绑定(抄)
修改MAC地址的方法 破解MAC地址绑定 网卡的MAC地址是固化在网上EPROM中的物理地址,是一块网卡的“身份证”,通常为48位.在平常的应用中,有很多方面与MAC地址相关,如有些软件是和MAC ...
- 关于mysql 自定义@row的使用
应用场景:在对成绩或者积分排名时,往往需要显示排名; 成绩排名:相同分数的人,名次相同 Select s.Score, case when @rowtotal = s.Score then cast( ...
- 修改linux下yum镜像源为国内镜像
修改为163yum源-mirrors.163.com 1.首先备份系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.repo [root@localhost ~]# m ...
- 什么是SerDes,serializer/deserializer?
序列化器与反序列化器(SerDes,serializer/deserializer)是一种进行串行数据和并行数据相互转换的收发集成电路(IC).发送器部分是一个串行到并行的转换器,接收器部分是一个并行 ...
- 路径分隔符不一致,导致windows下不能开发
最近想要基于YAPI扩展开发一个自己的API管理平台,但是发现在windows下直接跑会报错,在Mac跑就没事 报的错是: Uncaught TypeError: $export is not a f ...
- I/O模型系列之四:两种高性能IO设计模式 Reactor 和 Proactor
不同的操作系统实现的io策略可能不一样,即使是同一个操作系统也可能存在多重io策略,常见如linux上的select,poll,epoll,面对这么多不同类型的io接口,这里需要一层抽象api来完成, ...
- C++题目:回文数判断
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same back ...
- 【译】使用 Flutter 实现跨平台移动端开发
作者: Mike Bluestein | 原文地址:[https://www.smashingmagazine.com/2018/06/google-flutter-mobile-developm ...
- 微信小程序常见的坑
wxml的标签跟html里面的一些标签是一样的,比如view标签相当于div标签,text标签相当于span标签. 在微信小程序中,表单元素都是原生组件,微信小程序中原生组件层级最高,所以在用inpu ...