■ static修饰符与final修饰符:
★ static修饰符:
1. 修饰的对象:
类中的成员(属性[静态变量或类变量]和方法[静态方法或类方法])
2. 静态属性的特点:
1. 静态变量被所有对象共享
2. 随着类的加载而加载,随着类的消失而消失,和对象的创建无关
3. 可以直接被类名调用
3. 静态方法的特点:
1. 静态方法优先于对象存在,在静态方法中无法访问与对象相关的实例变量(这时候对象还没有创建,其属性也就没有)
2. 静态方法无法访问实例变量
3. 静态方法可以访问静态变量
4. 实例方法可以访问静态变量
5. 静态方法无法访问实例方法
6. 静态方法只能访问静态方法或静态变量,无法访问非静态
7. 实例方法可以访问静态(属性和方法)和非静态(属性和方法)
8. 静态方法无法访问this,super(this,super是属于对象的)
9. 使用子类可以访问父类中的静态方法和静态变量
4. 静态变量与实例变量的区别:
1. 所属区域不同
静态变量: 静态变量属于类
实例变量: 实例变量属于对象
2. 调用的方式不同
静态变量: 可以被类名调用,也可以使用对象调用
实例变量: 只能被对象调用
3. 存储的位置不同
静态变量: 存储在方法区
实例变量: 存储在堆中
4. 加载顺序
静态变量: 随着类的加载而加载,随着类的消失而消失,和对象的创建无关
实例变量: 随着对象的创建而创建,随着对象的销毁而销毁
5. 如何使用静态方法和实例方法:
1. 如果方法中不需要访问类中的属性(实例变量),那么就可以把方法定义为静态的,方便使用
2. 如果方法中需要访问类中的属性(实例变量),那么就必须方法定义为非静态的
6. 静态代码块:
1. 语法:
2. 当类第一次被加载到内存时,会在最后调用静态代码块且只调用一次
7. 构造代码块
1. 语法:
2. 构造代码块创建对象的时候调用,在构造代码块写一些构造器中的共性,
会在构造器中最先调用构造代码块,后执行自定义初始化
3. 创建对象时做的事情:
1. 先看类是否加载,如果类是第一次使用会加载类
2. 接着加载类中的静态成员
3. 调用静态代码块
4. new:
1. 在内存中为对象分配空间
2. 确定对象的首地址
3. 为实例变量进行默认初始化
4. 如果有显示初始化,在进行显示初始化
5. 调用构造器
1. 调用父类的空参构造器super()
2. 调用构造代码块
3. 执行自定义初始化
★ final修饰符: 修饰类,方法,属性,局部变量
1. 当修饰方法时,被final修饰的方法称为最终方法,不能重写
2. 当修饰类时,被final修饰的类是最终类,不能被继承,例如: String
3. 被final和static修饰的变量(此时称之为常量)的名字要大写