对信息的封装就是要求使用者按照规范的使用数据。
关于this的使用
this是调用当前的this是代表一个对象,谁(对象)调用的方法,this就代表谁
先创建对象,student是一个变量,是用来储存对象的首地址,在student.name中是先在java中jvm中识别首地址在找到对象的,在调用dohomework中this就代表当前对象,在main中已经对name进行赋值,则在dohomework中的this.name是指的是Student对象中的那么则为Tom正在写作业。
String name;
void doHomework(){
System.out.println(this);
System.out.println(this.name+"正在做作业.......");
}
void speak(){
// new Student().doHomework();和下面一样都是创建对象;
Student stu =new Student();
stu.doHomework();
this.doHomework();
System.err.println(this);
System.out.println(name+"正在说话......");
}
public static void main(String[] args) {
Student student = new Student();
student.speak();
}
解:此运行代码为在main方法中,创建了一个对象,在调用speak()函数,在speak中有创建了一个对象,在调用doHomework对象,则这其中的this的指向为,调用当前方法的对象,第一个输出this是指的是刚创建的stu对象所指的内容,因为是stu调用的dohomework(),其中的this是指调用当前方法的对象,则首先this先代表stu,接下来是this.dohomework();这个this是指调用speak()函数的对象,接下来在调用domework();则这里的dohomework()中的this也是与speak()同一个对象;则通过结果可以看出。
int age;
String name;
public Student(int age) {
this.age = age;
System.out.println(this);
}
public Student(String name) {
this.name = name;
}
public Student(int age, String name) {
this(age);//this是指有一个对象);
System.out.println(this);
// this(name);
// new Student(name);
// System.out.println();
System.out.println(new Student(name).name);//只是调用第一种构造方法直接对name赋值。调用第二种方法对name进行赋值则,为王五。
System.out.println(new Student(name).age);//只是调用第二种构造方法对age赋值,第二种方法只对name进行赋值但对age则没有
//进行赋值则原来的值还为0.
}
public static void main(String[] args) {
Student student=new Student(12, "王五");
System.out.println(student.name+" "+student);
System.out.println(new Student(12, "王五").age);
}
这个其中的代码运行为创造了一个对象调用构造函数第三个构造函数方法,在第三种构造方法中运行this(age);调用第一个构造方法,其中的this创建第三种构造方法的对象,this(age)是调用第一种构造方法,其中的this和第三种的this是指的同一个对象,测试结果显示student的地址和创建的第三种的地址和第二种的地址是一样的。
1,所以this就是调用当前方法的对象。
2,在构造函数中不能在普通成员方法中调用构造函数会出现错误。
3,在构造函数中只能调用一个构造函数,因为构造函数只能放在方法的首位代码块。
4,this 不能用于静态方法中,因为可能没有调用对象,直接用类来调用对象,就没有this所调用的对象