1 this关键字
- 调用本类中定义的成员变量,如果本类中没有,则继续从父类中查找。
- 调用本类中定义的成员方法
- 在本类的构造方法中调用本类其他构造方法,调用时要放在构造方法的首行
public class Student { //定义一个类,类的名字为student。 public Student() { //定义一个方法,名字与类相同故为构造方法 this(“Hello!”); } public Student(String name) { //定义一个带形式参数的构造方法 } }
this 的本质就是“创建好的对象的地址”!由于在构造方法调用前,对象已经创建。因此,在构造方法中也可以使用 this 代表“当前对象”。
普通方法中,this 总是指向调用该方法的对象。构造方法中,this 总是指向正要初始化的对象。
this 不能用于 static 方法中。
2 super关键字
- 调用父类中定义的成员变量
- 调用父类中定义的成员方法
- 在子类的构造方法中调用父类的构造方法,调用时要放在构造方法的首行
// 子类 public class Student extends Person{ //定义一个类,类的名字为student。 public Student() { //定义一个方法,名字与类相同故为构造方法 super(“Hello!”); //调用父类的构造方法 } } // 父类 public class Person{ public Person(String name) { //定义一个带形式参数的构造方法 } }
super“可以看做”是直接父类对象的引用。可以通过 super 来访问父类中被子类覆盖的方法或属性。
this和super总结:
- 在构造器中,this和super只能出现一个
- 当构造器中不显式调用super和this中的一个,默认调用的是父类无参的构造方法。没有父类的话调用object类的无参构造方法。所以子类拥有父类中的所有属性和方法,但是由于权限的限制,在子类中无法访问父类中被某些权限限定符修饰的属性和方法。
this和super的区别
区别点 | this | super | |
---|---|---|---|
1 | 访问属性 | 访问本类中的属性,如果本类中没有此属性,则从父类中继续查找 | 访问父类中的属性 |
2 | 调用方法 | 访问本类中的方法 | 直接访问父类中的方法 |
3 | 调用构造器 | 调用本类构造器,必须放在构造器的首行 | 调用父类构造器,必须放在子类构造器的首行 |
4 | 特殊 | 表示当前对象 | 无此概念 |
3 static关键字
在类中,用 static 声明的成员变量为静态成员变量,也称为类变量。 类变量的生命周期和类相同,在整个应用程序执行期间都有效。它有如下特点:
- 为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化。
- 对于该类的所有对象来说,static 成员变量只有一份。被该类的所有对象共享!!
- 一般用“类名.类属性/方法”来调用。(也可以通过对象引用访问静态成员)
- 在 static 方法中不可直接访问非 static 的成员。成员方法可以直接访问成员变量、成员方法、静态变量和静态方法。静态方法不可以直接访问成员变量和成员方法,只能直接访问静态变量和静态方法。
构造方法用于对象的初始化!静态初始化块,用于类的初始化操作!在静态初始化块中不能直接访问非 static 成员。
静态初始化块执行顺序:
- 上溯到 Object 类,先执行 Object 的静态初始化块,再向下执行子类的静态初始化块,直到类的静态初始化块为止。
- 构造方法执行顺序和上面顺序一样!!
4 final关键字
final 关键字的作用:
- 修饰变量: 被它修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。
- 修饰方法:该方法不可被子类重写。但是可以被重载!
- 修饰类: 修饰的类不能被继承。比如:Math、String 等。