Что значит вводить «этот» аргумент в конструктор и делать копию? [Дубликат]

Вы можете заставить это работать естественным образом, как вы ожидали, - используя дисплей, - но вам нужно активировать браузер, чтобы заставить его работать, используя JS или, как другие, предложили фантастический трюк с одним тегом внутри другого. Мне не нужен внутренний тег, поскольку он еще более усложняет CSS и размеры, поэтому вот решение JS:

https://jsfiddle.net/b9chris/hweyecu4/1/

Начиная с поля типа:


Скрытое поле. Вы можете переключиться на клик с помощью:

function toggleTransition() {
  var el = $("div.box1");

  if (el.length) {
    el[0].className = "box";
    el.stop().css({maxWidth: 10000}).animate({maxWidth: 10001}, 2000, function() {    
        el[0].className = "box hidden";
    });
  } else {
    el = $("div.box");
    el[0].className = "box";
    el.stop().css({maxWidth: 10001}).animate({maxWidth: 10000}, 50, function() {    
        el[0].className = "box box1";
    });
  }

  return el;
}

someTag.click(toggleTransition);

. CSS - это то, что вы догадались:

.hidden {
  display: none;
}
.box {
    width: 100px;
    height: 100px;
    background-color: blue;
    color: yellow;
    font-size: 18px;
    left: 20px;
    top: 20px;
    position: absolute;
    -webkit-transform-origin: 0 50%;
    transform-origin: 0 50%;
    -webkit-transform: scale(.2);
    transform: scale(.2);
  -webkit-transition: transform 2s;
  transition: transform 2s;
}
.box1{
    -webkit-transform: scale(1);
    transform: scale(1);
}

Ключ регулирует свойство отображения. Удалив скрытый класс, а затем ожидая 50 мс, , затем , начиная переход через добавленный класс, мы получим его, чтобы он появился, а затем развернулся, как мы хотели, вместо того, чтобы просто накладывать на экран без какой-либо анимации. Аналогично происходит другой путь, за исключением того, что мы ожидаем завершения анимации перед применением скрытых.

Примечание: я злоупотребляю .animate(maxWidth) здесь, чтобы избежать условий гонки setTimeout. setTimeout быстро вводит скрытые ошибки, когда вы или кто-то другой захватывает код, не подозревая об этом. .animate() можно легко убить с помощью .stop(). Я просто использую его для установки задержки 50 мс или 2000 мс в стандартной очереди fx, где ее легко найти / разрешить другими конструкторами кодов поверх этого.

104
задан FORE 12 October 2015 в 04:08
поделиться

18 ответов

Если вы вызываете myObject.method(), то this будет ссылаться на myObject внутри method.

6
ответ дан aioobe 26 August 2018 в 14:49
поделиться

Быстрый поиск в Google принес этот результат: http://xahlee.org/java-a-day/this.html

В значительной степени ключевым словом «this» является ссылка на текущий объект (сам).

1
ответ дан Albinoswordfish 26 August 2018 в 14:49
поделиться

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

class Example{
     int assign;// instance variable

     Example(int assign){ // variable inside constructor
          this.assign=assign;
     }
}

Надеемся, что это поможет.

1
ответ дан Android 26 August 2018 в 14:49
поделиться

Я также искал тот же ответ и как-то не мог понять концепцию ясно. Но, наконец, я понял это из этой ссылки

, это ключевое слово в Java. Который может использоваться внутри метода или конструктора класса. Он (это) работает как ссылка на текущий объект, метод которого или конструктор вызывается. это ключевое слово можно использовать для ссылки любого члена текущего объекта из метода экземпляра или конструктора.

Проверьте примеры в ссылке для ясного понимания

1
ответ дан argo 26 August 2018 в 14:49
поделиться

Это ключевое слово используется для ссылки на текущую переменную блока, например, рассмотрим приведенный ниже код (просто пример, поэтому не ожидайте стандартного кода JAVA):

Public class test{

test(int a) {
this.a=a;
}

Void print(){
System.out.println(a);
}

   Public static void main(String args[]){
    test s=new test(2);
    s.print();
 }
}

Thats it. Выход будет «2». Если мы не использовали это ключевое слово, то выход будет: 0

2
ответ дан Balaji 26 August 2018 в 14:49
поделиться

Он ссылается на экземпляр, по которому этот метод называется

class A {

  public boolean is(Object o) {
    return o == this;
  }

}

A someA = new A();
A anotherA = new A();
someA.is(someA); // returns true
someA.is(anotherA); // returns false
4
ответ дан Bart van Heukelom 26 August 2018 в 14:49
поделиться

this является ссылкой на текущий объект: http://download.oracle.com/javase/tutorial/java/javaOO/thiskey.html

2
ответ дан Behrang 26 August 2018 в 14:49
поделиться

Чтобы быть полным, this также можно использовать для ссылки на внешний объект

class Outer {
    class Inner {
        void foo() {
            Outer o = Outer.this;
    }
  }
}
36
ответ дан Community 26 August 2018 в 14:49
поделиться

это может использоваться внутри некоторого метода или конструктора.

Возвращает ссылку на текущий объект.

