this关键字
super关键字
对象实例化过程
this关键字
它在方法内部使用,即这个方法所属对象的引用;
它在构造器内部使用,表示该构造器正在初始化的对象
this代表当前的对象,可以调用类的属性,方法和构造器。(当前方法的调用者)
使用情况 :
1.当形参与成员变量重名时,如果在方法内部需要使用成员变量,必须添加this来表明该变量是 类成员(因为变量具有就近原则,而javac只能识别当前位置较近的变量。)
this区分成员变量和局部变量。
2.在类的实例方法中,代表使用该方法的当前对象。如果使用当前对象的成员变量或成员方法可以在其前面添加this,增强程序的阅读
3.this在类的构造器中使用,构造器相互调用的特殊格式。(此时this代表该构造方法所创建的对象)
(
1.使用this()必须放在构造器的首行!
2.使用this调用本类中其他的构造器,保证至少有一个构造器是不用this的。避免造成死循环。
)
【类方法【static 方法】不能使用this关键字】,因为this代表当前对象,而类方法可以通过类名.方法的形式调用,此时可能还没有任何对象产生
class Person{ // 定义Person类
private String name ;
private int age ;
public Person(){ // 无参构造
System.out.println(“新对象实例化”) ;
}
public Person(String name){
this(); // 调用本类中的无参构造方法
this.name = name ;
}
public Person(String name,int age){
this(name) ; // 调用有一个参数的构造方法
this.age = age;
}
public String getInfo(){
return “姓名:” + name + “,年龄:” + age ;
} }
super 关键字
java中用super 来调用父类的指定操作。
用来区分子类和父类中同名的属性和方法,在构造器中总是显式或隐式调用super.()父类构造器。
super可以访问父类定义的属性和方法
super关键字可用于在子类的构造方法中调用父类的构造器。
注意事项:
当子类和父类出现同名的成员时,可以使用super来区分
super代表父类内存空间的标识,而this 代表本类对象的引用。
构造器
1.子类中所有的构造器默认都会访问父类中空参数的构造器super();在子类中默认,自动,隐式调用super();
一旦在子类构造器中显式的调用super(…)语句,那么隐式的super()语句将不再提供。
2.当父类中没有空参数的构造器时,子类的构造器必须通过this(参数列表)或者super(参数列表)语句指定调用本类或者父类中相应的构造器,且必须放在构造器的第一行。
3.如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有无参的构造器,则编译出错
理解:
子类构造器中总是直接或者间接调用父类的构造器,且总是先调用父类的构造器。【父类构造器必须先于子类构造器】
构造器2大定律
1所有的类都必须有构造器。
2子类构造器必须先调用父类的构造器
子类对象的实例化过程:
1 object 类
2 == 与 equals 方法的比较
3 包装类(Wrapper Class)
object 类
java中object 类是所有类的根父类。
public Object() 构造器
public boolean equals (Object obj) 对象比较内容是否相等
public int hashCode() 获取Hash码值,Hash码值用来区别对象,每一个new出来的对象都有不同的码值
public String toString() 返回该对象的字符串表示。返回字符串:类名@Hash码值,一般需要重写toString(),
protected object clone() 创建并返回此对象的副本
protected void finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
Class