Java-关键字

183 阅读3分钟

一. this

this只能在方法内部使用,表示对"调用方法的对象"的引用。

实例方法中隐藏的参数就是this,所以可以在方法内部直接调用同一个类的另一个方法.

  1. 当方法中的局部变量和成员变量重名时,可以用this表明用的是对象的成员变量
class Animal{
    private String name;
​
    public Animal(String name) {
        this.name = name;
    }
}
  1. 当方法需要该类的对象作为参数时,可用this代替
class Barber {
    static People cutHair(People people) {
        people.loseHair();
        return people;
    }
}
​
class People {
    People getNewHair() {
        return Barber.cutHair(this);
    }
    public void loseHair() {
    }
}
  1. 外部类名.this的形式表示外部类的对象的引用
public class Outer {
    String color = "red";
​
    class Inner {
        void print() {
            String value = Outer.this.color;
        }
    }
}
​
  1. 在构造函数中可以用this调用另一个构造函数
class Student {
    private String name;
    private int age;
​
    public Student(String name) {
        this(name, 20);
    }
​
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
  1. 当方法需要返回当前对象的引用时,可以return this.
class NumberResult {
    int i = 0;
​
    NumberResult increase() {
        i++;
        return this;
    }
​
    void print() {
        System.out.printf("i = " + i);
    }
}

this指向一个对象实例,所以静态方法中没有this引用

二. super

super指向 离自己最新的父类对象的指针

  1. super.xxx引用父类的成员或方法
class Person{
    String name ="father";
}
class Child extends Person{
    String name = "son";
    public void print(){
        System.out.printf("子类 = "+name+", 父类 = "+super.name);
    }
}
  1. 调用父类的构造方法
class Person{
    String name ="father";
    Person(String name){
        this.name = name;
    }
}
class Child extends Person{
    String name = "son";
    Child(String name){
        super(name);
        this.name = name;
    }
​
    public void print(){
        System.out.printf("子类 = "+name+", 父类 = "+super.name);
    }
}

三. static

static关键字可以修饰变量,方法,内部类,块

1. static变量

static只能修饰成员变量,不能修饰局部变量
-static变量是对于整个类而言的,但是局部变量只用在某个方法内部使用

静态变量和非静态变量的区别:
静态变量被所有的对象共享,内存中只有一份[方法区内],在类初次加载时会被初始化。
非静态变量是对象所拥有的,在创建对象时被初始化,存在多个副本,各个对象拥有的副本互不影响。
static成员变量的初始化顺序按照定义的顺序进行初始化

2. static方法

static方法没有this对象
在static方法的内部不能调用非static方法,反之可以。
可以在没有创建对象的前提下,通过类本身来调用static方法
构造方法中可以使用this,所以构造方法不是静态的

3. static内部类

内部类:1.只为其外部类使用 2.含有外部类引用 3.可以直接访问外部类属性 4.每个内部类能独立继承一个接口

static内部类不含有外部类的引用

4. static块

类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次【根据class加载原理 每个类加载一次 使用双亲委托加载】

四. final

final可以修饰变量,方法和类

final变量 一旦被赋值,不能被修改 (final修饰的成员变量必须由程序员显式的指定初始值,系统不会隐式初始化)

  1. final修改成员变量必须要赋值,而且只能初始化一次。

如果修饰的成员变量是一个引用,指向引用的内容是可以改变的

  1. final方法不能被重写

  2. final类无法被继承