static修饰符与final修饰符

1、final修饰符: 修饰类,方法,属性,局部变量


  • 当修饰方法时,被final修饰的方法称为最终方法,不能重写
  • 当修饰类时,被final修饰的类是最终类,不能被继承,例如: String
  • 被final和static修饰的变量(此时称之为常量)的名字要大写

2、static修饰符


2.1修饰的对象:

  • 类中的成员(属性[静态变量或类变量]和方法[静态方法或类方法])
  • 静态属性的特点:
    • 静态变量被所有对象共享
    • 随着类的加载而加载,随着类的消失而消失,和对象的创建无关
    • 可以直接被类名调用
  • 方法的特点:
    • 静态方法优先于对象存在,在静态方法中无法访问与对象相关的实例变量(这时候对象还没有创建,其属性也就没有)
    • 静态方法无法访问实例变量
    • 静态方法可以访问静态变量
    • 实例方法可以访问静态变量
    • 静态方法无法访问实例方法
    • 静态方法只能访问静态方法或静态变量,无法访问非静态
    • 实例方法可以访问静态(属性和方法)和非静态(属性和方法)
    • 静态方法无法访问this,super(this,super是属于对象的)
    • 使用子类可以访问父类中的静态方法和静态变量

2.2静态变量与实例变量的区别:

  • 所属区域不同
    • 静态变量: 静态变量属于类
    • 实例变量: 实例变量属于对象
  • 调用的方式不同
    • 静态变量: 可以被类名调用,也可以使用对象调用
    • 实例变量: 只能被对象调用
  • 存储的位置不同
    • 静态变量: 存储在方法区
    • 实例变量: 存储在堆中
  • 加载顺序不同
    • 静态变量: 随着类的加载而加载,随着类的消失而消失,和对象的创建无关
    • 实例变量: 随着对象的创建而创建,随着对象的销毁而销毁
  • 如何使用静态方法和实例方法:
    • 如果方法中不需要访问类中的属性(实例变量),那么就可以把方法定义为静态的,方便使用
    • 如果方法中需要访问类中的属性(实例变量),那么就必须方法定义为非静态的
  • 静态代码块:
    • 语法:

      

    • 当类第一次被加载到内存时,会在最后调用静态代码块且只调用一次
  • 构造代码块
    • 语法:

      

    • 构造代码块创建对象的时候调用,在构造代码块写一些构造器中的共性,会在构造器中最先调用构造代码块,后执行自定义初始化
        • 创建对象时做的事情:
        • 先看类是否加载,如果类是第一次使用会加载类
        • 接着加载类中的静态成员
        • 调用静态代码块
        • new:
          • 在内存中为对象分配空间
          • 确定对象的首地址
          • 为实例变量进行默认初始化
          • 如果有显示初始化,在进行显示初始化
          • 调用构造器
          • 调用父类的空参构造器super()
          • 调用构造代码块
          • 执行自定义初始化

阅罢此文,如果您觉得本文不错并有所收获,请【打赏】或【推荐】,

也可【评论】留下您的问题或建议与我交流。 
你的支持是我不断创作和分享的不竭动力!

 

作者:寒冰雪
出处:https://home.cnblogs.com/u/snow1234/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,
且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/snow1234/p/7191726.html