定义
- this是一个关键字
- this只出现在实例方法中,代表当前对象。语法this.
- 本质上是一个引用,保存当前对象地址。
- 通过this可以访问实例变量,调用实例方法。
- this存储在栈帧局部变量表0号位上。
- 大部分情况下this可以省略,区分局部变量与实例变量不可以省略。
- this不可以出现在静态方法中。
- (this实参)语法:1.只能出现在构造方法第一行;2.通过构造方法去调用本类中其他方法;3.作用是代码服用。
代码
创建对象
package com.powernode.javase.oop05;
public class User {
private String name;
public void shopping(){
System.out.println("shopping--->"+this);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/*
* --------------------静态static---------------------------------
* */
public static void test1(){
/*
* 不能使用this,会报错,因为没有对象
* 只能调用有static的方法
* */
User.test02();
//同一个类下可以省略类目
test02();
/*
* 如果硬要使用调用name,可以new一个
* 但还是不可以用this
* System.out.println(this.name);-----报错
* */
User u = new User();
System.out.println(u.name);
u.shopping();
}
public static void test02(){
System.out.println("test2");
}
}
注(关于静态的使用): 目前我认为,静态就不可以出现this关键字。关于静态看下文。
调用对象
package com.powernode.javase.oop05;
public class UserTest {
public static void main(String[] args) {
User u1 = new User();
System.out.println("main---->"+u1);
u1.shopping();
User u2 = new User();
System.out.println("main---->"+u2);
u2.shopping();
}
}
C:\Users\seven\.jdks\corretto-1.8.0_362\bin\java.exe -javaagent:D:\IDEAIU\lib\idea_rt.jar=50023:D:\IDEAIU\bin -Dfile.encoding=UTF-8 -classpath C:\Users\seven\.jdks\corretto-
main---->com.powernode.javase.oop05.User@1b6d3586
shopping--->com.powernode.javase.oop05.User@1b6d3586
main---->com.powernode.javase.oop05.User@4554617c
shopping--->com.powernode.javase.oop05.User@4554617c
Process finished with exit code 0
注意看运行结果new出来的两个对象地址不一样,但是创建对象里面在一个对象中使用单独this(单独使用反馈给我们的是一个地址)与test类中使用对象名访问地址是一样的。
this的复用
this(实参):同一个类中实现代码复用,但只能出现在构造方法第一行。
对象创建
package com.powernode.javase.oop05;
public class Data {
private int year;
private int month;
private int day;
public Data() {
/*
* 方法复用
* 通过一个方法去调用另外一个方法
* */
this(1970,3,10);
}
public Data(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public void disply(){
System.out.println(this.getYear()+"年"+this.getMonth()+"月"+this.getDay()+"日");
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
}
对象使用
package com.powernode.javase.oop05;
public class DataTest {
public static void main(String[] args) {
Data d = new Data();
d.disply();
Data d2 = new Data(2000,3,7);
d2.disply();
}
}
C:\Users\seven\.jdks\corretto-1.8.0_362\bin\java.exe -javaagent:D:\IDEAIU\lib\idea_rt.jar=60202:D:\IDEAIU\bin -Dfile.encoding=UTF-8 -classpath C:\Users\seven\.jdks\corretto-
1970年3月10日
2000年3月7日
初认静态--------this and static
package com.powernode.javase.oop05;
public class test {
int age = 10;
/* 全部报错
public static void main(String[] args) {
System.out.println(this);
System.out.println(this.age);
System.out.println(age);
}*/
public void main(String a) {
System.out.println(this);
System.out.println(this.age);
System.out.println(age);
}
报错原因:int age = 10;放在方法外面,属于实例变量。所有实例变量静态方法不能调用,如果想要调用,只能new对象。如下
public static void main(String[] args) {
test t = new test();
//调用实例方法
t.main("hello");
//调用实例变量
System.out.println(t.age);
}