繁体   English   中英

这个和类名的区别

[英]The difference between this and the class name

我问过这个问题, 将对象添加到数组中 现在,它提出了另一个问题。

两者之间有区别吗?

public Patient(String ptNo, String ptName, int procType) throws IOException
{
    Patient.patientNo =  ptNo;
    Patient.patientName = ptName;
    Patient.procedureType = procType;
}

和这个:

public Patient(String ptNo, String ptName, int procType) throws IOException
{
    this.patientNo =  ptNo;
    this.patientName = ptName;
    this.procedureType = procType;
}

我以为他们是同一回事?


编辑我已经在Patient类中创建了这些。

private static String patientNo;
private static String procedureDate;
private static String patientName;

this用于访问属于对象的属性,而Classname用于访问属于类的属性。 属于类/ static属性的属性意味着所有对象都将共享这些属性。

建议阅读: 了解实例和类成员

您可以使用this来访问类的非静态成员,而ClassName用于访问静态成员。 类的非静态字段对于该类的每个实例都是唯一的,而static字段对于所有实例都是公共的。

class Test{

    String txt;
    static String sTxt;

    public Test(String t) {
        this.txt = t; // accessing the instance variable using this
    }
}

class Test2{

    void someMethod(){
        Test t = new Test("someString");
        Test.sTxt; // Accessing the static member, using classname
    }

}
public Patient(String ptNo, String ptName, int procType) throws IOException
{
  Patient.patientNo =  ptNo;
  Patient.patientName = ptName;
  Patient.procedureType = procType;
}

仅当所有三个变量都是静态的时,此代码才有效

public class Patient
{
 static String patientNo;
 static int procedureType;
 static String patientName;

 public Patient(String ptNo, String ptName, int procType) throws IOException
 {
     Patient.patientNo =  ptNo;
     Patient.patientName = ptName;
     Patient.procedureType = procType;
 }
} 

像这样

public Patient(String ptNo, String ptName, int procType) throws IOException
{
   this.patientNo =  ptNo;
   this.patientName = ptName;
   this.procedureType = procType;
}

将适用于非静态变量,“ this”仅用于避免混淆,它表示正在调用其构造函数的对象。

Patient p = new Patient("A","B",1);

就像说

   p.patientNo =  ptNo;
   p.patientName = ptName;
   p.procedureType = procType;

编辑

在这样的情况下救援

public class Patient  
{
  String patientNo;
  int procedureType;
  String patientName;

  public Patient(String patientNo, String patientName, int procedureType) throws IOException
  {
     this.patientNo =  patientNo;      // variables in LHS are class members, RHS are method parameters
     this.patientName = patientName;
     this.procedureType = procedureType;
  }
} 

this是用来访问对象属性。 它通常用于访问类的非静态变量,因为它们与对象相关联。

className通常用于访问静态变量,因为静态变量与类相关联。

静态变量在类加载时初始化,其中仅当创建类对象时才将作为对象变量的对象初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM