天天看点

this、super、static和final关键字总结1 this关键字2 super关键字3 static关键字4 final关键字

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 等。