0%

Java笔记——类与对象(四)

初学者つ﹏⊂,简单记录一下this关键字的部分用法。

引用当前类的实例变量

若实例变量与形参之间存在歧义,则可使用this关键字解决歧义。

不使用this关键字的情况

class Person
{
String name;
int age;
Person(String name,int age)
{
name=name;
age=age;
}
void OUTPUT()
{
System.out.println("name: "+name);
System.out.println(" age: "+age);
}
}
public class PRACTICE0
{
public static void main(String[] args)
{
Person P0=new Person("NIMITIZ",18);
Person P1=new Person("NIMITIZ-FBH",19);
P0.OUTPUT();
P1.OUTPUT();
}
}

运行结果:

name: null
age: 0
name: null
age: 0

使用this关键字的情况

class Person
{
String name;
int age;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
void OUTPUT()
{
System.out.println("name: "+name);
System.out.println(" age: "+age);
}
}
public class PRACTICE1
{
public static void main(String[] args)
{
Person P0=new Person("NIMITIZ",18);
Person P1=new Person("NIMITIZ-FBH",19);
P0.OUTPUT();
P1.OUTPUT();
}
}

运行结果:

name: NIMITIZ
age: 18
name: NIMITIZ-FBH
age: 19

调用当前类的一般方法

可以使用this关键字调用当前类的一般方法;若调用当前类的一般方法时没有在源码中使用this关键字,Java编译器将会自动提供this关键字。

class HELLOWORLD
{
void x()
{
System.out.println("Hello world!");
}
void y()
{
x(); // x(); 等同于 this.x();
this.x();
}
}
public class PRACTICE2
{
public static void main(String[] args)
{
HELLOWORLD HW=new HELLOWORLD();
HW.y();
}
}

运行结果:

Hello world!
Hello world!

调用当前类的构造方法

构造方法是类在实例化对象时自动调用的,不能如调用一般方法那样通过方法名或类名来调用;但如果一个类包含有多个构造方法,则可以在一个构造方法中通过this关键字来调用其他构造方法。

  • 只能在构造方法中通过this关键字来调用其他构造方法,不能在一般方法中通过this关键字来调用构造方法
  • 不能在一个构造方法中通过this关键字直接或间接地调用该构造方法本身
  • this关键字的调用必须是构造器中的第一个语句
  • 不能在一个构造方法中同时使用关键字thissuper调用其他构造方法(因为对super关键字的调用也必须是构造器中的第一个语句)
  • 不能在一个构造方法中多次调用不同的构造方法
  • 在构造方法中可以使用this关键字来调用本类的成员变量和成员方法,其用法与非构造方法中的this关键字相同

在有参构造方法中调用无参构造方法

class HELLOWORLD
{
HELLOWORLD()
{
System.out.println("Hello,world!");
}
HELLOWORLD(int x)
{
this(); //在有参构造方法中调用无参构造方法 对this的调用必须是构造器中的第一个语句
System.out.println(x);
}
}
public class PRACTICE3
{
public static void main(String[] args)
{
HELLOWORLD HW=new HELLOWORLD(18);
}
}

运行结果:

Hello,world!
18

在无参构造方法中调用有参构造方法

class HELLOWORLD
{
HELLOWORLD(int x)
{
System.out.println(x);
}
HELLOWORLD()
{
this(18); //在无参构造方法中调用有参构造方法 对this的调用必须是构造器中的第一个语句
System.out.println("Hello world!");
}
}
public class PRACTICE4
{
public static void main(String[] args)
{
HELLOWORLD HW=new HELLOWORLD();
}
}

运行结果:

18
Hello world!

重用构造方法

this()构造方法调用可用于重用构造方法。

class Person
{
String name;
int age;
char sex;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
Person(String name,int age,char sex)
{
this(name,age); //重用构造方法
this.sex=sex;
}
void OUTPUT()
{
System.out.println("name: "+name);
System.out.println(" age: "+age);
System.out.println(" sex: "+sex);
}
}
public class PRACTICE5
{
public static void main(String[] args)
{
Person P0=new Person("NIMITIZ",18);
P0.OUTPUT();
Person P1=new Person("NIMITIZ",18,'M');
P1.OUTPUT();
}
}

运行结果:

name: NIMITIZ
age: 18
sex:
name: NIMITIZ
age: 18
sex: M

补充

this关键字访问成员变量和成员方法时不受访问权限的限制,可以访问本类中所有的成员变量和成员方法。


整理自

Java this关键字

Java this 关键字用法