目录
this关键字
this关键字代表是对象的引用。也就是this在指向一个对象,所指向的对象就是调用该函数的对象引用。
用途:
- 存在同名成员变量与局部变量时,方法默认访问局部变量的数据,可以通过this指定访问成员变量。
- 在一个构造函数中可以调用另一个构造函数初始化对象。(注:this关键字调用其他构造函数时必须位于构造函数的第一个语句)
注意事项:
- 存在同名成员变量与局部变量时,java采用“就近原则”访问机制访问局部变量的数据。
- 在一个方法中范围一个变量,该变量只存在成员变量情况下,java编译器会在该变量前面添加this关键字。
调用其他构造方法时注意:
- this关键字调用其他构造方法时必须位于构造方法中的第一个语句。否则编译错误
- 不能出现递归构造方法调用,构造方法的相互调用出现死循环,在编译时期会报错。
super关键字
super关键字代表父类空间的引用。必须有继承关系才能使用
作用:
- 子父类存在同名成员时,子类中默认访问子类成员;可通过super关键字指定访问父类的成员。
- 创建子类对象时,默认会先调用父类无参的构造方法;可通过super关键字指定调用父类的构造方法。
注意事项:
- 如果在子类的构造方法中没有调用父类的构造方法,那么java编译器会在子类的构造方法中加上 super(); 语句。
- super关键字调用父类构造方法时,该语句必须位于构造方法中的第一个语句。
super与this关键字不能同时出现在同一个构造方法中调用其他的构造方法。
instanceof 关键字
判断一个对象是否属于指定的类型。
使用前提:判断对象与指定的类别必须要存在继承或实现的关系。
使用格式: (对象 instanceof 类别) 返回boolea类型
作用:做强制类型转换之前一般都会先用instanceof判断,然后再转换
final关键字
- final关键字修饰一个基本类型的变量时,该变量不能重新赋值
- final关键字修饰一个引用类型变量时,该变量不能重新指向新的对象
- final关键字修饰一个函数的时候,该函数不能被重写
- final关键字修饰一个类的时候,该类不能被继承
static关键字
为了实现对象之间重复属性的数据共享
用途:主要用于修饰类的成员
- 成员变量
非静态成员变量:需要创建对象来访问。 (对象.变量名)
静态成员变量:使用类名直接调用,也可以通过对象访问。 (对象.变量名; 类名.变量名)
- 成员方法(可以使用类名直接调用)
非静态函数:只能使用对象进行调用。 (对象.静态函数名())
静态函数:可以使用对象或类名进行调用。 (对象.静态函数名(); 类名.静态函数名())
推荐使用类名直接访问静态的成员。
什么时候定义静态函数? 如果功能内部没有直接访问到非静态成员数据(对象的特有数据。那么该功能就可以定义为静态),一般用于工具类型方法(不用创建对象,直接使用 类名.方法名() 调用)。
注意事项:
- 静态函数中可以直接访问静态成员,但不能直接访问非静态成员。 原因:静态函数可以使用类名调用,这时候可能还没有对象存在,就没有非静态成员数据
- 非静态函数可以直接访问静态成员与非静态成员。 原因:非静态函数只能使用对象调用,对象存在时,静态数据与非静态数据都存在了
- 静态函数不可以定义this,super关键字。 原因:静态函数一旦使用类名调用,这时候还不存在对象
静态数据生命周期:静态的成员变量的数据是优先于对象存在的。静态方法与非静态方法的字节码文件是同时存在内存中的。
native
JNI,Java Native Interface(Java本地接口)
和本地C代码进行互操作的
构造函数
- 构造函数作用:给对应的对象进行初始化;
构造函数与普通的函数的区别
- 一般函数是用于定义对象应该具备的功能。而构造函数定义的是,对象在调用功能之前,在建立时,应该具备的一些内容。也就是对象的初始化内容。
- 构造函数是在对象建立时由jvm主动调用对应的构造方法, 给对象初始化。一般函数是对象建立后,当对象调用该功能时才会执行。
- 构造函数只有在创建对象时调用。普通函数可以使用对象多次调用。
- 构造函数的函数名要与类名一样。而普通的函数只要符合标识符的命名规则即可。
- 构造函数没有返回值类型。而普通的函数即使没有返回值,返回值类型也要写void。
构造函数注意的细节
- 当类中没有定义构造函数时,系统会指定给该类加上一个空参数的构造函数。这个是类中默认的构造函数,权限修饰符与类的权限修饰符一致。当类中如果自定义了构造函数,这时默认的构造函数就没有了。 备注:可以通过javap命令反编译验证。
- 在一个类中可以定义多个构造函数,以进行不同的初始化。多个构造函数存在于类中,是以重载的形式体现的。因为构造函数的名称都相同。
块
从 { 开始 到对应的 } 结束,即一个块
普通块代码(构造代码块)
:给所有的对象进行统一的初始化; 对象一建立就立刻运行 并且优先于构造函数
{
执行语句 ;
}
与构造函数区别
- 构造代码块和构造函数的区别,构造代码块是给所有对象进行统一初始化, 构造函数给对应的对象初始化。
- 构造代码块的作用:它的作用就是将所有构造方法中公共的信息进行抽取。
静态代码块
:随着类的加载而加载。只执行一次,优先于主函数。用于给类进行初始化。
static{
静态代码块执行语句;
}
注 + + + + + + + + + + + + + + + java编译顺序
java编译器编译源文件时,把成员变量声明语句提前至类的最前端,初始化其实在构造函数中执行。
java编译后构造代码块的代码就会移到构造函数中,在构造函数之前执行,原构造函数中代码最后执行。
成员变量的显示初始化与构造代码块按顺序执行。