这个和类名之间的区别

时间:2013-11-07 11:13:12

标签: java class object constructor this

我问过这个问题Adding objects to an array。现在它提出了另一个问题。

这有什么区别: 对于班级患者:

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;

4 个答案:

答案 0 :(得分:4)

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

建议阅读: Understanding Instance and Class Members

答案 1 :(得分:3)

使用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
    }

}

答案 2 :(得分:3)

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;
  }
} 

答案 3 :(得分:2)

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

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

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