this关键字

    1. this关键字表示当前对象本身,一般用于类的内部,其内部存在一个地址,指向当前初始化的对象本身
    2. new 一个对象时,实际上产生了两个引用,一个是供类Dog内部调用其成员变量和成员方法的this关键字,一个是供外界程序调用实例成员的dog

    this的三种用法

    1. 调用成员变量:解决局部变量和成员变量之间的二义性,此时必须使用
    2. 调用其他成员方法:同一个类中非static方法之间互调(此时可以省略this,但不建议省略)
    3. 调用本类其他构造方法:this可以调用本类其他构造方法 this(实参1,实参2...);
    4. 注意:!!在构造方法中调用本类方法必须写到构造方法第一句,否则会出现编译错误

    super关键字

    1. 子类访问父类成员时一定要用super,super调用构造方法必须写在子类构造方法的第一句。
    2. 如果子类构造方法没有显式调用父类任何构造方法时,那么jvm会默认调用父类的无参构造super()
    3. 访问父类非私有字段
    4. 访问父类非私有方法
    5. 访问父类构造方法 super(); super(实参1,实参2,...);

    static修饰符

    1. static关键字表示静态,可以修饰成员变量构成静态变量,修饰成员方法构成静态方法。
    2. 静态变量和静态方法都归类所有,称为类的静态成员,用static关键字修饰
    1. 静态变量
    2. //在类中,用static关键字修饰的成员变量称为静态变量,归类所有,也称为类变量,类的所有实例/对象都可以访问,被类的所有实例或对象所共享。
    3. 语法 :
    4. [修饰符] static 数据类型 成员变量 [=初始值];
    5. 静态方法
    6. //static 也可以修饰方法称为静态方法,归类所有,也称类方法。
    7. [修饰符] static 返回值类型 方法名(形参列表){
    8. }
    9. 静态方法访问方式
    10. 类名.静态变量 // 推荐写法
    11. 对象/实例.静态变量
    12. //静态变量和静态方法称为类的静态成员,归类所有, 其他地成员变量和成员方法称为类的实例成员,归对象所有。
    13. 静态方法特性
    14. //静态方法中只能访问 类的静态成员,不能访问实例成员, 实例方法中可以访问类的静态成员

    final修饰符

    1. final 表示最终的意思,可以修饰类、方法、局部变量,甚至可以修饰成员变量
    2. final 修饰类表示最终类。最终类不能被继承。
    3. 如果一个方法被final修饰,称为最终方法。最终方法不能被重写。

    常量

    1. final修饰的局部变量称为常量,常量只能赋值一次,不能再重新赋值。
    2. 基本数据类型:表示的值不能改变
    3. 引用数据类型:所引用的地址值不能改变
    4. [1] final修饰基本数据类型
    5. final int num = 10;
    6. [2] final修饰引用数据类型
    7. final Car car = new Car("BMW","X5");

    静态代码块

    1. static关键字修饰的代码块称为静态代码块。
    2. 静态代码块位于类的内部、方法的外部。
    3. 静态代码块只执行一次(jvm加载xx.class时执行),在构造代码块、构造方法前执行。

    内部类

    1. 内部类可以看作和字段、方法一样,是外部类的成员,而且成员可以有static修饰。
    2. 静态内部类:使用static修饰的内部类,那么访问内部类直接使用外部类名来访问
    3. 实例(成员)内部类:没有使用static修饰的内部类,访问内部类使用外部类的对象来访问
    4. 局部(方法)内部类:定义在方法中的内部类,一般不用
    5. 匿名内部类:特殊的局部内部类,适合于仅使用一次使用的类
    6. 对于每个内部类来说,Java编译器会生成独立.class文件。
    7. 静态和实例内部类:外部类名$内部类名字
    8. 局部内部类:外部类名$数字内部类名称
    9. 匿名内部类:外部类名$数字

    匿名内部类

    1. 如果一个类位于另外一个类中,这个类称为内部类。如果这个内部类还没有名字,那么就称为匿名内部类。匿名内部类 没有名字,所以不能像常规的方式创建对象了
    2. 当一个类只使用一次,可以声明成匿名内部类。匿名内部类 必须有 实现 存在。
    3. 匿名内部类,可以使用父类构造器和接口名来完成。
    4. 针对类,定义匿名内部类来继承父类(使用较少):
    5. new 父类构造器([实参列表]){
    6. // 匿名内部类的类体部分
    7. }
    8. 针对接口,定义匿名内部类来实现接口(使用较多):
    9. 接口类型 变量 = new 接口名称(){
    10. // 匿名内部类的类体部分
    11. }