2013-11-07 19 views
0

Я задал этот вопрос Adding objects to an array. И теперь он поднял еще один вопрос.Разница между этим и классом

Есть ли разница между этим: Для класса Patient:

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

Я думал, что они то же самое?


редактировать Я создал это в классе пациента.

private static String patientNo; 
private static String procedureDate; 
private static String patientName; 
+1

Вам действительно нужно прочитать о разница между атрибутами экземпляра и атрибутами class (static). – Ingo

+0

@Ingo У меня есть и ничего из этого не имеет смысла, я думаю, что у меня не получится этот предмет. Святое дерьмо –

+0

Я толстый, как два кирпича, и серьезно нужно спросить себя. Должен ли я изучать программирование –

ответ

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

будет работать для не статических переменных, «это» просто используемый для избежания путаницы, обозначает объект, конструктор которого вызывается.Пример

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

будет такой же, как говорят

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

EDIT

"это" приходит на помощь в такой ситуации, как этот

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

Я добавил часть своего кода, чтобы отразить это .. re статические .. ty для этого. это было очень полезно. Я ценю, что вы тратите время на то, чтобы написать какой-то код для объяснения .., что всегда помогает –

+0

Рад помочь, увидеть мое редактирование, возможно, вы поймете это «ясно». –

+0

tysm да между этим и другими ответами и комментариями, я действительно понимаю.Я чувствую себя плачущим с облегчением и твоей добротой. –

3

this используется для доступа свойства, которые принадлежат к объекту, в то время как Classname используется для доступа к свойствам, которые принадлежат к классу. Свойства, принадлежащие атрибутам класса/static, означают, что они будут использоваться всеми объектами.

Предложенное чтение: Understanding Instance and Class Members

+0

Итак, пациент из класса, который я использую для доступа к классу из другого класса? –

2

используется 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 
    } 

} 
+0

@ RomanVottner - Именно поэтому я и не упомянул об этом, так как это плохая практика, и OP не должен ее попробовать, даже для тестирования! :) – SudoRahul

+1

@rj спасибо за головы за то, что –

1

this используется для доступа к объектам. Он обычно используется для доступа к нестационарным переменным класса, поскольку они связаны с объектом.

className обычно используется для доступа к статическим переменным, поскольку статические переменные связаны с классом.

Статическая переменная инициализируется, когда нагрузки классов, где в качестве объектной переменной инициализируются только при создании объекта класса.

+0

ty для этого объяснения помогает +1 –

+0

@ Skippy-psI'mawoman Я рад, что могу объяснить тоже ... :) – guptakvgaurav

Смежные вопросы