关键字——this,super,static,final

this

  • 理解为当前对象
//测试
public static void main(String[] args){
     Person person = new Person(3, "xiaoMing"); 
}
//创建一个类:
class Person{
      int age;
      String name;
      public Person(int age,String name){
            this.age = age;  //this:当前对象,在这里是指person这个对象。
            this.name = name;
      }
}
  • 可以调用构造器
    ①调用本类的其他构造器
    ②不能调自己
    ③构造器中使用this,则必须放在构造器的 首行
class Person{
      int age;
      String name;
      public Person(int age){  //①
            this.age = age; 
      }
      
      public Person(int age, String name){
            this(age); //调用① 构造器
            this.name = name;
      }
}
//测试:
public static void main(String[] args){
     Person person = new Person(3, "xiaoMing"); 
}

super

  • ① 若子类的属性(方法等)和父类的重名,可以用super.属性(方法等)调用父类的属性(方法等)【重写是个范例】
  • ② super调用父类构造器
    在子类构造器中声明super,则必须声明在首行,this和super不能同时出现
    在构造器首行,没有显式出现super,默认是super()构造器

static

  • 不能修饰构造器
  • static修饰的变量,叫静态变量,没有用static修饰的变量叫 实例变量,静态变量内存种独一份,被所有对象共享,当且仅当类被初次加载时会被初始化,而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
  • 静态变量在内存中存在一份,在方法区中的静态域中。
  • static修饰方法,叫静态方法,静态方法中只能声明静态属性,方法。
    非静态方法即可调用静态方法也可调用非静态方法
  • 在static方法中,不能使用this和super关键字

final

  • final修饰的属性可以被赋值的地方有:显式初始化,代码块中初始化,构造器中初始化
class Person{
      int age ;
      String name;
      final int C = 3; //显式初始化
      final int B ;
      final int A ;

      {
            B = 3; //代码块中赋值
      }

      public Person(){
            A = 3; //构造器中赋值
      }

      public Person(int n){
            A = n;  //若用构造器赋值,则每写一个构造器都要赋值一次,
                        //因为有的构造器不一定用
      }
}
  • 修饰类:此类不能被继承,'断子绝孙',不能说明该类中的属性和方法是final的
  • 修饰方法:此方法不能被重写,但是仍然可以继承
  • 修饰属性:
    ①若该属性是基本数据类型,则不能被修改
    ②若该属性是引用数据类型,如数组,对象,则该对象,数组的值可以被修改,
    但是引用不能修改
//1.
class Dog1{
    String name;
    //编译错误,age必须赋值
    final int age = 3;
}
//测试
final Dog1 dog = new Dog1();
        System.out.println(dog);
        dog.name = "dd";
        System.out.println(dog.name); //输出dd
        dog.name = "cc";
        System.out.println(dog.name); //输出cc,里面的值可以改

        dog = new Dog1(); //编译错误,引用不能修改
//2.
final int[] arr = {11,33,44};
        arr[2] = 2; //可以修改
        System.out.println(arr[2]); //输出2
        arr = new int[]{1};  //error,编译错误,引用不能修改
  • final还可以修饰局部变量:作用就是让局部变量不能再修改了
class Person{
      public void show(final int a){
           a = 3; //error,表示a只能使用不能修改
      }

      public void show2(int a){
            final int b = 3; //表示b不能修改了
            b = 4; //error
      }
}

static final 修饰属性:表示全局常量
原文地址:https://www.cnblogs.com/huyuqing/p/14320065.html