2
ответ дан Dheeraj Joshi 26 August 2018 в 14:49
поделиться

Переменные экземпляра являются общими для каждого создаваемого вами объекта. скажем, есть две переменные экземпляра

class ExpThisKeyWord{
int x;
int y;

public void setMyInstanceValues(int a, int b) {
    x= a;
    y=b;

    System.out.println("x is ="+x);
    System.out.println("y is ="+y);
}

}




class Demo{
public static void main(String[] args){

ExpThisKeyWord obj1 = new ExpThisKeyWord();
ExpThisKeyWord obj2 = new ExpThisKeyWord();
ExpThisKeyWord obj3 = new ExpThisKeyWord();

obj1.setMyInstanceValues(1, 2);
obj2.setMyInstanceValues(11, 22);
obj3.setMyInstanceValues(111, 222);



}
}

, если вы заметили выше код, мы инициировали три объекта, а три объекта вызывают метод SetMyInstanceValues. Как вы думаете, JVM правильно назначает значения для каждого объекта? есть трюк, JVM не увидит этот код, как это показано выше. вместо этого он будет выглядеть так, как показано ниже:

public void setMyInstanceValues(int a, int b) {
    this.x= a; //Answer: this keyword denotes the current object that is handled by JVM.
    this.y=b;

    System.out.println("x is ="+x);
    System.out.println("y is ="+y);
}
0
ответ дан Guna Yuvan 26 August 2018 в 14:49
поделиться

this относится к текущему объекту.

Каждый нестатический метод работает в контексте объекта. Итак, если у вас есть такой класс:

public class MyThisTest {
  private int a;

  public MyThisTest() {
    this(42); // calls the other constructor
  }

  public MyThisTest(int a) {
    this.a = a; // assigns the value of the parameter a to the field of the same name
  }

  public void frobnicate() {
    int a = 1;

    System.out.println(a); // refers to the local variable a
    System.out.println(this.a); // refers to the field a
    System.out.println(this); // refers to this entire object
  }

  public String toString() {
    return "MyThisTest a=" + a; // refers to the field a
  }
}

Затем вызов frobnicate() на new MyThisTest() будет печатать

1
42
MyThisTest a=42

. Так эффективно вы используете его для нескольких вещей:

  • уточнить, что вы говорите о поле, когда есть что-то еще с тем же именем, что и поле
  • , относятся к текущему объекту в целом
  • вызывать другие конструкторы текущего класса в вашем конструкторе
135
ответ дан Joachim Sauer 26 August 2018 в 14:49
поделиться

Это «ссылка на объект в текущем контексте» эффективно. Например, чтобы распечатать «этот объект», вы можете написать:

System.out.println(this);

Обратите внимание, что использование «глобальной переменной» несколько не работает ... если вы используете this.variableName, то по определению это not глобальная переменная - это переменная, специфичная для этого конкретного экземпляра.

3
ответ дан Jon Skeet 26 August 2018 в 14:49
поделиться

Ниже приводится копия & amp; вставьте из здесь , но очень хорошо объясняет все различные применения ключевого слова this:

Определение: ключевое слово Java this используется для ссылки на текущий экземпляр метода на который используется.

Ниже приведены способы использования этого:

  1. Чтобы специально обозначить, что вместо переменной static или local используется переменная экземпляра. То есть,
    private String javaFAQ;
    void methodName(String javaFAQ) {
        this.javaFAQ = javaFAQ;
    }
    
    Здесь это относится к переменной экземпляра. Здесь приоритет высокий для локальной переменной. Поэтому отсутствие this обозначает локальную переменную. Если локальная переменная, которая является именем параметра, не такая же, как переменная экземпляра, то независимо от this используется или нет, она обозначает переменную экземпляра.
  2. This используется для ссылки на конструкторы
     public JavaQuestions(String javapapers) {
         this(javapapers, true);
     }
    
    . вызывает конструктор того же класса java, который имеет два параметра.
  3. This используется для передачи текущего экземпляра java в качестве параметра
    obj.itIsMe(this);
    
  4. . Как и выше, это также может используется для возврата текущего экземпляра
    CurrentClassName startMethod() {
         return this;
    }
    
    Примечание. Это может привести к нежелательным результатам, когда они используются во внутренних классах в указанных выше двух точках. Поскольку это будет относиться к внутреннему классу, а не к внешнему экземпляру.
  5. This можно использовать для получения дескриптора текущего класса
    Class className = this.getClass(); // this methodology is preferable in java
    
    . Хотя это можно сделать с помощью
    Class className = ABC.class; // here ABC refers to the class name and you need to know that!
    

Как всегда, this связан с его экземпляром, и это не будет работать в статических методах.

50
ответ дан MicSim 26 August 2018 в 14:49
поделиться

(я знаю, что я поздно, но я был тайным бои, которого ты никогда не видел)

Это ключевое слово на большинстве объектно-ориентированных языков программирования, если не все означает, что его ссылку на текущий экземпляр объекта этого класса. Это по сути то же самое, что и вызов этого объекта извне метода по имени. Вероятно, это не имело никакого смысла, так что Ill подробно:

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

