this、static
this 关键字
类不可以定义 this 属性 , 但是每个类都有一个 隐藏起来的 this 属性 .
每个对象被创建了 , 都会给其属性分配空间 , 也会给 this 属性 分配 , 并且给其存储了一个值
该值是当前对象本身的地址。
this 始终指向当前对象本身 .
this 有三个作用 和 一个注意点
作用 :
this([实参]); 这种格式可以在构造器中 调用本类的其他构造器.
this([实参]);必须位于第一行
this.属性 ;
这种用法可以 区别成员变量 和 局部变量
this.方法
这种用法可以 调用当前对象的方法
但是实际上 不用 this 和 使用 this 没有任何区别
一个注意点 :
this 不能出现在 static 修饰的方法 和 代码块中
因为是 static 加载机制的问题
static 关键字
static 是静态修饰符 , 可以修饰 属性 方法 代码块 类(内部类)
static 修饰的元素 都会具有 static 的特性
特性 1
静态的元素 优先被加载到内存
当某个类被使用时 , 会先把这个类加载到 jvm 内存里 ,
先加载该类的静态成员,然后再加载非静态的元素 .
静态的元素 优先被加载 , 在静态元素加载的时候 , 此时内存里还不会有 非静态元素 .
特性 2
静态的元素 只被加载一次
特性 3
静态的元素 不依附对象 , 静态的元素 依附于 类 .
特性 4
静态的成员 在内存里永久存在 不会消失
使用 :
static 修饰属性
1. 不依附对象 可以直接使用
普通属性在对象创建受分配空间
静态属性 在类加载就分配空间了
2. 只加载一次
普通的成员 加载多次 每创建一次就加载
而静态的成员 只会加载一次
static 不可以修饰局部变量 因为冲突
局部变量 在方法调用时 分配空间 方法结束时回收空间
static 修饰方法
只加载一次 不依附对象 依附于类
使用方式
1. 类名.方法名 (推荐使用)
2. 对象.方法名
static 修饰的方法 又叫静态方法 类方法
静态方法只能访问静态的成员
非静态方法 可以访问静态的成员 也可以访问非静态成员
代码块: 一对大括号就是代码块
在方法之外的代码块 何时可以执行呢 ?
在构建对象时 可以执行
构建一次对象 执行一次
它在构造器之前执行
代码块没有数量限制 , 执行时按照顺序执行
属性的声明且赋值 是会被拆分成 声明 + 代码块赋值
static 修饰代码块
又称静态代码块
优先加载 只加载一次
只能访问静态元素 不能访问非静态元素