2015-10-19 4 views
3

Я понимаю, что это относится к текущему объекту. Поэтому вместо того, чтобы использовать objectname.fun(objectname.nonstaticmember), почему я не могу использовать objectname.fun(this.nonstaticmember)Почему здесь нельзя использовать это ключевое слово?

См. Пример ниже и посмотрите последние два комментария в конце.

public class Question 
{ 
    int data; 

    void myfun(int data) 
    { 
     System.out.println("data=="+data); 
    } 

    public Question(int data) 
    { 
     this.data = data; 
     // TODO Auto-generated constructor stub 
    } 

    public static void main(String[] args) 
    { 
     Question question = new Question(10); 
     //question.myfun(question.data);//WORKS 
     question.myfun(this.data);//DOES NOT WORK 
    } 
} 

ответ

5

Как вы упомянули, ключевое слово this используется для обозначения текущего объекта, а не класса как такового. В вашем случае вы пытаетесь использовать его() в статическом методе main. Также проверьте это link.

+0

Ох, так что «это» внутри функции относится к объекту, который использовался для вызова этой функции? Так как никакие объекты не использовались для вызова main (будучи статическими), поэтому он дал бы мне «Нельзя использовать это в статическом контексте». Спасибо, не знал – PepperBoy

+1

@PepperBoy: Проще говоря, 'this' относится к текущему экземпляру, а ключевое слово' static' всегда указывает на то, что принадлежит всему классу, а не конкретному экземпляру. Поэтому 'this' не имеет смысла для статических методов. –

3

main() является static метод (метод класса) он не работает от объекта. Поскольку он находится в контексте класса, ключевое слово this не имеет смысла (к нему не имеет никакого объекта ссылки).

1

В java это ключевое слово используется для ссылки на текущий объект, но main является статическим методом, внутри статического метода это ключевое слово не имеет значения.

public class Line { 
public static void main(String[] args){ 
    System.out.println(this); 

}}

Вывод: время компиляции ошибка «не статическую переменную этого нельзя ссылаться из статического контекста».

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