• static修饰属性、方法、代码块、内部类

  • static数据的生命周期就是类的生命周期,Java虚拟机会在加载类的过程中为静态变量分配内存,一个类的完整的生命周期会经历加载、连接、初始化、使用、和卸载五个阶段。
    图片说明

  • 静态的优缺点
    优点:
    1)对对象的共享数据提供单独空间的存储,节省空间,没有必要每一个对象都存储一份
    2)可以直接被类名调用,不用在堆内存创建对象
    3)静态成员可以通过类名直接访问,相对创建对象访问成员方便
    弊端:
    访问出现局限性。(静态虽好,但只能访问静态)

  • 关于静态的面试题
    1)Q:抽象的(abstract)方法是否可同时是静态的(static)?
    A:抽象方法将来是要被重写的,而静态方法是不能重写的,所以这个是错误的。
    2)Q:是否可以从一个静态(static)方法内部发出对非静态方法的调用?
    A:不可以,静态方法只能访问静态成员,非静态方法的调用要先创建对象。
    3) Q:static 可否用来修饰局部变量?
    A:static 不允许用来修饰局部变量
    4)Q:内部类与静态内部类的区别?
    A:静态内部类相对与外部类是独立存在的,在静态内部类中无法直接访问外部类中变量、方法。如果要访问的话,必须要new一个外部类的对象,使用new出来的对象来访问。但是可以直接访问静态的变量、调用静态的方法;
    普通内部类作为外部类一个成员而存在,在普通内部类中可以直接访问外部类属性,调用外部类的方法。
    如果外部类要访问内部类的属性或者调用内部类的方法,必须要创建一个内部类的对象,使用该对象访问属性或者调用方法。
    如果其他的类要访问普通内部类的属性或者调用普通内部类的方法,必须要在外部类中创建一个普通内部类的对象作为一个属性,外同类可以通过该属性调用普通内部类的方法或者访问普通内部类的属性
    如果其他的类要访问静态内部类的属性或者调用静态内部类的方法,直接创建一个静态内部类对象即可。
    5)Q:Java中是否可以覆盖(override) 一个private或者是static的方法?
    A:Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。

参考链接:https://blog.csdn.net/weixin_33273559/article/details/114116511