object.field

Скажите, например, что вы пытаетесь получить доступ к объекту. изнутри вашего класса, например, ваш конструктор, вы можете использовать

this.field

Это ключевое слово существенно заменяет ключевое слово name объекта при вызове внутри класса. Обычно не так много причин делать это за пределами, если у вас есть две переменные с одним и тем же именем, одна из которых является полем класса, а другая просто является переменной внутри метода, она помогает расшифровать между двумя , Например, если у вас есть это: (Hah, получите это? this ? Хе-хе ... только я? Okay :( Я уйду сейчас)

public String Name;
//Constructor for {object} class
public object(String Name){
    Name = Name;
}

вызовет некоторые проблемы, компилятор не сможет узнать разницу между переменной Name, определенной в параметрах для конструктора, и переменной Name внутри деклараций полей класса, чтобы вместо этого назначить параметр Name ... значение параметра Name, которое ничего не делает ничего полезного и буквально не имеет цели. Это распространенная проблема, которую делают большинство более новых программ, и я тоже был жертвой. В любом случае правильный способ определения этого параметра должен был бы использовать:

public String Name;
//Constructor for {object} class
public object(String Name){
    this.Name = Name;
}

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

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

0
ответ дан Nastyheatnor 26 August 2018 в 14:49
поделиться

В Java «это» является предопределенной переменной. Если мы используем «this» в методе, это означает, что мы получаем ссылку (адрес) текущего текущего объекта. Для примера.

this.age ---> возраст текущего текущего объекта.

1
ответ дан Nisal Edu 26 August 2018 в 14:49
поделиться

В Swing довольно распространено писать класс, который реализует ActionListener и добавляет текущий экземпляр (т. е. «это») в качестве ActionListener для компонентов.

public class MyDialog extends JDialog implements ActionListener
{
    public MyDialog()
    {
        JButton myButton = new JButton("Hello");
        myButton.addActionListener(this);
    }

    public void actionPerformed(ActionEvent evt)
    {
        System.out.println("Hurdy Gurdy!");
    }

}
8
ответ дан Qwerky 26 August 2018 в 14:49
поделиться

Он относится к текущему экземпляру определенного объекта, поэтому вы можете написать что-то вроде

public Object getMe() {
    return this;
}

. Обычный прецедент this - это предотвращение затенения. Возьмем следующий пример:

public class Person {
    private final String name;

    public Person(String name) {
        // how would we initialize the field using parameter?
        // we can't do: name = name;
    }
}

В приведенном выше примере мы хотим назначить член поля, используя значение параметра. Поскольку они имеют одно и то же имя, нам нужен способ различать поле и параметр. this позволяет нам обращаться к членам этого экземпляра, включая поле.

public class Person {
    private final String name;

    public Person(String name) {
        this.name = name;
    }
}
13
ответ дан Vince Emigh 26 August 2018 в 14:49
поделиться

Объекты имеют методы и атрибуты (переменные), которые производятся от классов, чтобы указать, какие методы и переменные принадлежат определенному объекту, используется зарезервированное слово this. в случае переменных экземпляра важно понять разницу между неявными и явными параметрами. Взгляните на вызов fillTank для объекта audi.

Car audi= new Car();

audi.fillTank(5); // 5 is the explicit parameter and the car object is the implicit parameter 

Значение в скобках является неявным параметром, а сам объект является явным параметром, методы, которые не имеют явные параметры, используют неявные параметры, метод fillTank имеет как явный, так и неявный параметр.

Давайте подробнее рассмотрим метод fillTank в классе Car

public class Car()
{
   private double tank;

   public Car()
   {
      tank = 0;
   }

   public void fillTank(double gallons)
   {
      tank = tank + gallons;
   }

}

. В этом классе мы имеем переменную экземпляра «tank». Может быть много объектов, которые используют переменную экземпляра резервуара, чтобы указать, что переменная экземпляра «tank» используется для определенного объекта, в нашем случае объект «audi», который мы создали ранее, мы используем ключевое слово this reserved , например, переменные, использование «этого» в методе указывает, что переменная экземпляра в нашем случае «tank» является переменной экземпляра неявного параметра.

Компилятор java автоматически добавляет this зарезервированный слово, поэтому вам не нужно добавлять его, это вопрос предпочтения. Вы не можете использовать this без точки (.), Потому что это правила java (синтаксис).

В заключение.

  • Объекты определены классами и имеют методы и переменные
  • Использование this для переменной экземпляра в методе указывает, что переменная экземпляра принадлежит неявному параметру или что она является переменной экземпляра неявного параметра.
  • Неявный параметр - это объект, из которого в этом случае вызывается метод «audi».
  • Компилятор java автоматически добавляет это зарезервированное слово, добавляя, что это вопрос предпочтения
  • this не может использоваться без точки (.), это синтаксически недействительно
  • this также может использоваться для различения локальных переменных и глобальных переменных, имеющих одно и то же имя
  • зарезервированное слово this также применяется к методам, чтобы указать, что метод принадлежит определенному объекту.
3
ответ дан Volker E. 26 August 2018 в 14:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: