Java面向对象02
类相关的常用关键字
new
关键字
- 用于实例化一个对象
- 根据参数调用类构造方法 并在堆内存开辟内存空间
static
关键字
- 静态修饰符 可以修饰变量和方法
- 被static修饰的变量称作静态变量 被static修饰的方法称作静态方法
- 静态数据与类本身绑定
- 区分于实例变量 实例变量与对象绑定 一个对象对应一个实例变量
- 调用时要通过类名直接调用
- 可以通过对象调用静态属性或方法**(不建议使用)**
- static关键字还可以用于定义静态代码块结构
class A {
public staitc final int MAX_LENGTH = 10;
public staitc void doThing() {...}
}
public class Test {
public static void main(String[] args) {
System.out.println(A.MAX_LENGTH);
A a = null;
a.doThings();
}
}
this
关键字
- this永远指向调用该方法的对象 是指向对象的一个引用
- 不能在静态方法使用 因为静态方法是类方法 没有对象
- 多数情况下this都可以省略 当局部变量与成员变量命名相同时 可以使用this加以区分
- 在构造方法中使用this()用于指向其他构造方法
- 只能写在构造方法第一行 而且只能有一个
- 不能与super()一起使用
Class A {
int id;
public A () {
this(0);
}
public A (int id) {
this.id = id;
System.out.println(this);
}
}
super
关键字
- 与this类似 super指向的是其父类 但super不是引用 不会指向父类实例 因此不能单独使用
- 通过super() 调用父类构造方法
- 与this()使用方式类似 只能放在第一行 而且只能写一次 不能和this()同时出现
- 构造方法中如果不写this()/super()时 默认自动调用无参父类构造方法super()
- this()/super()任意一个显式调用时 则不会调用父类无参构造方法
- 调用了父类无参构造super()时 如果父类没有无参构造 编译器会报错
- 因此 在任何情况下 都建议编写一个无参构造方法 防止出错
- Java中允许子类存在于父类相同的变量 这个时候可以使用super加以区分
extends
关键字
- 在类名之后使用 说明该类继承的父类
- 在Java中所有类的都是Object的子类 默认没有写extends的类 默认会直接继承Object类
- Java中类只允许单继承 接口直接存在多继承
- 子类
- 父类
- 继承时 私有变量/方法不会被继承 构造方法不会被继承 其余的数据都会被继承给子类
final
关键字
- 最终修饰符 用于修饰类/变量/方法
- final修饰的类 不能被继承
- final修饰的方法 不能被覆盖
- final修饰的变量 只能被赋值一次 随后不允许再次修改
- 当final修饰成员变量时 此时编译不再自动给定初始值 必须手动赋值
- 赋值动作只要在实例化完成之前做好即可 可以在声明时直接赋值 也可在构造方法中进行赋值
- 当final变量的类型是引用数据类型时 因为只能赋值一次 所以一旦指向了内存地址 随后不能更改
- 因为不能重新执行内 所以final修饰的引用数据在JVM关闭前不会被释放
- 修饰引用数据类型时 只是引用不能重新赋值 引用指向的对象内部数据可以任意修改 因为修改也不是新的对象 还是之前的对象
- final修饰的引用数据类型不能赋值为
null
- 因为final修饰的变量无法二次修改 通常在类中与static连用 形成静态常量 此时建议标识符全部大写 使用下划线
_
分割单词
package
关键字
import
关键字
- 向当前类中导包 Java程序默认导入
java.lang.*
abstract
关键字
interface
关键字
implements
关键字
- 用在类后 表明该类实现哪些接口
- Java允许多实现 即实现多个接口
- 实现接口时必须实现内部的所有方法