调用本类属性、调用本类方法(普通、构造)、表示当前对象
1.使用this调用本类属性
class Person{
private String name;
private int age;
//setter getter 无参构造函数略
public Person (String n, int a){
name = n;
age = a;
}
public String getInfo(){
return "姓名:" + name + ",年龄:" + age;
}
}
public class ThisDemo {
public static void main (String args[]){
System.out.println(new Person("张三",20).getInfo);
}
}
但是给出的参数存在一些问题,当前类中的构造方法目的为类中的name和aga两个属性进行初始化。但是构造方法的参数声明不准确public Person (String n, int a),想要赋值有明确的指向。这时候可能会产生参数和属性同名问题,为了明确属性和参数名,在属性名前面都加上this. 这样就不会和方法中的参数名混淆了。如下:
class Person{
private String name;
private int age;
//setter getter 无参构造函数略
public Person (String name, int age){
this.name = n;
this.age = a;
}
public String getInfo(){
return "姓名:" + name + ",年龄:" + age;
}
}
public class ThisDemo {
public static void main (String args[]){
System.out.println(new Person("张三",20).getInfo);
}
}
只要在类中的方法访问类的属性是,一定要加上this关键字。
2.使用this调用本类方法
普通方法:this.方法名称(参数)
构造方法:this(参数...)
范例:调用普通方法
class Person{
private String name;
private int age;
//setter getter 无参构造函数略
public Person (String name, int age){
this.name = n;
this.age = a;
//不加this可会调用,但是好的习惯需要加上
this.print();
}
public vodi print(){
System.out.println("************");
}
public String getInfo(){
return "姓名:" + name + ",年龄:" + age;
}
}
public class ThisDemo {
public static void main (String args[]){
System.out.println(new Person("张三",20).getInfo);
}
}
代码好习惯,虽然调用本类的普通方法前可以不使用this,但是强烈建议加上,可以确定方法的来源。
范例:调用构造方法
构造方法与普通方法最大的区别:使用关键new实例化新对象时使用一次,而普通方法是在构造完成后可以调用多次。
在java中支持类的构造方法互相调用。
class Person{
private String name;
private int age;
//不管执行哪个构造方法,都要求信息输出
public Persong(){ //无参
System.out.println("************");
}
public Person(String name){
this.name = name ;
System.out.println("************");
}
public Person (String name, int age){
this.name = n;
this.age = a;
System.out.println("************");
//不加this可会调用,但是好的习惯需要加上
this.print();
}
public vodi print(){
System.out.println("************");
}
public String getInfo(){
return "姓名:" + name + ",年龄:" + age;
}
}
public class ThisDemo {
public static void main (String args[]){
System.out.println(new Person().getInfo);
System.out.println(new Person("张三").getInfo);
System.out.println(new Person("张三",20).getInfo);
}
}
要求实现了要求,但是有重复代码,要求使用this消除重复代码,如下:
class Person{
private String name;
private int age;
//不管执行哪个构造方法,都要求信息输出
public Persong(){ //无参
System.out.println("************");
}
public Person(String name){
this(); //调用本类无参构造
this.name = name ;
}
public Person (String name, int age){
this(name); //调用本类有参构造
this.name = n;
this.age = a;
//不加this可会调用,但是好的习惯需要加上
this.print();
}
public vodi print(){
System.out.println("************");
}
public String getInfo(){
return "姓名:" + name + ",年龄:" + age;
}
}
public class ThisDemo {
public static void main (String args[]){
System.out.println(new Person().getInfo);
System.out.println(new Person("张三").getInfo);
System.out.println(new Person("张三",20).getInfo);
}
}
虽然使用this可以实现构造方法互相调用,但是有两点需要注意:
this调用构造的语句,必须放在构造方法的首行。
使用this调用构造方法时请留有出口。
3.this表示当前对象:
在一个类之中肯定会产生若干个对象,那么程序类中在分辨时不会知道产生多少个对象,只知道操作当前类的对象是哪一个。
范例:观察当前对象
class Person{
public void fun() {
System.out.printlin("FUN方法" + this);
}
}
public class ThisDemo {
public static void main (String args[]){
Person p1 = new Person();
System.out.printlin("FUN方法" + p1);
p1.fun(); //由p1调用了fun方法
Person p2 = new Person();
System.out.printlin("FUN方法" + p2);
p2.fun(); //由p1调用了fun方法
}
}
在整体的操作过程中,只要有某个对象调用了本类的方法,那么this就指当前的对象,this并不是一个固定的对象。