类对象的属性赋值的先后顺序:
1、属性的默认初始化
2、属性的显示初始化
3、通过构造器给属性初始化
4、通过“对象.方法”的方式给属性初始化。
this 关键字
this是什么?
在java中,this关键字比较难以理解,它的作用和其词义很接近。
它在方法中使用,即表示这个方法所属对象的引用;
它在构造器内部使用,表示该构造器正在初始化的对象;
this表示当前对象,可以调用类的属性、方法和构造器。
什么时候需要this关键字呢?
当在方法中需要用到该方法的对象时,就用this
EG:
class person{
public void setAge(int age){
age = age;
}
}
public class person{
person p1 = new person();
p1.setAge(2);
System.out.println(p1.getAge());//0
}
类中的age无法识别,所以age没有被赋值,仍然是0。
person类中的setAge方法形参age,在方法体中认为age都是形参中的那个age,所以根本没有赋值。
在eclipse工具中可以双击一个age属性,亮起的都为age属性正常使用,且都是person的属性age
唯独setAge方法中的age没有亮起,因为此时setAge方法中的age,都是方法中的局部变量,和person类的age属性没有一毛钱关系。
所以,person类中的age仍然为0
PS:简单的理解就是如果形参和类属性的名称一样,this表示的意思一个自己本身类的对象,代表的是本类。
例如 person类,就是person类在自己的类里面声明了一个对象。
person p = new person;
public void setAge(int age){
p.age = age;
}
只是现在提供了一个关键词this,可以代替这一步骤。
但是在类中不可以这样写,因为这样写,这个只是用于理解this的用法。
因为如果这样写的话,对象就被写死了,如果在其他类中调用的时候声明的对象不是p,或者声明的不一致,就没有办法取的同样的效果。
所以,需要使用this关键词。
class person{
public void setAge(int age){
this.age = age;
}
}
public class person{
person p1 = new person();
p1.setAge(2);
System.out.println(p1.getAge());//2
}
它在方法中使用,即表示这个方法所属对象的引用;
// public person(String name ) {
// this.name =name ;
// }
public person(String name ) {
p.name =name ;
}//也是一样的
它在构造器内部使用,表示该构造器正在初始化的对象;
public void eat() {
System.out.println("人吃饭");
}
public void info() {
this.eat();
System.out.println(this.name);
}
同样成立。调用本类中的方法
p1.info();
在方法中使用,即表示这个方法所属对象的引用,this等于p1; this代表的就是p1.
public void show(){
System.out.println("我是一个人");
}
public void info() {
this.eat();
System.out.println(this.name);
// show() 以前调用本类中的方法都是这样的写法。
this.show(); //只是this隐藏了而已。
}
this:
1、可以用来修饰属性,方法,构造器
2、this可以理解为当前对象或 当前正在创建的对象 例如:this.show();this.name;
(当前正在创建的对象,这句是在构造器里面是这样理解的,因为构造器是造对象用的,构造器内还没有生成对象)
构造器中第二次使用this相同属性,可以写this(属性)
public person(String name ) {
this.name =name ;
}
public person(String name,int age) {
// this.name = name ;
this(name);(这是person类中为name的构造器)
//使用的过程中是先调用person(name)这个构造器,然后在使用本构造器
this.age =age;//构造器中不可以使用两个 this(属性)【指的是不可以使用两个this构造器】
}
this(属性)可以用来显示调用当前类的重载的指定构造器:
1、构造器内部必须在首行
2、若一个类中有几个构造器,那么最多n-1个构造器中使用this(属性)
当形参与成员变量重名的时候,如果在方法内部需要使用成员变量,必须添加this来表明该变量是类成员
在任意方法内,如果使用当前类的成员变量或成员方法可以在其前面添加this,增强程序的阅读性。
this可以作为一个类中,构造器相互调用的特殊格式。