1.java常用关键字细节,构造函数

来源:互联网 发布:java实现分段函数 编辑:程序博客网 时间:2024/06/05 09:36

this关键字

this关键字代表是对象的引用。也就是this在指向一个对象,所指向的对象就是调用该函数的对象引用

用途:

  1. 存在同名成员变量与局部变量时,方法默认访问局部变量的数据,可以通过this指定访问成员变量。
  2. 在一个构造函数中可以调用另一个构造函数初始化对象。(注:this关键字调用其他构造函数时必须位于构造函数的第一个语句)

注意事项:

  1. 存在同名成员变量与局部变量时,java采用“就近原则”访问机制访问局部变量的数据。
  2. 在一个方法中范围一个变量,该变量只存在成员变量情况下,java编译器会在该变量前面添加this关键字。

调用其他构造方法时注意:

  1. this关键字调用其他构造方法时必须位于构造方法中的第一个语句。否则编译错误
  2. 不能出现递归构造方法调用,构造方法的相互调用出现死循环,在编译时期会报错。

super关键字

super关键字代表父类空间的引用。必须有继承关系才能使用

作用:
  1. 子父类存在同名成员时,子类中默认访问子类成员;可通过super关键字指定访问父类的成员。
  2. 创建子类对象时,默认会先调用父类无参的构造方法;可通过super关键字指定调用父类的构造方法。
注意事项:
  1. 如果在子类的构造方法中没有调用父类的构造方法,那么java编译器会在子类的构造方法中加上  super();  语句。
  2. super关键字调用父类构造方法时,该语句必须位于构造方法中的第一个语句
super与this关键字不能同时出现在同一个构造方法中调用其他的构造方法。


instanceof 关键字

判断一个对象是否属于指定的类型。

使用前提:判断对象与指定的类别必须要存在继承或实现的关系。
使用格式:   (对象 instanceof 类别)   返回boolea类型
作用:做强制类型转换之前一般都会先用instanceof判断,然后再转换


final关键字

  1. final关键字修饰一个基本类型的变量时,该变量不能重新赋值
  2. final关键字修饰一个引用类型变量时,该变量不能重新指向新的对象
  3. final关键字修饰一个函数的时候,该函数不能被重写
  4. final关键字修饰一个类的时候,该类不能被继承

static关键字

为了实现对象之间重复属性的数据共享

用途:主要用于修饰类的成员

  • 成员变量
非静态成员变量:需要创建对象来访问。    (对象.变量名
静态成员变量:使用类名直接调用,也可以通过对象访问。    (对象.变量名;   类名.变量名

  • 成员方法(可以使用类名直接调用)

非静态函数:只能使用对象进行调用。    (对象.静态函数名()) 

静态函数:可以使用对象或类名进行调用。    (对象.静态函数名();    类名.静态函数名()


推荐使用类名直接访问静态的成员。


什么时候定义静态函数?    如果功能内部没有直接访问到非静态成员数据(对象的特有数据。那么该功能就可以定义为静态),一般用于工具类型方法(不用创建对象,直接使用  类名.方法名() 调用)


注意事项:

  1. 静态函数中可以直接访问静态成员,但不能直接访问非静态成员。    原因:静态函数可以使用类名调用,这时候可能还没有对象存在,就没有非静态成员数据
  2. 非静态函数可以直接访问静态成员与非静态成员。    原因:非静态函数只能使用对象调用,对象存在时,静态数据与非静态数据都存在了
  3. 静态函数不可以定义this,super关键字。     原因:静态函数一旦使用类名调用,这时候还不存在对象

+ + + + + + + + + + + + + + + + + + + + + + +

静态代码块:随着类的加载而加载。只执行一次,优先于主函数。用于给类进行初始化。

static{

静态代码块执行语句;

}


静态数据生命周期:静态的成员变量的数据是优先于对象存在的。静态方法与非静态方法的字节码文件是同时存在内存中的。


构造函数,构造代码块

+ + + + + + + + + + + + + + + + + + + + + + + + + + 

  • 构造函数作用:给对应的对象进行初始化;

构造函数与普通的函数的区别

  1. 一般函数是用于定义对象应该具备的功能。而构造函数定义的是,对象在调用功能之前,在建立时,应该具备的一些内容。也就是对象的初始化内容
  2. 构造函数是在对象建立时由jvm主动调用对应的构造方法, 给对象初始化。一般函数是对象建立后,当对象调用该功能时才会执行。
  3. 构造函数只有在创建对象时调用。普通函数可以使用对象多次调用。
  4. 构造函数的函数名要与类名一样。而普通的函数只要符合标识符的命名规则即可。
  5. 构造函数没有返回值类型。而普通的函数即使没有返回值,返回值类型也要写void。

构造函数注意的细节
  1. 当类中没有定义构造函数时,系统会指定给该类加上一个空参数的构造函数。这个是类中默认的构造函数,权限修饰符与类的权限修饰符一致。当类中如果自定义了构造函数,这时默认的构造函数就没有了。    备注:可以通过javap命令反编译验证。
  2. 在一个类中可以定义多个构造函数,以进行不同的初始化。多个构造函数存在于类中,是以重载的形式体现的。因为构造函数的名称都相同。
+ + + + + + + + + + + + + + + + + + + + + + + + + +
  • 构造代码块作用:给所有的对象进行统一的初始化;

格式:

{

构造代码块

}


给对象进行初始化。对象一建立就运行并且优先于构造函数。

与构造函数区别

  1. 构造代码块和构造函数的区别,构造代码块是给所有对象进行统一初始化, 构造函数给对应的对象初始化。
  2. 构造代码块的作用:它的作用就是将所有构造方法中公共的信息进行抽取。
+ + + + +注 + + + + + + + + + + + + + + + 
java编译器编译源文件时,把成员变量声明语句提前至类的最前端,初始化其实在构造函数中执行。
java编译后构造代码块的代码就会移到构造函数中,在构造函数之前执行,原构造函数中代码最后执行

成员变量的显示初始化与构造代码块按顺序执行


原创粉丝点击