静态变量&静态方法

静态变量又叫做类变量,静态方法又被称为类方法——均被static修饰

未被static修饰的成员变量和方法分别被称为实例变量实例方法

(1)静态方法中不需要它所属类的任何实例就可以访问,所以在静态方法中不可以使用this关键字

(2)静态方法中不可直接访问所属类的实例变量和实例方法,但可以直接访问所属类的静态变量和静态方法

如图所示,如果在静态方法中想要直接访问所属类的实例变量和实例方法或使用this关键字,编译器都会报错

(3)静态变量(方法)的访问方式:类名.变量名(方法名)

 实例变量(方法)需要先将类实例化后才可访问:对象名.变量名(方法名)

如图所示,未实例化时使用“类名.变量名(方法名)”就可以直接访问静态变量(方法),但无法访问相应类的实例变量和实例方法

如图所示,当将类实例化后,使用“对象名.变量名(方法名)”就可以直接访问实例变量(方法),但无法访问相应类的静态变量和静态方法

(4)在内存中,实例/静态成员的存储形式大致如图

所有静态成员共享一份内存——静态变量某种意义上具有全局性质

        而不同实例间的实例变量彼此互不干涉

详解:

当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址。当该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行。
        类方法在该类被加载到内存时,就分配了相应的入口地址。从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。 类方法的入口地址直到程序退出时才被取消。
注意:
        当我们创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址。
        也就是说,方法的入口地址被所有的对象共享,当所有的对象都不存在时,方法的入口地址才被取消。

总结:
        类变量和类方法与类相关联,并且每个类都会出现一次。 使用它们不需要创建对象。
        实例方法和变量会在每个类的实例中出现一次。

以下是一个代码范例:

public class staticclass {public static int count = 0; //静态变量public int num =0; //非静态变量public static void method1(){ //静态方法System.out.println("正在访问静态方法(count++)....");System.out.println("\tpre-count = "+count);count++;//num++; //静态方法中不可以访问实例变量//method2();  //静态方法中不可以访问实例方法//System.out.println(this.num); //静态方法中不可以使用this关键字System.out.println("\tpst-count = "+count);}public void method2() //实例方法{System.out.println("正在访问实例方法(count+2,num+3)....");System.out.println("\tpre-count = "+count);System.out.println("\tpre-num = "+num);count+=2;num+=3;System.out.println("\tpst-count = "+count);System.out.println("\tpst-num = "+num);}public static void main(String[] args) {System.out.println("初始时,count = "+staticclass.count); //访问静态变量:类名+变量名staticclass.method1();//访问静态方法:类名+变量名staticclass a = new staticclass();System.out.println("\na未操作前,count = "+staticclass.count);System.out.println("         num = "+a.num);a.method2();staticclass b = new staticclass();System.out.println("\nb未操作前,count = "+staticclass.count);System.out.println("         num = "+b.num);b.method2();}
}

运行结果如图,可印证以上三点:

Java中的静态变量静态方法相关推荐

  1. 非静态方法可以访问Java中的静态变量/方法吗?

    "非静态方法可以访问静态变量或调用静态方法"是Java中有关静态修饰符的常见问题之一,答案是, 是的 ,非静态方法可以访问静态变量或调用静态方法. Java中的方法. 这没有问题, ...

  2. java 静态变量方法,java中的静态变量和静态方法

    java中的静态变量和静态方法 发布时间:2020-06-25 20:15:28 来源:亿速云 阅读:100 作者:Leah 今天就跟大家聊聊有关java中的静态变量和静态方法,可能很多人都不太了解, ...

  3. Java中的静态变量和静态方法

    决定哪些方法或变量声明为静态的,是类设计时的关键步骤. 静态变量(static variable)有时也称为类变量(class variable),它由类的所有实例共享.对于类的所有对象来说,静态变量 ...

  4. java 中的静态变量,静态代码块,动态代码块,构造方法执行顺序的深入探究

    要想完全弄懂这个执行顺序,需要我们先了解几个概念. 首先是类加载与对象的构造,类加载就是在第一次调用这个类的时候jvm虚拟机会通过类加载器在一个叫做方法区的逻辑内存中将所要用到的类的信息存放在里边,其 ...

  5. Java中的静态变量、静态方法问题

    由关键字static所定义的变量与方法,分别称为静态变量和静态方法,它们又都被称为静态成员 1.静态方法 无需本类的对象也可以调用此方法,调用形式为"类名.方法名",静态方法常常为 ...

  6. java中的静态变量的作用域_Java基础学习03-变量、常量、作用域

    在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: type identifier [ = value][, identifier [= value] ...] ; Java语言支 ...

  7. java静态函数_(基础)java中的静态变量与静态函数Static

    静态static 静态出现最大的原因:节约内存,只存一份,由对象共享这个属性. 静态的作用是什么? 场景: 当每个对象都有一个相同的属性,如country="China",那么每个 ...

  8. java中的静态变量的作用域_详解JAVA中static的作用

    1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...

  9. java中的静态初始化是什么意思,Java中static静态变量的初始化完全解析

    静态变量初始化顺序 1.简单规则 首先先看一段最普遍的JAVA代码: ? 这里先猜下控制台输出结果是什么? OK, 或许你已经猜到下面了结果了,那么你还是熟悉Java的. 复制代码 代码如下: 0 1 ...

最新文章

  1. python >> 和 <<
  2. 论文整理集合 -- 吴恩达老师深度学习课程
  3. 真正的 Tornado 异步非阻塞
  4. rsync的基本使用
  5. 2021-03-15 final value theorem 终值定理
  6. 呵护宝宝健康成长 飞鹤携手第四范式天枢打造精准智能推荐
  7. 漫游kafka实战篇之搭建Kafka开发环境
  8. html css纵向滑动列表,JS实现的简洁纵向滑动菜单(滑动门)效果
  9. 【孤儿进程】孤儿进程组、守护进程
  10. 魔改和上线你的合成大西瓜,最全教程!
  11. mysql不能访问order,使用ORDER BY时,MySQL不使用索引(“Using filesort”)
  12. java参数传递的乱码问题
  13. mysql如何修改字段名字_mysql如何修改字段名称
  14. dateutil 日期计算_时间工具——DateUtil
  15. Python基础 - 20210425 - 基础(命名规范,注解,基础语法)
  16. 店盈通:拼多多直通车推广怎么操作?技巧有哪些?
  17. Balsamiq Wireframes 免费安装
  18. 量子计算到底是个什么鬼?
  19. [Android]小米5刷root过程记录
  20. 【bug解决】TypeError: forward() missing 1 required positional argument: ‘x‘

热门文章

  1. 如何选择CMWAP或CMNET进行拨号
  2. 安卓手机移动办公App软件的开发
  3. 什么是cookie?什么是session?
  4. python中的异步非阻塞 async await
  5. 我也在媒体平台冲浪ing
  6. [附源码]计算机毕业设计基于springboot的连锁药店销售管理系统
  7. 如果你的拯救者笔记本电脑卡顿,那么可以这样试试
  8. Python Matplotlib绘制渐变色柱状图(bar)并加边框和配置渐变颜色条(colorbar)
  9. 3D-HEVC/HTM测试序列下载地址(官方完整版)
  10. 计算机图形学笔记十一:Ray Tracing1(阴影,光线追踪基本原理)