this关键字
this关键字表示当前对象本身,一般用于类的内部,其内部存在一个地址,指向当前初始化的对象本身
当new 一个对象时,实际上产生了两个引用,一个是供类Dog内部调用其成员变量和成员方法的this关键字,一个是供外界程序调用实例成员的dog
this的三种用法
调用成员变量:解决局部变量和成员变量之间的二义性,此时必须使用
调用其他成员方法:同一个类中非static方法之间互调(此时可以省略this,但不建议省略)
调用本类其他构造方法:this可以调用本类其他构造方法 this(实参1,实参2...);
注意:!!在构造方法中调用本类方法必须写到构造方法第一句,否则会出现编译错误
super关键字
子类访问父类成员时一定要用super,super调用构造方法必须写在子类构造方法的第一句。
如果子类构造方法没有显式调用父类任何构造方法时,那么jvm会默认调用父类的无参构造super()
访问父类非私有字段
访问父类非私有方法
访问父类构造方法 super(); super(实参1,实参2,...);
static修饰符
static关键字表示静态,可以修饰成员变量构成静态变量,修饰成员方法构成静态方法。
静态变量和静态方法都归类所有,称为类的静态成员,用static关键字修饰
静态变量
//在类中,用static关键字修饰的成员变量称为静态变量,归类所有,也称为类变量,类的所有实例/对象都可以访问,被类的所有实例或对象所共享。
语法 :
[修饰符] static 数据类型 成员变量 [=初始值];
静态方法
//static 也可以修饰方法称为静态方法,归类所有,也称类方法。
[修饰符] static 返回值类型 方法名(形参列表){
}
静态方法访问方式
类名.静态变量 // 推荐写法
对象/实例.静态变量
//静态变量和静态方法称为类的静态成员,归类所有, 其他地成员变量和成员方法称为类的实例成员,归对象所有。
静态方法特性
//静态方法中只能访问 类的静态成员,不能访问实例成员, 实例方法中可以访问类的静态成员
final修饰符
final 表示最终的意思,可以修饰类、方法、局部变量,甚至可以修饰成员变量
final 修饰类表示最终类。最终类不能被继承。
如果一个方法被final修饰,称为最终方法。最终方法不能被重写。
常量
final修饰的局部变量称为常量,常量只能赋值一次,不能再重新赋值。
基本数据类型:表示的值不能改变
引用数据类型:所引用的地址值不能改变
[1] final修饰基本数据类型
final int num = 10;
[2] final修饰引用数据类型
final Car car = new Car("BMW","X5");
静态代码块
被static关键字修饰的代码块称为静态代码块。
静态代码块位于类的内部、方法的外部。
静态代码块只执行一次(jvm加载xx.class时执行),在构造代码块、构造方法前执行。
内部类
内部类可以看作和字段、方法一样,是外部类的成员,而且成员可以有static修饰。
静态内部类:使用static修饰的内部类,那么访问内部类直接使用外部类名来访问
实例(成员)内部类:没有使用static修饰的内部类,访问内部类使用外部类的对象来访问
局部(方法)内部类:定义在方法中的内部类,一般不用
匿名内部类:特殊的局部内部类,适合于仅使用一次使用的类
对于每个内部类来说,Java编译器会生成独立.class文件。
静态和实例内部类:外部类名$内部类名字
局部内部类:外部类名$数字内部类名称
匿名内部类:外部类名$数字
匿名内部类
如果一个类位于另外一个类中,这个类称为内部类。如果这个内部类还没有名字,那么就称为匿名内部类。匿名内部类 没有名字,所以不能像常规的方式创建对象了
当一个类只使用一次,可以声明成匿名内部类。匿名内部类 必须有 实现 存在。
匿名内部类,可以使用父类构造器和接口名来完成。
针对类,定义匿名内部类来继承父类(使用较少):
new 父类构造器([实参列表]){
// 匿名内部类的类体部分
}
针对接口,定义匿名内部类来实现接口(使用较多):
接口类型 变量 = new 接口名称(){
// 匿名内部类的类体部分
}