0

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

这之间有区别吗:对于班级患者:

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

4 回答 4

4

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

推荐阅读:理解实例和类成员

于 2013-11-07T11:14:17.373 回答
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
    }

}
于 2013-11-07T11:14:55.113 回答
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;

编辑

“this”在这种情况下来救援

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;
  }
} 
于 2013-11-07T11:19:01.063 回答
2

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

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

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

于 2013-11-07T11:16:59.513 回答