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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,
且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
|