在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关键字的用法以及从内存角度解析的更多相关文章

  1. java中static关键字的作用

    java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...

  2. 【转】Java中static关键字用法总结

    1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ...

  3. 【java_需阅读】Java中static关键字用法总结

    1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ...

  4. Java中static关键字用法总结

      1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · ...

  5. java中synchronized关键字的用法

    在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法. 因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识. j ...

  6. Java关键字-----------------java中synchronized关键字的用法

    在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法. 因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识. j ...

  7. Java中static关键字的定义

    1.static存在的主要意义 static的主要意义是在于创建独立于具体对象的域变量或者方法.以致于即使没有创建对象,也能使用属性和调用方法! static关键字还有一个比较关键的作用就是 用来形成 ...

  8. Java:Java中static关键字作用

    static关键字最基本的用法是: 1.被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来 2.被static修饰的方法属于类方法,可以通过类名.方法名直接引用 ...

  9. JAVA中static关键字

    用法:是一个修饰符,用于修饰成员(成员变量,成员函数),不能用于修饰局部变量!被static修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用,写法格式是:类名.静态成员.优点:被 ...

随机推荐

  1. 解决Windows10中Virtualbox安装虚拟机没有64位选项

    今天想在Windows 10系统安装完Virtualbox虚拟机,然后打算装一个CENTOS系统,但是选择安装系统的时候竟然没有64位操作系统的选项,经过一阵Google,终于解决了,在这里盘点一下出 ...

  2. 加载hive-jdbc driver时报错:java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration

    这是因为缺少一个hadoop-common包,引入即可: <dependency> <groupId>org.apache.hadoop</groupId> < ...

  3. js的一些点

    1 闭包 闭包就是说,能够读取其他函数内部变量的函数. 其实这句话我不是很明白,因为我觉得闭包的作用是: 延迟函数执行 模拟私有变量 根据第二点的描述,应该是阻止其他东西访问自身私有成员,到了这怎么变 ...

  4. Redis的两种持久化方式详细介绍

    一,Redis是一款基于内存的数据库,可以持久化,在企业中常用于缓存,相信大家都比较熟悉Redis了,下面主要分享下关于Redis持久化的两种模式 1.半持久化模式(RDB,filesnapshott ...

  5. 纠错式教学法对比鼓励式教学法 -----Lily、贝乐、英孚,乐加乐、剑桥国际、优学汇、北外青少

    一.关于两种英语教学法的争议 在英语教学方面,主要有纠错式教学法(目前主要对应国内听说读写四位一体的教学法)和鼓励式教学法(目前对应国内听说为主的教学法),这两种教学方法其实是各有千秋,各有利弊的. ...

  6. 八.django模型系统(二)之常用查询及表关系的实现

    Ⅰ.常用查询  1.几个概念 每一个django模型类,都有一个默认的管理器,objects,查询就是依赖于objects管理器进行的(在创建时就被添加了). QuerySet表示数据库中对象的列表( ...

  7. golang-Beego-orm创建的坑

    Orm使用sqlites不识别问题 Idc string `description:"机房"` 这个description sqlites的数据库不识别.解决方法 去掉descri ...

  8. Angular记录(4)

    文档资料 箭头函数--MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_fun ...

  9. Java虚拟机—Java8内存模型(整理版)

    1.概述 对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要手动释放内存,不容易出现内存泄露和内存溢出问题.一旦出现内存泄露和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,排查错误 ...

  10. Windows API 调用示例

    Ø  简介 本文主要记录 Windows API 的调用示例,因为这项技术并不常用,属于 C# 中比较孤僻或接触底层的技术,并不常用.但是有时候也可以借助他完成一些 C# 本身不能完成的功能,例如:通 ...